[00/57] media: atomisp: Big power-management changes + lots of fixes

Message ID 20230123125205.622152-1-hdegoede@redhat.com (mailing list archive)
Headers
Series media: atomisp: Big power-management changes + lots of fixes |

Message

Hans de Goede Jan. 23, 2023, 12:51 p.m. UTC
  Hi All,

Here is another set of patches resulting from my continued work
on cleaning up / improving the atomisp driver.

The main changes here are power-management related, divided
into 2 sets:

1. Move the pm of the core atomisp device to its own custom PM
   domain. We turn the ISP on/off through the P-Unit and when
   off the PCI subsystem resume method complains about the PCI
   config space not being reachable. Changing to a custom PM
   domain fixes the logs getting filled with PCI subsys errors
   on every open of a /dev/video# node

2. Except for devices shipped with Android as factory image,
   all the DSDTs I have seen have proper ACPI pm code for
   the sensors. So we really should be using ACPI pm for this.

   This series contains a lot of ov2680 patches, including
   reworking the controls (so that control changes can be
   delayed to stream on time instead of directly trying to do
   i2c writes to the turned off sensor). Basically modernizing
   the ov2680 driver a lot (there are still some atomisp-isms left).

   And then finally after all the ov2680 cleanups it moves
   the ov2680 code over to using runtime-pm + ACPI pm,
   dropping all the direct PMIC + clk poking done by the
   atomisp_gmin_platform code.

Besides that this also contains quite a few other fixes / cleanups
for things which I encountered during the way and it contains the
start of making the ov2722 driver work. With the changes present
in that driver I get a working (but very dark) stream. I expect
that once I add a proper exposure control this will start working
better.

Regards,

Hans


Arnd Bergmann (1):
  media: atomisp: fix videobuf2 Kconfig depenendency

Brent Pappas (3):
  media: atomisp: pci: Replace bytes macros with functions
  media: atomisp: pci: hive_isp_css_common: host: vmem: Replace SUBWORD
    macros with functions
  media: atomisp: pci: sh_css: Inline single invocation of macro
    STATS_ENABLED()

Hans Verkuil (1):
  media: atomisp: use vb2_start_streaming_called()

