Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b97610ff authored by Chunhuan Zhan's avatar Chunhuan Zhan Committed by Gerrit - the friendly Code Review server
Browse files

msm : ais : diagnostic feature



provide the functions:
1. record the all camera related clocks' status
2. provide the get clock status interfaces
3. provide the read registers interfaces
4. provide read the regulators' status
5. provide set/get the specified gpio
6. get the ISP buffer states

Change-Id: I5ddb6ac5488aa46914a5fc6b642d8330e72d9b70
Signed-off-by: default avatarChunhuan Zhan <zhanc@codeaurora.org>
parent 974d74cb
Loading
Loading
Loading
Loading
+164 −0
Original line number Diff line number Diff line
* Qualcomm Technologies, Inc. MSM Camera diag

[Root level node]
==================
Required properties:
- compatible: Must be "qcom,diag-cam".

[Subnode]
==========
Required properties:
- mmagic-supply: should contain mmagic regulator used for mmagic clocks.
- gdscr-supply: should contain gdsr regulator used for cci clocks.
- vfe0-vdd-supply: phandle to vfe0 regulator.
- qcom,cam-vreg-name: name of the voltage regulators required for the device.
- clocks: List of clock handles. The parent clocks of the input clocks to the
        devices in this power domain are set to oscclk before power gating
        and restored back after powering on a domain. This is required for
        all domains which are powered on and off and not required for unused
        domains.
- clock-names: name of the clock used by the driver.
- qcom,clock-rates: clock rate in Hz.
- qcom,clock-control: The valid fields are "NO_SET_RATE", "INIT_RATE" and
  "SET_RATE". "NO_SET_RATE" the corresponding clock is enabled without setting
  the rate assuming some other driver has already set it to appropriate rate.
  "INIT_RATE" clock rate is not queried assuming some other driver has set
  the clock rate and ispif will set the the clock to this rate.
  "SET_RATE" clock is enabled and the rate is set to the value specified
  in the property qcom,clock-rates.

Example:

	qcom,diag-cam {
			cell-index = <0>;
			compatible = "qcom,diag-cam";
			status = "ok";
			mmagic-supply = <&gdsc_mmagic_camss>;
			gdscr-supply = <&gdsc_camss_top>;
			vfe0-vdd-supply = <&gdsc_vfe0>;
			vfe1-vdd-supply = <&gdsc_vfe1>;
			qcom,cam-vreg-name = "mmagic", "gdscr",
					"vfe0-vdd", "vfe1-vdd";
			clocks = <&clock_mmss clk_mmss_mmagic_ahb_clk>,
				<&clock_mmss clk_camss_top_ahb_clk>,
				<&clock_mmss clk_camss_ispif_ahb_clk>,
				<&clock_mmss clk_csi0phytimer_clk_src>,
				<&clock_mmss clk_camss_csi0phytimer_clk>,
				<&clock_mmss clk_camss_ahb_clk>,
				<&clock_mmss clk_csi1phytimer_clk_src>,
				<&clock_mmss clk_camss_csi1phytimer_clk>,
				<&clock_mmss clk_csi2phytimer_clk_src>,
				<&clock_mmss clk_camss_csi2phytimer_clk>,
				<&clock_mmss clk_csi0_clk_src>,
				<&clock_mmss clk_camss_csi0_clk>,
				<&clock_mmss clk_camss_csi0phy_clk>,
				<&clock_mmss clk_camss_csi0_ahb_clk>,
				<&clock_mmss clk_camss_csi0rdi_clk>,
				<&clock_mmss clk_camss_csi0pix_clk>,
				<&clock_mmss clk_csi1_clk_src>,
				<&clock_mmss clk_camss_csi1_clk>,
				<&clock_mmss clk_camss_csi1phy_clk>,
				<&clock_mmss clk_camss_csi1_ahb_clk>,
				<&clock_mmss clk_camss_csi1rdi_clk>,
				<&clock_mmss clk_camss_csi1pix_clk>,
				<&clock_mmss clk_csi2_clk_src>,
				<&clock_mmss clk_camss_csi2_clk>,
				<&clock_mmss clk_camss_csi2phy_clk>,
				<&clock_mmss clk_camss_csi2_ahb_clk>,
				<&clock_mmss clk_camss_csi2rdi_clk>,
				<&clock_mmss clk_camss_csi2pix_clk>,
				<&clock_mmss clk_csi3_clk_src>,
				<&clock_mmss clk_camss_csi3_clk>,
				<&clock_mmss clk_camss_csi3phy_clk>,
				<&clock_mmss clk_camss_csi3_ahb_clk>,
				<&clock_mmss clk_camss_csi3rdi_clk>,
				<&clock_mmss clk_camss_csi3pix_clk>,
				<&clock_mmss clk_vfe0_clk_src>,
				<&clock_mmss clk_camss_vfe0_clk>,
				<&clock_mmss clk_camss_csi_vfe0_clk>,
				<&clock_mmss clk_vfe1_clk_src>,
				<&clock_mmss clk_camss_vfe1_clk>,
				<&clock_mmss clk_camss_csi_vfe1_clk>,
				<&clock_mmss clk_mmagic_camss_axi_clk>,
				<&clock_mmss clk_camss_vfe_ahb_clk>,
				<&clock_mmss clk_camss_vfe0_ahb_clk>,
				<&clock_mmss clk_camss_vfe_axi_clk>,
				<&clock_mmss clk_camss_vfe0_stream_clk>,
				<&clock_mmss clk_smmu_vfe_axi_clk>,
				<&clock_mmss clk_camss_vfe1_ahb_clk>,
				<&clock_mmss clk_camss_vfe1_stream_clk>;
			clock-names =
				"clk_mmss_mmagic_ahb_clk",
				"clk_camss_top_ahb_clk",
				"clk_camss_ispif_ahb_clk",
				"clk_csi0phytimer_clk_src",
				"clk_camss_csi0phytimer_clk",
				"clk_camss_ahb_clk",
				"clk_csi1phytimer_clk_src",
				"clk_camss_csi1phytimer_clk",
				"clk_csi2phytimer_clk_src",
				"clk_camss_csi2phytimer_clk",
				"clk_csi0_clk_src",
				"clk_camss_csi0_clk",
				"clk_camss_csi0phy_clk",
				"clk_camss_csi0_ahb_clk",
				"clk_camss_csi0rdi_clk",
				"clk_camss_csi0pix_clk",
				"clk_csi1_clk_src",
				"clk_camss_csi1_clk",
				"clk_camss_csi1phy_clk",
				"clk_camss_csi1_ahb_clk",
				"clk_camss_csi1rdi_clk",
				"clk_camss_csi1pix_clk",
				"clk_csi2_clk_src",
				"clk_camss_csi2_clk",
				"clk_camss_csi2phy_clk",
				"clk_camss_csi2_ahb_clk",
				"clk_camss_csi2rdi_clk",
				"clk_camss_csi2pix_clk",
				"clk_csi3_clk_src",
				"clk_camss_csi3_clk",
				"clk_camss_csi3phy_clk",
				"clk_camss_csi3_ahb_clk",
				"clk_camss_csi3rdi_clk",
				"clk_camss_csi3pix_clk",
				"clk_vfe0_clk_src",
				"clk_camss_vfe0_clk",
				"clk_camss_csi_vfe0_clk",
				"clk_vfe1_clk_src",
				"clk_camss_vfe1_clk",
				"clk_camss_csi_vfe1_clk",
				"clk_mmagic_camss_axi_clk",
				"clk_camss_vfe_ahb_clk",
				"clk_camss_vfe0_ahb_clk",
				"clk_camss_vfe_axi_clk",
				"clk_camss_vfe0_stream_clk",
				"clk_smmu_vfe_axi_clk",
				"clk_camss_vfe1_ahb_clk",
				"clk_camss_vfe1_stream_clk";
			qcom,clock-rates = <0 0 0 0 0 0 0 0
				0 0 0 0 0 0 0 0 0 0
				0 0 0 0 0 0 0 0 0 0
				0 0 0 0 0 0 0 0 0 0
				0 0 0 0 0 0 0 0 0 0
				>;
			qcom,clock-cntl-support;
			qcom,clock-control = "NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE",
				"INIT_RATE","NO_SET_RATE","NO_SET_RATE",
				"INIT_RATE","NO_SET_RATE","INIT_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE",
				"NO_SET_RATE","NO_SET_RATE","NO_SET_RATE";
	};
