summaryrefslogtreecommitdiffstats
path: root/drivers/media/i2c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* media: v4l2-async: Improve v4l2_async_notifier_add_*_subdev() APILaurent Pinchart2021-02-062-8/+8
| | | | | | | | | | | | | | | | | | | The functions that add an async subdev to an async subdev notifier take as an argument the size of the container structure they need to allocate. This is error prone, as passing an invalid size will not be caught by the compiler. Wrap those functions in macros that take a container type instead of a size, and cast the returned pointer to the desired type. The compiler will catch mistakes if the incorrect type is passed to the macro, as the assignment types won't match. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Helen Koike <helen.koike@collabora.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> (core+ti-cal) Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* media: st-mipid02: Use v4l2_async_notifier_add_fwnode_remote_subdevEzequiel Garcia2021-02-061-11/+10
| | | | | | | | | | | | | | | | | | | The use of v4l2_async_notifier_add_subdev will be discouraged. Drivers are instead encouraged to use a helper such as v4l2_async_notifier_add_fwnode_remote_subdev. This fixes a misuse of the API, as v4l2_async_notifier_add_subdev should get a kmalloc'ed struct v4l2_async_subdev, removing some boilerplate code while at it. Use the appropriate helper v4l2_async_notifier_add_fwnode_remote_subdev, which handles the needed setup, instead of open-coding it. Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Reviewed-by: Helen Koike <helen.koike@collabora.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* media: i2c: ov5648: remove unnecessary NULL checkDan Carpenter2021-02-061-1/+1
| | | | | | | | | | The "mode_index == ARRAY_SIZE(ov5648_modes)" check ensures that we exited the loop via a break statement so we know that "mode" must be valid. Delete this unnecessary NULL check. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* media: i2c: max9286: fix access to unallocated memoryTomi Valkeinen2021-02-061-1/+1
| | | | | | | | | | | | | | | The asd allocated with v4l2_async_notifier_add_fwnode_subdev() must be of size max9286_asd, otherwise access to max9286_asd->source will go to unallocated memory. Fixes: 86d37bf31af6 ("media: i2c: max9286: Allocate v4l2_async_subdev dynamically") Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Cc: stable@vger.kernel.org # v5.10+ Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> Tested-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* media: i2c: fix spelling mistakes: "enpoint" -> "endpoint"Colin Ian King2021-02-062-2/+2
| | | | | | | | | There are two spelling mistakes in dev_err messages. Fix these. Signed-off-by: Colin Ian King <colin.king@canonical.com> Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* Merge tag 'v5.11-rc6' into patchworkMauro Carvalho Chehab2021-02-012-8/+2
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux 5.11-rc6 * tag 'v5.11-rc6': (1466 commits) Linux 5.11-rc6 leds: rt8515: Add Richtek RT8515 LED driver dt-bindings: leds: Add DT binding for Richtek RT8515 leds: trigger: fix potential deadlock with libata leds: leds-ariel: convert comma to semicolon leds: leds-lm3533: convert comma to semicolon dt-bindings: Cleanup standard unit properties soc: litex: Properly depend on HAS_IOMEM tty: avoid using vfs_iocb_iter_write() for redirected console writes null_blk: cleanup zoned mode initialization cifs: fix dfs domain referrals drm/nouveau/kms/gk104-gp1xx: Fix > 64x64 cursors drm/nouveau/kms/nv50-: Report max cursor size to userspace drivers/nouveau/kms/nv50-: Reject format modifiers for cursor planes drm/nouveau/svm: fail NOUVEAU_SVM_INIT ioctl on unsupported devices drm/nouveau/dispnv50: Restore pushing of all data. io_uring: reinforce cancel on flush during exit cifs: returning mount parm processing errors correctly rxrpc: Fix memory leak in rxrpc_lookup_local mlxsw: spectrum_span: Do not overwrite policer configuration ...
| * media: ccs: Get static data version minor correctlySakari Ailus2021-01-071-1/+1
| | | | | | | | | | | | | | | | | | Fix obtaining CCS static data version minor part correctly. Instead, the upper 8 bits were obtained from the major version number. Fixes: a6b396f410b1 ("media: ccs: Add CCS static data parser library") Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
| * media: ccs-pll: Fix link frequency for C-PHYSakari Ailus2021-01-071-7/+1
| | | | | | | | | | | | | | | | | | | | | | The highest fundamental frequency signal for C-PHY is half of the symbol rate which is similar to D-PHY. Take this into account in ccs-pll. Also remove the outdated comment. Fixes: 8030aa4f9c51 ("media: ccs-pll: Add C-PHY support") Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c/Kconfig: Select FWNODE for OV772x sensorLad Prabhakar2021-01-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix OV772x build breakage by selecting V4L2_FWNODE config: ia64-linux-ld: drivers/media/i2c/ov772x.o: in function `ov772x_probe': ov772x.c:(.text+0x1ee2): undefined reference to `v4l2_fwnode_endpoint_alloc_parse' ia64-linux-ld: ov772x.c:(.text+0x1f12): undefined reference to `v4l2_fwnode_endpoint_free' ia64-linux-ld: ov772x.c:(.text+0x2212): undefined reference to `v4l2_fwnode_endpoint_alloc_parse' Fixes: 8a10b4e3601e ("media: i2c: ov772x: Parse endpoint properties") Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Acked-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c/ov02a10.c: add cast to fix type mismatchHans Verkuil2021-01-271-1/+1
| | | | | | | | | | | | | | | | | | | | By adding this cast '(__force __le16)' this sparse warning is fixed: drivers/media/i2c/ov02a10.c:391:19: warning: cast to restricted __le16 Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c/ov8865.c: fix error checks using wrong variableHans Verkuil2021-01-271-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix two typos: dvdd -> dovdd and dvdd -> avdd Both clearly copy-and-paste mistakes. Fixes this smatch warning: drivers/media/i2c/ov8865.c:2852 ov8865_probe() warn: passing zero to 'PTR_ERR' Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c: ov5648/ov8865: Minor cosmetic fixesPaul Kocialkowski2021-01-262-5/+6
| | | | | | | | | | | | | | | | | | This solves a few minor cosmetic issues picked up by checkpatch for the OV5648 and OV8865 drivers. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Make (non-)use of uninitialised variables more robustSakari Ailus2021-01-141-4/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GCC with W=2 level of kernel compiler warnings warns about the use of uninitialised variables in a few locations. While these uninitialised variables were not used in reality, this still produced compiler warnings. Address this by assigning the variables to NULL and checking for NULL in places it is not expected, returning -EIO in that case. This provides at least some sanity checking at runtime as the compiler appears unable to do that at compile time. Reported-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Small definition cleanupSakari Ailus2021-01-122-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | struct device is used in ccs-data.h but no definition is included. Add a forward definition. Also ccs-data.c includes linux/types.h but this is already included in ccs-data.h which ccs-data.c includes. Do don't include linux/types.h in ccs-data.c. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: Revert "media: ccs-pll: Fix MODULE_LICENSE"Sakari Ailus2021-01-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | This reverts commit b3c0115e34adcabe12fce8845e24ca6f04c1554e. As per Documentation/process/license-rules.rst "GPL v2" exists only for historical reasons and has the same meaning as "GPL". So revert this patch. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Switch from standard integer types to kernel onesSakari Ailus2021-01-123-15/+14
| | | | | | | | | | | | | | | | The preferred integer types in the kernel are the Linux specific ones, switch from standard C types to u32 and alike. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs-pll: Switch from standard integer types to kernel onesSakari Ailus2021-01-122-100/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The preferred integer types in the kernel are the Linux specific ones, switch from standard C types to u32 and alike. The patch has been produced with the following Coccinelle spatch, with few alignment adjustments: @@ typedef uint32_t; typedef u32; @@ - uint32_t + u32 @@ typedef uint16_t; typedef u16; @@ - uint16_t + u16 @@ typedef uint8_t; typedef u8; @@ - uint8_t + u8 Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Support and default to auto PHY controlSakari Ailus2021-01-121-11/+43
| | | | | | | | | | | | | | | | | | | | | | | | CCS supports three variants of PHY timing control, auto, UI based and manual. The driver previously assumed UI based control that requires updating the link rate to the sensor. Now default to automatic control instead, and only write the link rate to the sensor in UI mode. If neither auto or UI control is supported, return an error in probe. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add a sanity check for external clock frequencySakari Ailus2021-01-121-0/+5
| | | | | | | | | | | | | | | | The driver depends on the external clock frequency. Add a sanity check for the frequency, by returning an error from probe if it's zero. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Hardware requires a delay after starting the clock of lifting resetSakari Ailus2021-01-121-13/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | A CCS compliant device requires a delay before the first I²C transaction after pulling xshutdown up or starting the external clock. This is what the driver does. However, if neither is actually there, there's no need for the delay. This also has the effect of removing an unnecessary delay on ACPI systems where ACPI is responsible for the power-up sequence. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Wait until software reset is doneSakari Ailus2021-01-121-0/+15
| | | | | | | | | | | | | | | | | | | | Verify the software reset has been completed until proceeding. The spec does not guarantee a delay but presumably 100 ms should be enough. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Only do software reset if we have no hardware resetSakari Ailus2021-01-121-4/+6
| | | | | | | | | | | | | | | | | | The driver always used software reset after the sensor's power sequence that includes a hardware reset if we have a reset GPIO. Do not use software reset if we just brought the sensor up from hardware reset state. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Don't change the I²C address just for software resetSakari Ailus2021-01-121-8/+0
| | | | | | | | | | | | | | | | The sensor's address was changed before resetting and changing the address again. Don't do it before reset as it's useless. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Get the endpoint by port rather than any next endpointSakari Ailus2021-01-121-1/+2
| | | | | | | | | | | | | | | | Get the first endpoint from port 0 instead of the next one, whatever it might be. There are no other ports so there's no functional change. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add shading correction and luminance correction level controlsSakari Ailus2021-01-122-0/+47
| | | | | | | | | | | | | | | | Add controls for supporting lens shading correction, including colour shading and luminance correction level. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add debug prints for MSR registersSakari Ailus2021-01-121-0/+8
| | | | | | | | | | | | | | | | | | Also print out MSR registers written to the sensor. This isn't entirely optimal as the debug strings are produced even if they're not used but that isn't really a grave issue --- the I²C bus is very slow anyway. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add support for alternate analogue global gainSakari Ailus2021-01-121-0/+55
| | | | | | | | | | | | | | | | The CCS spec defines an alternative implementation for global analogue gain. Add support for that in the driver. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add support for analogue gain coefficient controlsSakari Ailus2021-01-121-2/+36
| | | | | | | | | | | | | | | | Add four controls for reading CCS analogue gain coefficients. The values are constants that are device specific. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Only add analogue gain control if the device supports itSakari Ailus2021-01-121-6/+10
| | | | | | | | | | | | | | | | Some devices do not implement analogue gain this way. Only add the control when a device does have the support. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Remove analogue gain fieldSakari Ailus2021-01-122-8/+6
| | | | | | | | | | | | | | | | The analogue gain control was stored to the device specific struct but was never used. Remove it. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add support for old-style SMIA digital gainSakari Ailus2021-01-122-2/+33
| | | | | | | | | | | | | | SMIA only has per-component digital gain. Add support for it. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ccs: Add digital gain supportSakari Ailus2021-01-121-1/+16
| | | | | | | | | | | | | | CCS supports global (all-component) digital gain. Add support for it. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: mt9v111: Remove unneeded device-managed putsEzequiel Garcia2021-01-121-6/+0
| | | | | | | | | | | | | | | | | | | | | | Drivers don't need to explicitly call devm_{}_put on driver removal, as it's automatically called by the device driver resource management code. Fixes: aab7ed1c3927 ("media: i2c: Add driver for Aptina MT9V111") Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c: Add support for the OV8865 image sensorPaul Kocialkowski2021-01-123-0/+2986
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The OV8865 is a 8 Mpx CMOS image sensor producing 3264x2448 at 30 fps. Other modes (including some with sub-sampling) are available too. It outputs 10-bit bayer CFA data through a MIPI CSI-2 interface with up to 4 lanes supported. Some register initialisation sequences are still needed for this driver, as they cover registers for which no documentation is available. This work is based on the first version of the driver submitted by Kévin L'hôpital, which was adapted to mainline from the Allwinner BSP. This version is a rewrite of the first version that matches the structure of the OV5648 driver, with explicit PLL configuration, all the necessary mode-specific fields, associatied registers and reduced static sequences. It was tested with the Banana Pi Camera Board v3 and the Banana Pi M3. Co-developed-by: Kévin L'hôpital <kevin.lhopital@bootlin.com> Signed-off-by: Kévin L'hôpital <kevin.lhopital@bootlin.com> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c: Add support for the OV5648 image sensorPaul Kocialkowski2021-01-123-0/+2637
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The OV5648 is a 5 Mpx CMOS image sensor, connected via MIPI CSI-2 in a one or two lane configuration. Most of the features of the hardware are supported, including: - Auto and manual exposition/gain - Auto and manual white balance - Horizontal and vertical flip - Test patterns But the following are still missing: - Debanding, based on power source frequency; - Exposition setting correlated to time units. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: i2c: ov5670: Fix PIXEL_RATE minimum valueJacopo Mondi2021-01-121-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The driver currently reports a single supported value for V4L2_CID_PIXEL_RATE and initializes the control's minimum value to 0, which is very risky, as userspace might accidentally use it as divider when calculating the time duration of a line. Fix this by using as minimum the only supported value when registering the control. Fixes: 5de35c9b8dcd1 ("media: i2c: Add Omnivision OV5670 5M sensor support") Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Remove 640x480 SBGGR8 modeJacopo Mondi2021-01-121-171/+9
| | | | | | | | | | | | | | | | | | | | | | | | Capturing in 640x480 SBGGR8_1X8 hangs the system when capturing with the unicam driver on RaspberryPi 4 platform. Remove it and remove the support for multiple media bus codes in the driver. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Support VIDIOC_SUBSCRIBE_EVENTJacopo Mondi2021-01-121-0/+3
| | | | | | | | | | | | | | | | | | The driver reports the V4L2_SUBDEV_FL_HAS_EVENTS flag but does not support subscribing and unsubscribing to events. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Constify oe_enable/disable reglistJacopo Mondi2021-01-121-2/+2
| | | | | | | | | | | | | | | | Make the two register-value lists const. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Apply controls only when poweredJacopo Mondi2021-01-121-17/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | Use pm_runtime_get_if_in_use() in s_ctrl to apply controls only when the device is powered on. Rework the control set function to balance the pm_runtime_get_if_in_use() call with pm_runtime_put() at the end of the function. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Rework s_stream() operationJacopo Mondi2021-01-121-2/+31
| | | | | | | | | | | | | | | | | | | | | | | | Rework the s_stream() operation to turn the sensor on and off at stream enable/disable time using the pm_runtime infrastructure. Protect the stream on/off from being called multiple times in sequence with a 'streaming' flag. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Use pm_runtime infrastructureJacopo Mondi2021-01-121-71/+71
| | | | | | | | | | | | | | | | Use the pm_runtime framework to replace the legacy s_power() operation. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Advertise the correct exposure rangeDave Stevenson2021-01-121-4/+35
| | | | | | | | | | | | | | | | | | | | Exposure is clipped by the VTS of the mode, so it needs to be updated when this is changed. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Support V4L2_CID_VBLANK controlDave Stevenson2021-01-121-4/+46
| | | | | | | | | | | | | | | | | | Adds vblank control to allow for frame rate control. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Support V4L2_CID_HBLANK controlJacopo Mondi2021-01-121-1/+26
| | | | | | | | | | | | | | | | | | | | | | Add support for the V4L2_CID_HBLANK read-only control. The implementation has been upported from RaspberryPi BSP commit: commit d82f202156605 ("media: i2c: ov5647: Set V4L2_SUBDEV_FL_HAS_EVENTS flag") Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Support V4L2_CID_PIXEL_RATEDave Stevenson2021-01-121-11/+32
| | | | | | | | | | | | | | | | | | | | Clients need to know the pixel rate in order to compute exposure and frame rate values. Advertise it. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Set V4L2_SUBDEV_FL_HAS_EVENTS flagDave Stevenson2021-01-121-1/+1
| | | | | | | | | | | | | | | | | | | | The ov5647 subdev can generate control events, therefore set the V4L2_SUBDEV_FL_HAS_EVENTS flag. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Implement set_fmt pad operationJacopo Mondi2021-01-121-4/+62
| | | | | | | | | | | | | | | | | | | | Now that the driver supports more than a single mode, implement the .set_fmt pad operation and adjust the existing .get_fmt one to report the currently applied format. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Use SBGGR10_1X10 640x480 as defaultJacopo Mondi2021-01-121-3/+3
| | | | | | | | | | | | | | | | | | | | The SBGGR10_1X10 formats support more resolutions than SBGGR8_1X8. Make it the default sensor format and set 2x2 binned 640x480 resolution as default sensor size as it maximizes the FOV and framerate. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
* | media: ov5647: Add SGGBR10_1X10 modesJacopo Mondi2021-01-121-0/+441
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add 4 additional sensor modes in SBGGR10_1X10 format. Add the following resolutions: - 2592x1944 full resolution - 1920x1080 1080p cropped - 1296x972 2x2 binned - 640x480 2x2 binned, 2x2 subsampled The register lists and modes definition have been upported from the RaspberryPi BSP at revision: commit 581dfda6d0a62 ("media: i2c: ov5647: Advertise the correct exposure range") Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>