Letux Kernel

Issue 467: [upstream] OV9655 driver for OMAP3 ISP

Reported by Nikolaus Schaller, Jul 28, 2013

on the 3.10++ kernels, the way how the camera XCLK is specified and 
initialized has changed. So currently there is no clock 
initialization and therefore the ov9655 chip is not found at all.

Comment 1 by Nikolaus Schaller, Aug 1, 2013

The main question is what we should specify for con_id and dev_id:

1349 static struct isp_platform_data gta04_isp_platform_data = {
1350         .subdevs = gta04_camera_subdevs_group,
1351         .xclks[0] = { /* XCLK_A */
1352 #warning what names/ids should we provide here?
1353                 .con_id = "cam_xclka?",
1354                 .dev_id = "cam_xclka?",
1355         },
1356         /* .set_constraints = & void 
(*set_constraints)(struct isp_device *isp, bool enable) */
1357 };
Owner: hns

Comment 2 by Nikolaus Schaller, Aug 1, 2013

Some research indicates that we have to specify something like

cam_mclk
cam_clkdm

Comment 3 by Nikolaus Schaller, Aug 3, 2013

Laurent Pinchard gave me a link to a patch for the BeagleBoard:

http://git.linuxtv.org/pinchartl/media.git/commitdiff/eaae9b6eec327f4
af7a80a2e8ccde82139621688

And it appears that we have to fix the ov9655 driver as well to 
handle some clock and regulator directly.

Comment 4 by Nikolaus Schaller, Aug 3, 2013

Ok,
appears to work now.

There is still some issue with the regulators (which are defined in 
the board file and also registered - maybe twice)

I see on dmesg:


[    0.205444] reg-virt-consumer reg-virt-consumer.1: Failed to 
obtain supply 'vaux1': -517
[    0.205474] platform reg-virt-consumer.1: Driver 
reg-virt-consumer requests probe deferral
[    0.205535] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    0.205535] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    0.205596] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    0.205596] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral
[    0.206146] platform omap_uart.0: Driver omap_uart requests probe 
deferral

and


[    3.645111] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    3.653625] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    3.662475] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    3.671020] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral
[    3.680053] omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 88) is a 
OMAP UART0
[    3.687896] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    3.696411] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    3.705169] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    3.713623] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral
[    3.722625] UBI: default fastmap pool size: 200
[    3.727478] UBI: default fastmap WL pool size: 25
[    3.732421] UBI: attaching mtd4 to ubi0
[    4.124389] bq27000-battery bq27000-battery: support ver. 1.2.0 
enabled
[    4.344299] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    4.364135] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    4.384155] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    4.392639] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral

and


[    7.322174] media: Linux media interface: v0.10
[    7.397277] Linux video capture interface: v2.00
[    7.508636] omap3isp omap3isp: Revision 15.0 found
[    7.513977] omap-iommu omap-iommu.0: mmu_isp: version 1.1
[    7.619842] omap3isp omap3isp: hist: DMA channel = 4
[    7.733154] omap3isp omap3isp: isp_xclk_set_rate: cam_xclka set 
to 24685714 Hz (div 7)
[    7.767486] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    7.776092] ov9655 2-0030: OV9655 power on
[    7.814544] ov9655 2-0030: OV9655 read register 1c
[    7.820312] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    7.846405] ov9655 2-0030: OV9655 read register 1d
[    7.894409] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    7.902923] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral
[    7.914031] ov9655 2-0030: OV9655 read register 0a
[    7.949890] ov9655 2-0030: OV9655 read register 0b
[    7.972137] ov9655 2-0030: OV9655 power off
[    8.036682] ov9655 2-0030: OV9655 detected at address 0x30
[    8.155761] reg-virt-consumer reg-virt-consumer.2: Failed to 
obtain supply 'vaux2': -517
[    8.179595] hso: drivers/net/usb/hso.c: Option Wireless
[    8.202301] platform reg-virt-consumer.2: Driver 
reg-virt-consumer requests probe deferral
[    8.231109] usbcore: registered new interface driver hso
[    8.245391] reg-virt-consumer reg-virt-consumer.3: Failed to 
obtain supply 'vaux3': -517
[    8.253906] platform reg-virt-consumer.3: Driver 
reg-virt-consumer requests probe deferral
[    8.930755] ov9655_open
[    8.933380] ov9655 2-0030: OV9655 power on
[    9.030181] ov9655_reset
[    9.032867] ov9655 2-0030: ov9655_reset
[    9.039184] ov9655 2-0030: OV9655 write 01 to register 09
[    9.045135] ov9655 2-0030: OV9655 write 40 to register 15
[    9.059875] ov9655 2-0030: OV9655 write 00 to register 11
[    9.065856] ov9655 2-0030: OV9655 write 4a to register 6b

