diff mbox series

[1/1] arm64: dts: qcom: qrb5165-rb5: Enable the IMX577 on cam1

Message ID 20220518133004.342775-2-bryan.odonoghue@linaro.org (mailing list archive)
State Changes Requested
Headers show
Series Switch on IMX577 on RB5 | expand

Commit Message

Bryan O'Donoghue May 18, 2022, 1:30 p.m. UTC
The IMX577 is on CCI1/CSI2 providing four lanes of camera data.

An example media-ctl pipeline is:

media-ctl --reset
media-ctl -v -d /dev/media0 -V '"imx412 '20-001a'":0[fmt:SRGGB10/4056x3040 field:none]'
media-ctl -V '"msm_csiphy2":0[fmt:SRGGB10/4056x3040]'
media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
media-ctl -l '"msm_csiphy2":1->"msm_csid0":0[1]'
media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'

yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 98 ++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

Comments

Konrad Dybcio May 18, 2022, 1:55 p.m. UTC | #1
Hi!


On 18/05/2022 15:30, Bryan O'Donoghue wrote:
> The IMX577 is on CCI1/CSI2 providing four lanes of camera data.

Commit says IMX577, code says IMX412.


>
> An example media-ctl pipeline is:
>
> media-ctl --reset
> media-ctl -v -d /dev/media0 -V '"imx412 '20-001a'":0[fmt:SRGGB10/4056x3040 field:none]'
> media-ctl -V '"msm_csiphy2":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -l '"msm_csiphy2":1->"msm_csid0":0[1]'
> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
>
> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 98 ++++++++++++++++++++++++
>   1 file changed, 98 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> index 0e63f707b911..48b31790c434 100644
> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> @@ -1203,6 +1203,43 @@ sdc2_card_det_n: sd-card-det-n {
>   		function = "gpio";
>   		bias-pull-up;
>   	};
> +
> +	cam2_default: cam2-default {
> +		rst {
> +			pins = "gpio78";
> +			function = "gpio";
> +
> +			drive-strength = <2>;
> +			bias-disable;

Other pins in this DT don't have a newline between function and 
drive-strength, please remove it for consistency.


> +		};
> +
> +		mclk {
> +			pins = "gpio96";
> +			function = "cam_mclk";
> +
> +			drive-strength = <16>;
> +			bias-disable;
> +		};
> +	};
> +
> +	cam2_suspend: cam2-suspend {
> +		rst {
> +			pins = "gpio78";
> +			function = "gpio";
> +
> +			drive-strength = <2>;
> +			bias-pull-down;
> +			output-low;
> +		};
> +
> +		mclk {
> +			pins = "gpio96";
> +			function = "cam_mclk";
> +
> +			drive-strength = <2>;
> +			bias-disable;
> +		};
> +	};
>   };
>   
>   &uart12 {
> @@ -1294,3 +1331,64 @@ &qup_spi0_data_clk {
>   	drive-strength = <6>;
>   	bias-disable;
>   };
> +
> +&camcc {
> +	status = "okay";
> +};

It's enabled by default.


> +
> +&camss {
> +	status = "okay";
> +	vdda-phy-supply = <&vreg_l5a_0p88>;
> +	vdda-pll-supply = <&vreg_l9a_1p2>;
> +
> +	ports {

Maybe the port definitions along with #-cells here and on camss could be 
moved to the SoC DTSI?


> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		/* The port index denotes CSIPHY id i.e. csiphy2 */
> +		port@2 {
> +			reg = <2>;
> +			csiphy2_ep: endpoint {
> +				clock-lanes = <7>;
> +				data-lanes = <0 1 2 3>;
> +				remote-endpoint = <&imx412_ep>;
> +			};
> +
> +		};
> +	};
> +};
> +
> +&cci1 {
> +	status = "okay";
> +};
> +
> +&cci1_i2c0 {
> +	camera@1a {
> +		compatible = "sony,imx412";
> +		reg = <0x1a>;
> +
> +		reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
> +		pinctrl-names = "default", "suspend";
> +		pinctrl-0 = <&cam2_default>;
> +		pinctrl-1 = <&cam2_suspend>;
> +
> +		clocks = <&camcc CAM_CC_MCLK2_CLK>;
> +		assigned-clocks = <&camcc CAM_CC_MCLK2_CLK>;
> +		assigned-clock-rates = <24000000>;
> +
> +		power-domains = <&camcc TITAN_TOP_GDSC>;
> +		dovdd-supply  = <&vreg_l7f_1p8>;
> +		avdd-supply = <&vdc_5v>;
> +		dvdd-supply = <&vdc_5v>;
> +
> +		status = "okay";

It's enabled by default.


Konrad

> +		port {
> +			imx412_ep: endpoint {
> +				clock-lanes = <1>;
> +				link-frequencies = /bits/ 64 <600000000>;
> +				data-lanes = <1 2 3 4>;
> +				remote-endpoint = <&csiphy2_ep>;
> +			};
> +		};
> +	};
> +};
>
Vladimir Zapolskiy May 18, 2022, 2:04 p.m. UTC | #2
Hi Konrad,

On 5/18/22 16:55, Konrad Dybcio wrote:
> Hi!
> 
> 
> On 18/05/2022 15:30, Bryan O'Donoghue wrote:
>> The IMX577 is on CCI1/CSI2 providing four lanes of camera data.
> 
> Commit says IMX577, code says IMX412.
> 
> 
>>
>> An example media-ctl pipeline is:
>>
>> media-ctl --reset
>> media-ctl -v -d /dev/media0 -V '"imx412 '20-001a'":0[fmt:SRGGB10/4056x3040 field:none]'
>> media-ctl -V '"msm_csiphy2":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -l '"msm_csiphy2":1->"msm_csid0":0[1]'
>> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
>>
>> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0
>>
>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>> ---
>>    arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 98 ++++++++++++++++++++++++
>>    1 file changed, 98 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> index 0e63f707b911..48b31790c434 100644
>> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> @@ -1203,6 +1203,43 @@ sdc2_card_det_n: sd-card-det-n {
>>    		function = "gpio";
>>    		bias-pull-up;
>>    	};
>> +
>> +	cam2_default: cam2-default {
>> +		rst {
>> +			pins = "gpio78";
>> +			function = "gpio";
>> +
>> +			drive-strength = <2>;
>> +			bias-disable;
> 
> Other pins in this DT don't have a newline between function and
> drive-strength, please remove it for consistency.
> 
> 
>> +		};
>> +
>> +		mclk {
>> +			pins = "gpio96";
>> +			function = "cam_mclk";
>> +
>> +			drive-strength = <16>;
>> +			bias-disable;
>> +		};
>> +	};
>> +
>> +	cam2_suspend: cam2-suspend {
>> +		rst {
>> +			pins = "gpio78";
>> +			function = "gpio";
>> +
>> +			drive-strength = <2>;
>> +			bias-pull-down;
>> +			output-low;
>> +		};
>> +
>> +		mclk {
>> +			pins = "gpio96";
>> +			function = "cam_mclk";
>> +
>> +			drive-strength = <2>;
>> +			bias-disable;
>> +		};
>> +	};
>>    };
>>    
>>    &uart12 {
>> @@ -1294,3 +1331,64 @@ &qup_spi0_data_clk {
>>    	drive-strength = <6>;
>>    	bias-disable;
>>    };
>> +
>> +&camcc {
>> +	status = "okay";
>> +};
> 
> It's enabled by default.
> 

I'd prefer to see the camera clock controller disabled by default.

https://lore.kernel.org/linux-devicetree/20220518091943.734478-1-vladimir.zapolskiy@linaro.org/

>> +
>> +&camss {
>> +	status = "okay";
>> +	vdda-phy-supply = <&vreg_l5a_0p88>;
>> +	vdda-pll-supply = <&vreg_l9a_1p2>;
>> +
>> +	ports {
> 
> Maybe the port definitions along with #-cells here and on camss could be
> moved to the SoC DTSI?
> 

I agree with it.

>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		/* The port index denotes CSIPHY id i.e. csiphy2 */
>> +		port@2 {
>> +			reg = <2>;
>> +			csiphy2_ep: endpoint {
>> +				clock-lanes = <7>;
>> +				data-lanes = <0 1 2 3>;
>> +				remote-endpoint = <&imx412_ep>;
>> +			};
>> +
>> +		};
>> +	};
>> +};
>> +
>> +&cci1 {
>> +	status = "okay";
>> +};
>> +
>> +&cci1_i2c0 {
>> +	camera@1a {
>> +		compatible = "sony,imx412";
>> +		reg = <0x1a>;
>> +
>> +		reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
>> +		pinctrl-names = "default", "suspend";
>> +		pinctrl-0 = <&cam2_default>;
>> +		pinctrl-1 = <&cam2_suspend>;
>> +
>> +		clocks = <&camcc CAM_CC_MCLK2_CLK>;
>> +		assigned-clocks = <&camcc CAM_CC_MCLK2_CLK>;
>> +		assigned-clock-rates = <24000000>;
>> +
>> +		power-domains = <&camcc TITAN_TOP_GDSC>;
>> +		dovdd-supply  = <&vreg_l7f_1p8>;
>> +		avdd-supply = <&vdc_5v>;
>> +		dvdd-supply = <&vdc_5v>;
>> +
>> +		status = "okay";
> 
> It's enabled by default.
> 

--
Best wishes,
Vladimir
Bryan O'Donoghue May 18, 2022, 3:35 p.m. UTC | #3
On 18/05/2022 14:55, Konrad Dybcio wrote:
> Hi!
> 
> 
> On 18/05/2022 15:30, Bryan O'Donoghue wrote:
>> The IMX577 is on CCI1/CSI2 providing four lanes of camera data.
> 
> Commit says IMX577, code says IMX412.
> 
> 

The silicon enabling code for imx412 from Sony is the same as is used on 
imx577.

We have an imx577. I'll explain the difference in the V2 commit though.

>>
>> An example media-ctl pipeline is:
>>
>> media-ctl --reset
>> media-ctl -v -d /dev/media0 -V '"imx412 
>> '20-001a'":0[fmt:SRGGB10/4056x3040 field:none]'
>> media-ctl -V '"msm_csiphy2":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
>> media-ctl -l '"msm_csiphy2":1->"msm_csid0":0[1]'
>> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
>>
>> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F 
>> /dev/video0
>>
>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>> ---
>>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 98 ++++++++++++++++++++++++
>>   1 file changed, 98 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts 
>> b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> index 0e63f707b911..48b31790c434 100644
>> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
>> @@ -1203,6 +1203,43 @@ sdc2_card_det_n: sd-card-det-n {
>>           function = "gpio";
>>           bias-pull-up;
>>       };
>> +
>> +    cam2_default: cam2-default {
>> +        rst {
>> +            pins = "gpio78";
>> +            function = "gpio";
>> +
>> +            drive-strength = <2>;
>> +            bias-disable;
> 
> Other pins in this DT don't have a newline between function and 
> drive-strength, please remove it for consistency.
> 
> 
>> +        };
>> +
>> +        mclk {
>> +            pins = "gpio96";
>> +            function = "cam_mclk";
>> +
>> +            drive-strength = <16>;
>> +            bias-disable;
>> +        };
>> +    };
>> +
>> +    cam2_suspend: cam2-suspend {
>> +        rst {
>> +            pins = "gpio78";
>> +            function = "gpio";
>> +
>> +            drive-strength = <2>;
>> +            bias-pull-down;
>> +            output-low;
>> +        };
>> +
>> +        mclk {
>> +            pins = "gpio96";
>> +            function = "cam_mclk";
>> +
>> +            drive-strength = <2>;
>> +            bias-disable;
>> +        };
>> +    };
>>   };
>>   &uart12 {
>> @@ -1294,3 +1331,64 @@ &qup_spi0_data_clk {
>>       drive-strength = <6>;
>>       bias-disable;
>>   };
>> +
>> +&camcc {
>> +    status = "okay";
>> +};
> 
> It's enabled by default.

I'm assuming Vladimir's patch to disable by default goes in.
I'll include his patch as #1 in V2 so its clear on this point.

> 
>> +
>> +&camss {
>> +    status = "okay";
>> +    vdda-phy-supply = <&vreg_l5a_0p88>;
>> +    vdda-pll-supply = <&vreg_l9a_1p2>;
>> +
>> +    ports {
> 
> Maybe the port definitions along with #-cells here and on camss could be 
> moved to the SoC DTSI?

Makes sense.

---
bod
Vladimir Zapolskiy May 18, 2022, 7:09 p.m. UTC | #4
Hi Bryan,

On 5/18/22 16:30, Bryan O'Donoghue wrote:
> The IMX577 is on CCI1/CSI2 providing four lanes of camera data.
> 
> An example media-ctl pipeline is:
> 
> media-ctl --reset
> media-ctl -v -d /dev/media0 -V '"imx412 '20-001a'":0[fmt:SRGGB10/4056x3040 field:none]'
> media-ctl -V '"msm_csiphy2":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -l '"msm_csiphy2":1->"msm_csid0":0[1]'
> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
> 
> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0
> 
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 98 ++++++++++++++++++++++++
>   1 file changed, 98 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> index 0e63f707b911..48b31790c434 100644
> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> @@ -1203,6 +1203,43 @@ sdc2_card_det_n: sd-card-det-n {
>   		function = "gpio";
>   		bias-pull-up;
>   	};
> +
> +	cam2_default: cam2-default {
> +		rst {
> +			pins = "gpio78";
> +			function = "gpio";
> +
> +			drive-strength = <2>;
> +			bias-disable;
> +		};
> +
> +		mclk {
> +			pins = "gpio96";
> +			function = "cam_mclk";
> +
> +			drive-strength = <16>;
> +			bias-disable;
> +		};
> +	};
> +
> +	cam2_suspend: cam2-suspend {
> +		rst {
> +			pins = "gpio78";
> +			function = "gpio";
> +
> +			drive-strength = <2>;
> +			bias-pull-down;
> +			output-low;
> +		};
> +
> +		mclk {
> +			pins = "gpio96";
> +			function = "cam_mclk";
> +
> +			drive-strength = <2>;
> +			bias-disable;
> +		};
> +	};

I still stick to my opinion that the description of rst/mclk pins should
be uniformly added to the SoC specific .dtsi file. The pins and functions
in these device tree nodes are not changeable, a board file should just
select proper pairs.

Do you have any objections to it?

>   };
>   
>   &uart12 {
> @@ -1294,3 +1331,64 @@ &qup_spi0_data_clk {
>   	drive-strength = <6>;
>   	bias-disable;
>   };
> +
> +&camcc {
> +	status = "okay";
> +};
> +
> +&camss {
> +	status = "okay";
> +	vdda-phy-supply = <&vreg_l5a_0p88>;
> +	vdda-pll-supply = <&vreg_l9a_1p2>;
> +
> +	ports {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		/* The port index denotes CSIPHY id i.e. csiphy2 */
> +		port@2 {
> +			reg = <2>;
> +			csiphy2_ep: endpoint {
> +				clock-lanes = <7>;
> +				data-lanes = <0 1 2 3>;
> +				remote-endpoint = <&imx412_ep>;
> +			};
> +
> +		};
> +	};
> +};
> +
> +&cci1 {
> +	status = "okay";
> +};
> +
> +&cci1_i2c0 {
> +	camera@1a {
> +		compatible = "sony,imx412";
> +		reg = <0x1a>;
> +
> +		reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
> +		pinctrl-names = "default", "suspend";
> +		pinctrl-0 = <&cam2_default>;
> +		pinctrl-1 = <&cam2_suspend>;
> +
> +		clocks = <&camcc CAM_CC_MCLK2_CLK>;
> +		assigned-clocks = <&camcc CAM_CC_MCLK2_CLK>;
> +		assigned-clock-rates = <24000000>;
> +
> +		power-domains = <&camcc TITAN_TOP_GDSC>;

Above 'power-domains' property is not needed, it shall be implied by CCI.

> +		dovdd-supply  = <&vreg_l7f_1p8>;
> +		avdd-supply = <&vdc_5v>;
> +		dvdd-supply = <&vdc_5v>;
> +
> +		status = "okay";

Here 'status' property is not needed.

> +		port {
> +			imx412_ep: endpoint {
> +				clock-lanes = <1>;
> +				link-frequencies = /bits/ 64 <600000000>;
> +				data-lanes = <1 2 3 4>;
> +				remote-endpoint = <&csiphy2_ep>;
> +			};
> +		};
> +	};
> +};

I run on you branch on top of linux-next, but switch build options from modules to built-in

    CONFIG_I2C_QCOM_CCI=y
    CONFIG_VIDEO_QCOM_CAMSS=y

I didn't get the sensor initialized and hence there is no /dev/media0 node:

[    0.620205] i2c-qcom-cci ac50000.cci: Found 19200000 cci clk rate while 37500000 was expected
[    0.620551] i2c 20-001a: Fixing up cyclic dependency with ac6a000.camss
[    0.620754] imx412 20-001a: Looking up dovdd-supply from device tree
[    0.620797] imx412 20-001a: Looking up avdd-supply from device tree
[    0.620860] imx412 20-001a: Looking up dvdd-supply from device tree
[    0.620876] duplicated lane 1 in clock-lanes, using defaults
[    0.622789] imx412 20-001a: failed to find sensor: -5
[    0.622880] imx412: probe of 20-001a failed with error -5

I believe the problem could be related to CCI, please remind me, are there I2C bus pull-ups?

--
Best wishes,
Vladimir
kernel test robot May 21, 2022, 4:50 a.m. UTC | #5
Hi Bryan,

I love your patch! Yet something to improve:

[auto build test ERROR on robh/for-next]
[also build test ERROR on v5.18-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Bryan-O-Donoghue/Switch-on-IMX577-on-RB5/20220518-213438
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: arm64-allyesconfig (https://download.01.org/0day-ci/archive/20220521/202205211233.z5zpxDvl-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/9d9ad87ded5bf5f2f790a549863ad3d63b7336f3
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Bryan-O-Donoghue/Switch-on-IMX577-on-RB5/20220518-213438
        git checkout 9d9ad87ded5bf5f2f790a549863ad3d63b7336f3
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> Error: arch/arm64/boot/dts/qcom/qrb5165-rb5.dts:1335.1-7 Label or path camcc not found
>> Error: arch/arm64/boot/dts/qcom/qrb5165-rb5.dts:1339.1-7 Label or path camss not found
>> Error: arch/arm64/boot/dts/qcom/qrb5165-rb5.dts:1361.1-6 Label or path cci1 not found
>> Error: arch/arm64/boot/dts/qcom/qrb5165-rb5.dts:1375.20-21 syntax error
   FATAL ERROR: Unable to parse input tree
Bryan O'Donoghue May 22, 2022, 5:10 p.m. UTC | #6
On 18/05/2022 20:09, Vladimir Zapolskiy wrote:
> 
> I run on you branch on top of linux-next, but switch build options from 
> modules to built-in
> 
>     CONFIG_I2C_QCOM_CCI=y
>     CONFIG_VIDEO_QCOM_CAMSS=y
> 
> I didn't get the sensor initialized and hence there is no /dev/media0 node:
> 
> [    0.620205] i2c-qcom-cci ac50000.cci: Found 19200000 cci clk rate 
> while 37500000 was expected
> [    0.620551] i2c 20-001a: Fixing up cyclic dependency with ac6a000.camss
> [    0.620754] imx412 20-001a: Looking up dovdd-supply from device tree
> [    0.620797] imx412 20-001a: Looking up avdd-supply from device tree
> [    0.620860] imx412 20-001a: Looking up dvdd-supply from device tree
> [    0.620876] duplicated lane 1 in clock-lanes, using defaults
> [    0.622789] imx412 20-001a: failed to find sensor: -5
> [    0.622880] imx412: probe of 20-001a failed with error -5
> 
> I believe the problem could be related to CCI, please remind me, are 
> there I2C bus pull-ups?

Hmm.

Just trying to replicate this on linux-next

https://git.linaro.org/people/bryan.odonoghue/kernel.git/log/?h=linux-next-22-05-22%2bimx577-rb5

root@linaro-gnome:~# zcat /proc/config.gz | grep -e CONFIG_I2C_QCOM_CCI 
-e CONFIG_VIDEO_QCOM_CAMSS
CONFIG_I2C_QCOM_CCI=y
CONFIG_VIDEO_QCOM_CAMSS=y

root@linaro-gnome:~# uname -a
Linux linaro-gnome 5.18.0-rc7-next-20220518-00006-g3beef4d1d353-dirty 
#40 SMP PREEMPT Sun May 22 17:53:29 IST 2022 aarch64 GNU/Linux

root@linaro-gnome:~# cam -l
Available cameras:
1: 'imx412' (/base/soc@0/cci@ac50000/i2c-bus@0/camera@1a)

are you compiling everything in ?

---
bod
Vladimir Zapolskiy May 23, 2022, 1:50 p.m. UTC | #7
Hi Bryan,

On 5/22/22 20:10, Bryan O'Donoghue wrote:
> On 18/05/2022 20:09, Vladimir Zapolskiy wrote:
>>
>> I run on you branch on top of linux-next, but switch build options from
>> modules to built-in
>>
>>      CONFIG_I2C_QCOM_CCI=y
>>      CONFIG_VIDEO_QCOM_CAMSS=y
>>
>> I didn't get the sensor initialized and hence there is no /dev/media0 node:
>>
>> [    0.620205] i2c-qcom-cci ac50000.cci: Found 19200000 cci clk rate
>> while 37500000 was expected
>> [    0.620551] i2c 20-001a: Fixing up cyclic dependency with ac6a000.camss
>> [    0.620754] imx412 20-001a: Looking up dovdd-supply from device tree
>> [    0.620797] imx412 20-001a: Looking up avdd-supply from device tree
>> [    0.620860] imx412 20-001a: Looking up dvdd-supply from device tree
>> [    0.620876] duplicated lane 1 in clock-lanes, using defaults
>> [    0.622789] imx412 20-001a: failed to find sensor: -5
>> [    0.622880] imx412: probe of 20-001a failed with error -5
>>
>> I believe the problem could be related to CCI, please remind me, are
>> there I2C bus pull-ups?
> 
> Hmm.
> 
> Just trying to replicate this on linux-next
> 
> https://git.linaro.org/people/bryan.odonoghue/kernel.git/log/?h=linux-next-22-05-22%2bimx577-rb5
> 
> root@linaro-gnome:~# zcat /proc/config.gz | grep -e CONFIG_I2C_QCOM_CCI
> -e CONFIG_VIDEO_QCOM_CAMSS
> CONFIG_I2C_QCOM_CCI=y
> CONFIG_VIDEO_QCOM_CAMSS=y
> 
> root@linaro-gnome:~# uname -a
> Linux linaro-gnome 5.18.0-rc7-next-20220518-00006-g3beef4d1d353-dirty
> #40 SMP PREEMPT Sun May 22 17:53:29 IST 2022 aarch64 GNU/Linux
> 
> root@linaro-gnome:~# cam -l
> Available cameras:
> 1: 'imx412' (/base/soc@0/cci@ac50000/i2c-bus@0/camera@1a)
> 
> are you compiling everything in ?

it's some kind of a race related to probes of CAMSS, CCI and IMX412 drivers.

Since I'm able to reproduce it, I'll take the analysis on myself, and it does not
interfere with your patch series.

--
Best wishes,
Vladimir
Bryan O'Donoghue May 23, 2022, 3:30 p.m. UTC | #8
On 23/05/2022 14:50, Vladimir Zapolskiy wrote:
> it's some kind of a race related to probes of CAMSS, CCI and IMX412 
> drivers.
> 
> Since I'm able to reproduce it, I'll take the analysis on myself, and it 
> does not
> interfere with your patch series.

Ah, I think I have it pretty much narrowed down now. Needed to switch 
off modules entirely.

First probe fails, second probe succeeds.

Thanks anyway, I think I'm close to fix.

---
bod
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
index 0e63f707b911..48b31790c434 100644
--- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
+++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
@@ -1203,6 +1203,43 @@  sdc2_card_det_n: sd-card-det-n {
 		function = "gpio";
 		bias-pull-up;
 	};
+
+	cam2_default: cam2-default {
+		rst {
+			pins = "gpio78";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-disable;
+		};
+
+		mclk {
+			pins = "gpio96";
+			function = "cam_mclk";
+
+			drive-strength = <16>;
+			bias-disable;
+		};
+	};
+
+	cam2_suspend: cam2-suspend {
+		rst {
+			pins = "gpio78";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-pull-down;
+			output-low;
+		};
+
+		mclk {
+			pins = "gpio96";
+			function = "cam_mclk";
+
+			drive-strength = <2>;
+			bias-disable;
+		};
+	};
 };
 
 &uart12 {
@@ -1294,3 +1331,64 @@  &qup_spi0_data_clk {
 	drive-strength = <6>;
 	bias-disable;
 };
+
+&camcc {
+	status = "okay";
+};
+
+&camss {
+	status = "okay";
+	vdda-phy-supply = <&vreg_l5a_0p88>;
+	vdda-pll-supply = <&vreg_l9a_1p2>;
+
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		/* The port index denotes CSIPHY id i.e. csiphy2 */
+		port@2 {
+			reg = <2>;
+			csiphy2_ep: endpoint {
+				clock-lanes = <7>;
+				data-lanes = <0 1 2 3>;
+				remote-endpoint = <&imx412_ep>;
+			};
+
+		};
+	};
+};
+
+&cci1 {
+	status = "okay";
+};
+
+&cci1_i2c0 {
+	camera@1a {
+		compatible = "sony,imx412";
+		reg = <0x1a>;
+
+		reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
+		pinctrl-names = "default", "suspend";
+		pinctrl-0 = <&cam2_default>;
+		pinctrl-1 = <&cam2_suspend>;
+
+		clocks = <&camcc CAM_CC_MCLK2_CLK>;
+		assigned-clocks = <&camcc CAM_CC_MCLK2_CLK>;
+		assigned-clock-rates = <24000000>;
+
+		power-domains = <&camcc TITAN_TOP_GDSC>;
+		dovdd-supply  = <&vreg_l7f_1p8>;
+		avdd-supply = <&vdc_5v>;
+		dvdd-supply = <&vdc_5v>;
+
+		status = "okay";
+		port {
+			imx412_ep: endpoint {
+				clock-lanes = <1>;
+				link-frequencies = /bits/ 64 <600000000>;
+				data-lanes = <1 2 3 4>;
+				remote-endpoint = <&csiphy2_ep>;
+			};
+		};
+	};
+};