[PATCH v8 0/2] On Semi AR0521 sensor driver

From: Krzysztof Hałasa
Date: Tue Mar 01 2022 - 03:33:39 EST


Rob, Mauro, media subsystem reviewers,

This is the 8th version of my On Semi AR0521 sensor driver.
Is there anything here that should be changed in order to get it merged?
Perhaps it should be added to the staging area instead?


The documentation patch (1/2) hasn't been changed from v4:

onnn,ar0521.yaml | 112
1 file changed, 112 insertions(+)

The actual driver (2/2) stats:
MAINTAINERS | 7
drivers/media/i2c/Kconfig | 13
drivers/media/i2c/Makefile | 1
drivers/media/i2c/ar0521.c | 1059
4 files changed, 1080 insertions

v8:
- dropped the remaining debugs
- added pm_runtime_idle() call
- a couple of cosmetic changes

v7:
- removed AR0521_NUM_SUPPLIES macro: ARRAY_SIZE(ar0521_supply_names)
is now used directly.

- fixed ar0521_power_off() return type, reported-by: kernel test robot
<lkp@xxxxxxxxx> (apparently can't add this tag for the whole patch).

- moved pm_runtime_get_if_in_use()/pm_runtime_put() up the stack.
The old way was causing problems when used in sensor power_on(),
before initial pm_runtime setup.

- clearer REGS() macro

v6:
- I reformatted the code to fit in 80 columns. Nobody should be asked to
make his code worse (and the 80-column version IS worse), and multiple
high-profile Linux developers (including the top one) appear to share
my opinion, but nevertheless - if it's something that will make it go
in, I won't care.

- Basically the same applies to the // comments.

- I have removed the "interval" support (frames per second).
Unfortunately this cripples the driver further a bit - the userspace
will not be able to set precise frame timings needed for broadcast
quality video. I will have to keep a private patch for that.
Another effect of this change is that the pixel clock is now fixed at
184 MHz, which by default produces ca. 30 FPS at 2560x1920. This may
be problematic on systems with less than 4 MIPI lanes, and/or on ones
which can't support higher frequency MIPI bus (the previous version
used a calculated clock). Perhaps it will be possible to fix this
issue in the future, with a couple of core V4L2 changes.

- the driver now provides the .pre_streamon() for setting LP-11 state on
MIPI data and clock lanes. This is compatible with i.MX6 receiver.

- s_power() converted to SET_RUNTIME_PM_OPS().

- the "initial" I2C registers have been all converted to a table of
multi-register files, to minimize time spent on I2C bus.

And a lot of smaller changes suggested by Laurent, Sakari, Jacopo, Joe
and possibly others.

--
Krzysztof "Chris" Hałasa

Sieć Badawcza Łukasiewicz
Przemysłowy Instytut Automatyki i Pomiarów PIAP
Al. Jerozolimskie 202, 02-486 Warszawa