Hans de Goede (52):
  media: atomisp: Remove atomisp_sw_contex struct
  media: atomisp: Move power-management over to a custom pm-domain
  media: atomisp: Silence "isys dma store at addr, val" debug messages
  media: atomisp: Remove non working doorbell check from
    punit_ddr_dvfs_enable()
  media: atomisp: Remove useless msleep(10) before power-on on BYT
  media: atomisp: Remove custom ATOMISP_IOC_ISP_MAKERNOTE ioctl
  media: atomisp: Remove custom ATOMISP_IOC_G_SENSOR_MODE_DATA ioctl
  media: atomisp: Remove V4L2_CID_BIN_FACTOR_HORZ/_VERT
  media: atomisp: Remove no longer used binning info from sensor
    resolution info
  media: atomisp: Propagate set_fmt() errors in queue_setup()
  media: atomisp: Remove deferred firmware loading support
  media: atomisp: Check buffer index is in range inside
    atomisp_qbuf_wrapper()
  media: atomisp: Drop atomisp_init_pipe()
  media: atomisp: Remove unnecessary memset(foo, 0, sizeof(foo)) calls
  media: atomisp: Only set default_run_mode on first open of a
    stream/asd
  media: atomisp: Do not turn off sensor when the atomisp-sub-dev does
    not own it
  media: atomisp: Allow sensor drivers without a s_power callback
  media: atomisp: Fix regulator registers on BYT devices with CRC PMIC
  media: atomisp: Remove atomisp_gmin_find_subdev()
  media: atomisp: Add atomisp_register_sensor_no_gmin() helper
  media: atomisp: Fix WARN() when the vb2 start_streaming callback fails
  media: atomisp: Drop ffmt local var from atomisp_set_fmt()
  media: atomisp: Stop overriding padding w/h to 12 on BYT
  media: atomisp: Put sensor ACPI devices in D3 before disable ACPI
    power-resources
  media: atomisp: Remove isp_subdev_link_setup()
  media: Add ovxxxx_16bit_addr_reg_helpers.h
  media: atomisp: ov2680: Use the new ovxxxx_16bit_addr_reg_helpers.h
  media: atomisp: ov2680: Rework flip ctrls
  media: atomisp: ov2680: Drop custom ATOMISP_IOC_S_EXPOSURE support
  media: atomisp: ov2680: Add exposure and gain controls
  media: atomisp: ov2680: Add test pattern control
  media: atomisp: ov2680: Fix window settings and enable window for all
    resolutions
  media: atomisp: ov2680: Make setting the modes algorithm based
  media: atomisp: ov2680: Use defines for fps, lines-per-frame and
    skip-frames
  media: atomisp: ov2680: Drop unused res member from struct
    ov2680_device
  media: atomisp: ov2680: Fix ov2680_enum_frame_interval()
  media: atomisp: ov2680: Drop v4l2_find_nearest_size() call from
    set_fmt()
  media: atomisp: ov2680: Drop struct ov2680_resolution /
    ov2680_res_preview
  media: atomisp: ov2680: Fix frame_size list
  media: atomisp: ov2680: Remove unused data-types and defines from
    ov2680.h
  media: atomisp: ov2680: Drop MAX_FMTS define
  media: atomisp: ov2680: Consistently indent define values
  media: atomisp: ov2680: Cleanup includes
  media: atomisp: ov2680: Delay power-on till streaming is started
  media: atomisp: ov2680: Add runtime-pm support
  media: atomisp: ov2680: s/dev/sensor/
  media: atomisp: ov2680: Use devm_kzalloc() for sensor data struct
  media: atomisp: ov2680: Switch over to ACPI powermanagement
  media: atomisp: ov2722: Call atomisp_gmin_remove_subdev() on probe
    failure
  media: atomisp: ov2722: Fix GPIO1 polarity
  media: atomisp: ov2722: Don't take the input_lock for try_fmt calls.
  media: atomisp: ov2722: Power on sensor from set_fmt() callback

 drivers/staging/media/atomisp/Kconfig         |    2 +-
 .../media/atomisp/i2c/atomisp-gc0310.c        |  249 ----
 .../media/atomisp/i2c/atomisp-gc2235.c        |  176 ---
 .../media/atomisp/i2c/atomisp-mt9m114.c       |  206 ---
 .../media/atomisp/i2c/atomisp-ov2680.c        | 1273 +++++------------
 .../media/atomisp/i2c/atomisp-ov2722.c        |  195 +--
 drivers/staging/media/atomisp/i2c/gc0310.h    |   10 -
 drivers/staging/media/atomisp/i2c/gc2235.h    |   31 -
 drivers/staging/media/atomisp/i2c/mt9m114.h   |   15 -
 drivers/staging/media/atomisp/i2c/ov2680.h    |  842 ++---------
 drivers/staging/media/atomisp/i2c/ov2722.h    |   36 +-
 .../media/atomisp/i2c/ov5693/atomisp-ov5693.c |  195 ---
 .../staging/media/atomisp/i2c/ov5693/ov5693.h |   61 -
 .../media/atomisp/include/linux/atomisp.h     |   50 -
 .../include/linux/atomisp_gmin_platform.h     |    2 -
 .../atomisp/include/linux/atomisp_platform.h  |   11 +-
 drivers/staging/media/atomisp/notes.txt       |    6 -
 .../staging/media/atomisp/pci/atomisp_cmd.c   |   90 +-
 .../staging/media/atomisp/pci/atomisp_cmd.h   |    9 +-
 .../staging/media/atomisp/pci/atomisp_fops.c  |   89 +-
 .../staging/media/atomisp/pci/atomisp_fops.h  |    3 +-
 .../media/atomisp/pci/atomisp_gmin_platform.c |  118 +-
 .../media/atomisp/pci/atomisp_internal.h      |    7 +-
 .../staging/media/atomisp/pci/atomisp_ioctl.c |   50 +-
 .../media/atomisp/pci/atomisp_subdev.c        |  169 +--
 .../media/atomisp/pci/atomisp_subdev.h        |   13 -
 .../staging/media/atomisp/pci/atomisp_v4l2.c  |  165 +--
 .../css_2401_system/host/isys_dma_private.h   |    2 -
 .../pci/hive_isp_css_common/host/vmem.c       |   20 +-
 drivers/staging/media/atomisp/pci/sh_css.c    |    7 +-
 .../staging/media/atomisp/pci/sh_css_params.c |   38 +-
 include/media/ovxxxx_16bit_addr_reg_helpers.h |   93 ++
 32 files changed, 862 insertions(+), 3371 deletions(-)
 create mode 100644 include/media/ovxxxx_16bit_addr_reg_helpers.h
  