Comment 5 by Nikolaus Schaller, Oct 1, 2013

The next step is to clean up the code (remove unimplemented 
features, but keep them in some TODO comment) and try to get it 
upstream.
Labels: Milestone:3.12 Milestone:3.10
Owner: marekb

Comment 6 by Nikolaus Schaller, Dec 17, 2013

changed to 'task'
Labels: Type:Task Type:Defect
Summary: [upstream] OV9655 driver for OMAP3 ISP

Comment 7 by Nikolaus Schaller, Apr 10, 2014

reduced priority and postponed for milestone 3.15
Labels: Priority:Medium Milestone:3.15 Priority:Critical Milestone:3.12

Comment 8 by Nikolaus Schaller, May 26, 2014

(new) ISP appears to arrive in 3.16:

https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/comm
it/?id=656111f4b9cbc5a9b86cc2d6ac54dea0855209f0
Labels: Milestone:3.16 Milestone:3.15

Comment 9 by Nikolaus Schaller, Nov 24, 2014

Here is some info about DT bindings for a camera:

https://www.mail-archive.com/linux-media@vger.kernel.org/msg70444.htm
l

Comment 10 by Nikolaus Schaller, May 19, 2015

DT has been updated to configure ISP. Missing is DT support for 
OV9655 camera module and the module needs to be adjusted to some 
V4L2 API changes.
Labels: Milestone:4.2 Milestone:3.16

Comment 11 by Nikolaus Schaller, Jun 7, 2016

There is an ov9650/9652 driver for a while which looks to be a good 
starting point.
Checking register constants of that driver with our ov9655 data 
sheet shows ca. 80% similarities, but 20% of the registers are 
different.
This means the driver has to get dynamic register numbers / values.
Additionally it is lacking:
* device tree support
* clock kand regulator control

Comment 12 by Nikolaus Schaller, Jun 7, 2016

hns has worked during the OpenPhoenux hacking weekend.
Owner: hns

Comment 13 by Nikolaus Schaller, Jun 7, 2016

The feature branch work/hns/video/ov9655 now adds most missing 
functions - except programming the chip. It is clocked, powered and 
found if available.

Comment 14 by Nikolaus Schaller, Apr 22, 2020

Status is that it did work partially for some years and is broken 
again since v5.7-rc1.

The symptom is that the manufacturer id register can not be read and 
this makes the driver reject probing:

[   38.270416] ov9655 1-0030: ov9655_probe
[   38.274536] ov9655 1-0030: supply dvdd not found, using dummy 
regulator
[   38.300537] ov9655 1-0030: supply dovdd not found, using dummy 
regulator
[   38.308227] ov9655 1-0030: __ov9655_set_power on=1
[   38.440185] ov9655 1-0030: OV9655 read register 1c : ffffff87
[   38.453613] ov9655 1-0030: OV9655 read register 1d : ffffff87
[   38.459686] ov9655 1-0030: OV9655 not detected, can't read 
manufacturer id
[   38.490600] ov9655 1-0030: __ov9655_set_power on=0
[   38.507781] ov9655: probe of 1-0030 rejects match -19

Comment 15 by Nikolaus Schaller, Apr 22, 2020

Well, that was a misunderstanding. The device which was tested has 
no ov9655 installed. So read failure is ok and expected.

Nevertheless the driver needs some cleanup and it is strange that it 
is not probed earlier.

Created: 6 years 11 months ago by Nikolaus Schaller

Updated: 2 months 12 days ago

Status: New

Owner: Nikolaus Schaller

Labels:
Type:Task
Priority:Medium
Milestone:4.2

This issue is related to
593 - 3.1...a - OV9655 chip is found