[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <29677b7d5ceb07693d0b530c88a5aa9bde6c04dd.camel@apitzsch.eu>
Date: Mon, 07 Apr 2025 21:10:34 +0200
From: André Apitzsch <git@...tzsch.eu>
To: Sakari Ailus <sakari.ailus@...ux.intel.com>
Cc: Ricardo Ribalda <ribalda@...nel.org>, Mauro Carvalho Chehab
<mchehab@...nel.org>, ~postmarketos/upstreaming@...ts.sr.ht,
phone-devel@...r.kernel.org, linux-media@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH RESEND 0/4] media: i2c: imx214: Problem with CCS PLL
calculator
Am Montag, dem 10.03.2025 um 23:35 +0100 schrieb André Apitzsch:
> Hi Sakari,
>
> Am Montag, dem 10.03.2025 um 11:11 +0000 schrieb Sakari Ailus:
> > Hi André,
> >
> > On Sat, Mar 08, 2025 at 10:47:54PM +0100, André Apitzsch via B4
> > Relay
> > wrote:
> > > The imx214 driver currently supports only a 24MHz external clock.
> > > But
> > > there are devices, like Qualcomm-MSM8916-based phones, which
> > > cannot
> > > provide this frequency. To make the sensor usable by those
> > > devices,
> > > add
> > > support for 23.88MHz clock.
> > >
> > > Signed-off-by: André Apitzsch <git@...tzsch.eu>
> > > ---
> > > André Apitzsch (4):
> > > media: i2c: imx214: Calculate link bit rate from clock
> > > frequency
> > > media: i2c: imx214: Prepare for variable clock frequency
> > > media: i2c: imx214: Read clock frequency from device tree
> > > media: i2c: imx214: Add support for 23.88MHz clock
> > >
> > > drivers/media/i2c/imx214.c | 188
> > > +++++++++++++++++++++++++++++++++++----------
> > > 1 file changed, 146 insertions(+), 42 deletions(-)
> >
> > Thanks for the patches.
> >
> > Do you think the driver could use the CCS PLL calculator? The PLL
> > appears to be compliant. The AR0234 driver will do the same. (The
> > sensor might just work with the CCS driver, too, but that's another
> > discussion.)
> >
> Using the CCS PLL calculator seems quite complicated compared to
> switching to the CCS driver. That's why I looked at the later first.
> But for it to work, quirks already need to be applied in
> ccs_power_on(), to disable writing to COMPRESSION_MODE, and in
> ccs_identify_module(), to change the MODULE_MANUFACTURER_ID register.
>
> I'll check if CCS PLL calculator could be used.
>
> Best regards,
> André
Hi Sakari,
the CCS PLL calculator seems to work (up to one problem) and to be a
more elegant way forward.
The problem is, that the pixel rate is too small by a factor of 10 and
I cannot figure out why. Any help would be appreciated.
My devices uses a clock-frequency of 24000000 and a link-frequency of
600000000. There are four data lanes.
The calculator returns a pixel rate of 480.000.000. The expected value
is 4800.000.000.
You can find the PLL input parameters in [1] and the generated debug
output below.
Best regards,
André
[1] https://github.com/a-andre/linux/blob/58e10a814985f700579847ac7c99468a65cb55bb/drivers/media/i2c/imx214.c#L1116-L1196
$ dmesg | grep imx
[ 17.851215] imx214 4-0010: vt_lanes: 4
[ 17.851245] imx214 4-0010: op_lanes: 4
[ 17.851254] imx214 4-0010: binning: 1x1
[ 17.851262] imx214 4-0010: min / max op_pre_pll_clk_div: 1 / 15
[ 17.851272] imx214 4-0010: pre-pll check: min / max op_pre_pll_clk_div: 1 / 15
[ 17.851281] imx214 4-0010: mul 50 / div 1
[ 17.851290] imx214 4-0010: pll_op check: min / max op_pre_pll_clk_div: 1 / 15
[ 17.851300] imx214 4-0010: op_pre_pll_clk_div 1
[ 17.851308] imx214 4-0010: more_mul_max: max_op_pll_multiplier check: 24
[ 17.851317] imx214 4-0010: more_mul_max: max_pll_op_clk_freq_hz check: 1
[ 17.851325] imx214 4-0010: more_mul_max: max_op_sys_clk_div check: 1
[ 17.851333] imx214 4-0010: more_mul_max: min_pll_multiplier check: 1
[ 17.851341] imx214 4-0010: more_mul_min: min_op_pll_op_clk_freq_hz check: 1
[ 17.851349] imx214 4-0010: more_mul_min: min_op_pll_multiplier check: 1
[ 17.851357] imx214 4-0010: more_mul_factor: 1
[ 17.851365] imx214 4-0010: more_mul_factor: min_op_sys_clk_div: 1
[ 17.851373] imx214 4-0010: final more_mul: 1
[ 17.851381] imx214 4-0010: op_sys_clk_div: 1
[ 17.851389] imx214 4-0010: op_pix_clk_div: 10
[ 17.851398] imx214 4-0010: min_vt_div: 10
[ 17.851406] imx214 4-0010: min_vt_div: max_vt_pix_clk_freq_hz: 10
[ 17.851414] imx214 4-0010: min_vt_div: min_vt_clk_div: 10
[ 17.851422] imx214 4-0010: max_vt_div: 40
[ 17.851486] imx214 4-0010: max_vt_div: min_vt_pix_clk_freq_hz: 40
[ 17.851502] imx214 4-0010: min_sys_div: 2
[ 17.851510] imx214 4-0010: min_sys_div: max_vt_pix_clk_div: 2
[ 17.851518] imx214 4-0010: min_sys_div: max_pll_op_clk_freq_hz: 2
[ 17.851526] imx214 4-0010: min_sys_div: one or even: 2
[ 17.851534] imx214 4-0010: max_sys_div: 4
[ 17.851541] imx214 4-0010: max_sys_div: min_vt_pix_clk_div: 4
[ 17.851549] imx214 4-0010: max_sys_div: min_vt_pix_clk_freq_hz: 4
[ 17.851557] imx214 4-0010: pix_div 3 too small or too big (5--10)
[ 17.851568] imx214 4-0010: ext_clk_freq_hz 24000000
[ 17.851578] imx214 4-0010: vt_pre_pll_clk_div 1
[ 17.851587] imx214 4-0010: vt_pll_multiplier 50
[ 17.851595] imx214 4-0010: vt_pll_ip_clk_freq_hz 24000000
[ 17.851603] imx214 4-0010: vt_pll_op_clk_freq_hz 1200000000
[ 17.851612] imx214 4-0010: vt_sys_clk_div 2
[ 17.851620] imx214 4-0010: vt_pix_clk_div 5
[ 17.851629] imx214 4-0010: vt_sys_clk_freq_hz 600000000
[ 17.851637] imx214 4-0010: vt_pix_clk_freq_hz 120000000
[ 17.851645] imx214 4-0010: op_sys_clk_div 1
[ 17.851653] imx214 4-0010: op_pix_clk_div 10
[ 17.851661] imx214 4-0010: op_sys_clk_freq_hz 1200000000
[ 17.851669] imx214 4-0010: op_pix_clk_freq_hz 120000000
[ 17.851677] imx214 4-0010: pixel rate in pixel array: 480000000
[ 17.851685] imx214 4-0010: pixel rate on CSI-2 bus: 480000000
[ 17.851694] imx214 4-0010: flags lane-speed
[ 17.869313] imx214 4-0010: vt_lanes: 4
[ 17.869342] imx214 4-0010: op_lanes: 4
[ 17.869352] imx214 4-0010: binning: 1x1
[ 17.869361] imx214 4-0010: min / max op_pre_pll_clk_div: 1 / 15
[ 17.869372] imx214 4-0010: pre-pll check: min / max op_pre_pll_clk_div: 1 / 15
[ 17.869382] imx214 4-0010: mul 50 / div 1
[ 17.869391] imx214 4-0010: pll_op check: min / max op_pre_pll_clk_div: 1 / 15
[ 17.869400] imx214 4-0010: op_pre_pll_clk_div 1
[ 17.869409] imx214 4-0010: more_mul_max: max_op_pll_multiplier check: 24
[ 17.869417] imx214 4-0010: more_mul_max: max_pll_op_clk_freq_hz check: 1
[ 17.869426] imx214 4-0010: more_mul_max: max_op_sys_clk_div check: 1
[ 17.869435] imx214 4-0010: more_mul_max: min_pll_multiplier check: 1
[ 17.869443] imx214 4-0010: more_mul_min: min_op_pll_op_clk_freq_hz check: 1
[ 17.869451] imx214 4-0010: more_mul_min: min_op_pll_multiplier check: 1
[ 17.869460] imx214 4-0010: more_mul_factor: 1
[ 17.869468] imx214 4-0010: more_mul_factor: min_op_sys_clk_div: 1
[ 17.869476] imx214 4-0010: final more_mul: 1
[ 17.869483] imx214 4-0010: op_sys_clk_div: 1
[ 17.869491] imx214 4-0010: op_pix_clk_div: 10
[ 17.869501] imx214 4-0010: min_vt_div: 10
[ 17.869509] imx214 4-0010: min_vt_div: max_vt_pix_clk_freq_hz: 10
[ 17.869517] imx214 4-0010: min_vt_div: min_vt_clk_div: 10
[ 17.869525] imx214 4-0010: max_vt_div: 40
[ 17.869533] imx214 4-0010: max_vt_div: min_vt_pix_clk_freq_hz: 40
[ 17.869541] imx214 4-0010: min_sys_div: 2
[ 17.869549] imx214 4-0010: min_sys_div: max_vt_pix_clk_div: 2
[ 17.869557] imx214 4-0010: min_sys_div: max_pll_op_clk_freq_hz: 2
[ 17.869565] imx214 4-0010: min_sys_div: one or even: 2
[ 17.869572] imx214 4-0010: max_sys_div: 4
[ 17.869580] imx214 4-0010: max_sys_div: min_vt_pix_clk_div: 4
[ 17.869588] imx214 4-0010: max_sys_div: min_vt_pix_clk_freq_hz: 4
[ 17.869596] imx214 4-0010: pix_div 3 too small or too big (5--10)
[ 17.869607] imx214 4-0010: ext_clk_freq_hz 24000000
[ 17.869616] imx214 4-0010: vt_pre_pll_clk_div 1
[ 17.869624] imx214 4-0010: vt_pll_multiplier 50
[ 17.869633] imx214 4-0010: vt_pll_ip_clk_freq_hz 24000000
[ 17.869642] imx214 4-0010: vt_pll_op_clk_freq_hz 1200000000
[ 17.869651] imx214 4-0010: vt_sys_clk_div 2
[ 17.869659] imx214 4-0010: vt_pix_clk_div 5
[ 17.869667] imx214 4-0010: vt_sys_clk_freq_hz 600000000
[ 17.869675] imx214 4-0010: vt_pix_clk_freq_hz 120000000
[ 17.869684] imx214 4-0010: op_sys_clk_div 1
[ 17.869692] imx214 4-0010: op_pix_clk_div 10
[ 17.869699] imx214 4-0010: op_sys_clk_freq_hz 1200000000
[ 17.869707] imx214 4-0010: op_pix_clk_freq_hz 120000000
[ 17.869716] imx214 4-0010: pixel rate in pixel array: 480000000
[ 17.869724] imx214 4-0010: pixel rate on CSI-2 bus: 480000000
[ 17.869732] imx214 4-0010: flags lane-speed
Powered by blists - more mailing lists