Comments

Andy Shevchenko Jan. 24, 2023, 11:01 a.m. UTC | #1
On Mon, Jan 23, 2023 at 01:51:08PM +0100, Hans de Goede wrote:
> Hi All,
> 
> Here is another set of patches resulting from my continued work
> on cleaning up / improving the atomisp driver.
> 
> The main changes here are power-management related, divided
> into 2 sets:
> 
> 1. Move the pm of the core atomisp device to its own custom PM
>    domain. We turn the ISP on/off through the P-Unit and when
>    off the PCI subsystem resume method complains about the PCI
>    config space not being reachable. Changing to a custom PM
>    domain fixes the logs getting filled with PCI subsys errors
>    on every open of a /dev/video# node
> 
> 2. Except for devices shipped with Android as factory image,
>    all the DSDTs I have seen have proper ACPI pm code for
>    the sensors. So we really should be using ACPI pm for this.
> 
>    This series contains a lot of ov2680 patches, including
>    reworking the controls (so that control changes can be
>    delayed to stream on time instead of directly trying to do
>    i2c writes to the turned off sensor). Basically modernizing
>    the ov2680 driver a lot (there are still some atomisp-isms left).
> 
>    And then finally after all the ov2680 cleanups it moves
>    the ov2680 code over to using runtime-pm + ACPI pm,
>    dropping all the direct PMIC + clk poking done by the
>    atomisp_gmin_platform code.
> 
> Besides that this also contains quite a few other fixes / cleanups
> for things which I encountered during the way and it contains the
> start of making the ov2722 driver work. With the changes present
> in that driver I get a working (but very dark) stream. I expect
> that once I add a proper exposure control this will start working

The non-commented patches were reviewed, but I'm not so familiar with the
details of the functionality of the PM parts there. So I left them for others
to review.
  
Hans de Goede Jan. 24, 2023, 11:05 a.m. UTC | #2
Hi Andy,

On 1/24/23 12:01, Andy Shevchenko wrote:
> On Mon, Jan 23, 2023 at 01:51:08PM +0100, Hans de Goede wrote:
>> Hi All,
>>
>> Here is another set of patches resulting from my continued work
>> on cleaning up / improving the atomisp driver.
>>
>> The main changes here are power-management related, divided
>> into 2 sets:
>>
>> 1. Move the pm of the core atomisp device to its own custom PM
>>    domain. We turn the ISP on/off through the P-Unit and when
>>    off the PCI subsystem resume method complains about the PCI
>>    config space not being reachable. Changing to a custom PM
>>    domain fixes the logs getting filled with PCI subsys errors
>>    on every open of a /dev/video# node
>>
>> 2. Except for devices shipped with Android as factory image,
>>    all the DSDTs I have seen have proper ACPI pm code for
>>    the sensors. So we really should be using ACPI pm for this.
>>
>>    This series contains a lot of ov2680 patches, including
>>    reworking the controls (so that control changes can be
>>    delayed to stream on time instead of directly trying to do
>>    i2c writes to the turned off sensor). Basically modernizing
>>    the ov2680 driver a lot (there are still some atomisp-isms left).
>>
>>    And then finally after all the ov2680 cleanups it moves
>>    the ov2680 code over to using runtime-pm + ACPI pm,
>>    dropping all the direct PMIC + clk poking done by the
>>    atomisp_gmin_platform code.
>>
>> Besides that this also contains quite a few other fixes / cleanups
>> for things which I encountered during the way and it contains the
>> start of making the ov2722 driver work. With the changes present
>> in that driver I get a working (but very dark) stream. I expect
>> that once I add a proper exposure control this will start working
> 
> The non-commented patches were reviewed, but I'm not so familiar with the
> details of the functionality of the PM parts there. So I left them for others
> to review.

Thank you very much for reviewing this monster series!

I agree with all your code remarks / requested changes.

I'll make this changes in my personal tree and then prepare
a pull-req for Mauro with the updated patches.

I'll go over the couple of cases where you had questions
about things now.

I'll process the requested code changes (and add your Reviewed-by-s)
when I can make some time to work on this later this week.

Regards,

Hans