+1 −0
Original line number Diff line number Diff line
@@ -22,4 +22,5 @@ obj-$(CONFIG_MSM_AIS_JPEG) += jpeg_10/
obj-$(CONFIG_MSM_AIS_JPEGDMA) += jpeg_dma/
obj-$(CONFIG_MSM_AIS) += msm_buf_mgr/
obj-$(CONFIG_MSM_AIS) += msm_ais_mgr/
obj-$(CONFIG_MSM_AIS) += msm_ais_diag/
obj-$(CONFIG_MSM_AIS_FD) += fd/
+1 −1
Original line number Diff line number Diff line
ccflags-y += -Idrivers/media/platform/msm/ais/
obj-$(CONFIG_MSM_AIS) += msm_camera_io_util.o cam_smmu_api.o cam_hw_ops.o cam_soc_api.o
obj-$(CONFIG_MSM_AIS) += msm_camera_io_util.o cam_smmu_api.o cam_hw_ops.o cam_soc_api.o msm_camera_diag_util.o
+4 −1
Original line number Diff line number Diff line
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -19,6 +19,7 @@
#include <linux/pm_opp.h>
#include <linux/regulator/rpm-smd-regulator.h>
#include "cam_hw_ops.h"
#include "msm_camera_diag_util.h"

#ifdef CONFIG_CAM_AHB_DBG
#define CDBG(fmt, args...) pr_err(fmt, ##args)
@@ -242,6 +243,8 @@ static int cam_consolidate_ahb_vote(enum cam_ahb_clk_client id,
			data.ahb_clk_state = max;
			CDBG("dbg: state : %u, vector : %d\n",
				data.ahb_clk_state, max);

			msm_camera_diag_update_ahb_state(data.ahb_clk_state);
		}
	} else {
		pr_err("err: no bus vector found\n");
+2 −11
Original line number Diff line number Diff line
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -12,16 +12,7 @@
#ifndef _CAM_HW_OPS_H_
#define _CAM_HW_OPS_H_

enum cam_ahb_clk_vote {
	/* need to update the voting requests
	 * according to dtsi entries.
	 */
	CAM_AHB_SUSPEND_VOTE = 0x0,
	CAM_AHB_SVS_VOTE = 0x01,
	CAM_AHB_NOMINAL_VOTE = 0x02,
	CAM_AHB_TURBO_VOTE = 0x03,
	CAM_AHB_DYNAMIC_VOTE = 0xFF,
};
#include <media/ais/msm_ais_mgr.h>

enum cam_ahb_clk_client {
	CAM_AHB_CLIENT_CSIPHY,
Loading