aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/platform/stm32/stm32-dcmi.c
AgeCommit message (Collapse)AuthorFilesLines
2020-09-27media: stm32-dcmi: Fix a reference count leakQiushi Wu1-3/+1
Calling pm_runtime_get_sync increments the counter even in case of failure, causing incorrect ref count if pm_runtime_put is not called in error handling paths. Thus replace the jump target "err_release_buffers" by "err_pm_putw". Fixes: 152e0bf60219 ("media: stm32-dcmi: add power saving support") Signed-off-by: Qiushi Wu <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2020-02-24media: media/platform: rename VFL_TYPE_GRABBER to _VIDEOHans Verkuil1-1/+1
'GRABBER' is a weird name, all other types map to the /dev device names. Rename to 'VIDEO' to be consistent with the other types. Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2020-02-24media: stm32-dcmi: Use dma_request_chan() instead dma_request_slave_channel()Peter Ujfalusi1-4/+7
dma_request_slave_channel() is a wrapper on top of dma_request_chan() eating up the error code. By using dma_request_chan() directly the driver can support deferred probing against DMA. Signed-off-by: Peter Ujfalusi <[email protected]> Acked-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-29media: stm32-dcmi: Delete an unnecessary of_node_put() call in dcmi_probe()Markus Elfring1-1/+0
A null pointer would be passed to a call of the function “of_node_put” immediately after a call of the function “of_graph_get_next_endpoint” failed at one place. Remove this superfluous function call. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-19media: stm32-dcmi: add support of several sub-devicesHugues Fruchet1-19/+198
Add support of several sub-devices within pipeline instead of a single one. This allows to support a CSI-2 camera sensor connected through a CSI-2 to parallel bridge. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-19media: stm32-dcmi: add media controller supportHugues Fruchet1-12/+40
Add media controller support to dcmi in order to walk within remote subdevices pipeline. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-19media: stm32-dcmi: trace the supported fourcc/mbus_codeHugues Fruchet1-2/+10
Add a trace of the set of supported fourcc/mbus_code which intersect between DCMI and source sub-device. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-19media: stm32-dcmi: improve sensor subdev namingHugues Fruchet1-23/+23
Rename "subdev" entity struct field to "source" to prepare for several subdev support. Move asd field on top of entity struct. Acked-by: Sakari Ailus <[email protected]> Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-08-07media: Remove dev_err() usage after platform_get_irq()Stephen Boyd1-4/+1
We don't need dev_err() messages when platform_get_irq() fails now that platform_get_irq() prints an error message itself when something goes wrong. Let's remove these prints with a simple semantic patch. // <smpl> @@ expression ret; struct platform_device *E; @@ ret = ( platform_get_irq(E, ...) | platform_get_irq_byname(E, ...) ); if ( \( ret < 0 \| ret <= 0 \) ) { ( -if (ret != -EPROBE_DEFER) -{ ... -dev_err(...); -... } | ... -dev_err(...); ) ... } // </smpl> While we're here, remove braces on if statements that only have one statement (manually). Cc: Greg Kroah-Hartman <[email protected]> Signed-off-by: Stephen Boyd <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-06-05media: stm32-dcmi: fix irq = 0 caseFabien Dessenne1-1/+1
Manage the irq = 0 case, where we shall return an error. Fixes: b5b5a27bee58 ("media: stm32-dcmi: return appropriate error codes during probe") Signed-off-by: Fabien Dessenne <[email protected]> Reported-by: Pavel Machek <[email protected]> Acked-by: Pavel Machek <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-04-30media: stm32-dcmi: return appropriate error codes during probeFabien Dessenne1-6/+8
During probe, return the provided errors value instead of -ENODEV. This allows the driver to be deferred probed if needed. Signed-off-by: Fabien Dessenne <[email protected]> Acked-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-04-22media: stm32-dcmi: fix crash when subdev do not expose any formatsHugues Fruchet1-0/+6
Do not access sd_formats[] if num_of_sd_formats is zero, ie subdev sensor didn't expose any formats. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-04-22media: stm32-dcmi: do not emit error trace in case of few overrunHugues Fruchet1-4/+8
Report overrun error only when it exceeds a given threshold. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-04-22media: stm32-dcmi: fix error messagesHugues Fruchet1-2/+3
Revisit and add some error messages. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-03-19media: stm32-dcmi: fix DMA corruption when stopping streamingHugues Fruchet1-0/+17
Avoid call of dmaengine_terminate_all() between dmaengine_prep_slave_single() and dmaengine_submit() by locking the whole DMA submission sequence. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-03-19media: stm32-dcmi: fix check of pm_runtime_get_sync return valueHugues Fruchet1-3/+3
Start streaming was sometimes failing because of pm_runtime_get_sync() non-0 return value. In fact return value was not an error but a positive value (1), indicating that PM was already enabled. Fix this by going to error path only with negative return value. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2019-03-01media: platform: fix several typosMauro Carvalho Chehab1-1/+1
Use codespell to fix lots of typos over frontends. Manually verified to avoid false-positives. Reviewed-by: Niklas Söderlund <[email protected]> Acked-by: Andrzej Pietrasiewicz <[email protected]> Reviewed-by: Benoit Parrot <[email protected]> Reviewed-by: Kieran Bingham <[email protected]> Reviewed-by: Lad, Prabhakar <[email protected]> Acked-by: Philipp Zabel <[email protected]> Reviewed-by: Houlong Wei <[email protected]> Reviewed-by: Yong Deng <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-10-04media: v4l: fwnode: Initialise the V4L2 fwnode endpoints to zeroSakari Ailus1-1/+1
Initialise the V4L2 fwnode endpoints to zero in all drivers using v4l2_fwnode_endpoint_parse(). This prepares for setting default endpoint flags as well as the bus type. Setting bus type to zero will continue to guess the bus among the guessable set (parallel, Bt.656 and CSI-2 D-PHY). Signed-off-by: Sakari Ailus <[email protected]> Tested-by: Steve Longerbeam <[email protected]> Tested-by: Jacopo Mondi <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-10-04media: v4l: mediabus: Recognise CSI-2 D-PHY and C-PHYSakari Ailus1-1/+1
The CSI-2 bus may use either D-PHY or C-PHY. Make this visible in media bus enum. Signed-off-by: Sakari Ailus <[email protected]> Tested-by: Steve Longerbeam <[email protected]> Tested-by: Jacopo Mondi <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-10-04media: platform: Switch to v4l2_async_notifier_add_subdevSteve Longerbeam1-12/+12
Switch all media platform drivers to call v4l2_async_notifier_add_subdev() to add asd's to a notifier, in place of referencing the notifier->subdevs[] array. These drivers also must now call v4l2_async_notifier_init() before adding asd's to their notifiers. There may still be cases where a platform driver maintains a list of asd's that is a duplicate of the notifier asd_list, in which case its possible the platform driver list can be removed, and can reference the notifier asd_list instead. One example of where a duplicate list has been removed in this patch is xilinx-vipp.c. If there are such cases remaining, those drivers should be optimized to remove the duplicate platform driver asd lists. None of the changes to the platform drivers in this patch have been tested. Verify that the async subdevices needed by the platform are bound at load time, and that the driver unloads and reloads correctly with no memory leaking of asd objects. Suggested-by: Sakari Ailus <[email protected]> Signed-off-by: Steve Longerbeam <[email protected]> Signed-off-by: Sakari Ailus <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-10-04media: stm32-dcmi: only enable IT frame on JPEG captureHugues Fruchet1-1/+4
Only enable IT frame on JPEG capture, this saves some CPU interruptions and processing on all the other cases. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-09-11media: use strscpy() instead of strlcpy()Mauro Carvalho Chehab1-5/+5
The implementation of strscpy() is more robust and safer. That's now the recommended way to copy NUL terminated strings. Signed-off-by: Mauro Carvalho Chehab <[email protected]> Reviewed-by: Kees Cook <[email protected]> Acked-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: add power saving supportHugues Fruchet1-16/+65
Implements runtime & system sleep power management ops. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: simplify of_node_put usageNicholas Mc Guire1-4/+1
This does not fix any bug - this is just a code simplification. As np is not used after passing it to v4l2_fwnode_endpoint_parse() its refcount can be decremented immediately and at one location. Signed-off-by: Nicholas Mc Guire <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: add mandatory of_node_put() in success pathNicholas Mc Guire1-3/+2
The endpoint allocated by of_graph_get_next_endpoint() needs an of_node_put() in both error and success path. As ep is not used the refcount decrement can be right after the last use of ep. Fixes: commit 37404f91ef8b ("[media] stm32-dcmi: STM32 DCMI camera interface driver") Signed-off-by: Nicholas Mc Guire <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: drop unnecessary while(1) loopNicholas Mc Guire1-15/+13
The while(1) is effectively useless as all possible paths within it return thus there is no way to loop. Signed-off-by: Nicholas Mc Guire <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: revisit stop streaming opsHugues Fruchet1-28/+1
Do not wait for interrupt completion when stopping streaming, stopping sensor and disabling interruptions are enough. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: revisit buffer list managementHugues Fruchet1-34/+31
Cleanup "active" field usage and enhance list management to avoid exceptions when releasing buffers on error or stopping streaming. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: clarify state logic on buffer starvationHugues Fruchet1-3/+8
Introduce WAIT_FOR_BUFFER state instead of "active" field checking to manage buffer starvation case. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: return buffer in error state on dma errorHugues Fruchet1-0/+3
Return buffer to V4L2 in error state if DMA error occurs. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: do not fall into error on buffer starvationHugues Fruchet1-5/+2
Return silently instead of falling into error when running out of available buffers when restarting capture. Capture will be restarted when new buffers will be provided by V4L2 client. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: code cleanupHugues Fruchet1-10/+8
Minor non-functional fixes around comments, variable namings and trace point enhancement. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-06-28media: stm32-dcmi: increase max width/height to 2592Hugues Fruchet1-15/+4
DCMI can capture 5Mp raw frames, increase limit accordingly. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-03-21media: stm32-dcmi: add JPEG supportHugues Fruchet1-47/+146
Add DCMI JPEG support. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-03-21media: stm32-dcmi: fix unnecessary parenthesesHugues Fruchet1-6/+6
Fix unnecessary parentheses in if conditions. Detected by checkpatch.pl --strict. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-03-21media: stm32-dcmi: rework overrun/error caseHugues Fruchet1-18/+11
Do not stop/restart dma on overrun or errors. Dma will be restarted on current frame transfer completion. Frame transfer completion is ensured even if overrun or error occurs by DCMI continuous capture mode which restarts data transfer at next frame sync. Do no warn on overrun while in irq thread, this slows down system and lead to more overrun errors. Use a counter instead and log errors at stop streaming. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-03-21media: stm32-dcmi: fix lock schemeHugues Fruchet1-33/+24
Fix lock scheme leading to spurious freeze. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-02-26media: stm32-dcmi: add g/s_parm framerate supportHugues Fruchet1-0/+19
Add g/s_parm framerate support by calling subdev g/s_frame_interval ops. This allows user to control sensor framerate by calling ioctl G/S_PARM. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-02-26media: stm32-dcmi: improve error trace pointsHugues Fruchet1-7/+9
Fix some missing "\n". Trace error returned by subdev streamon/streamoff. Remove extra "0x" unneeded with %pad formatter. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-02-26media: stm32-dcmi: remove redundant clear of interrupt flagsHugues Fruchet1-2/+0
It is already cleared in dcmi_irq_callback(). Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-02-26media: stm32-dcmi: remove redundant capture enableHugues Fruchet1-3/+0
Remove redundant capture enable already done in dcmi_start_capture(). Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2018-02-26media: platform: stm32: Adopt SPDX identifierBenjamin Gaignard1-1/+1
Add SPDX identifiers to files under stm32 directory Signed-off-by: Benjamin Gaignard <[email protected]> Acked-by: Philippe Ombredanne <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-12-29media: v4l2-async: simplify v4l2_async_subdev structureMauro Carvalho Chehab1-1/+1
The V4L2_ASYNC_MATCH_FWNODE match criteria requires just one struct to be filled (struct fwnode_handle). The V4L2_ASYNC_MATCH_DEVNAME match criteria requires just a device name. So, it doesn't make sense to enclose those into structs, as the criteria can go directly into the union. That makes easier to document it, as we don't need to document weird senseless structs. At drivers, this makes even clearer about the match criteria. Acked-by: Sylwester Nawrocki <[email protected]> Acked-by: Benoit Parrot <[email protected]> Acked-by: Alexandre Belloni <[email protected]> Acked-by: Sakari Ailus <[email protected]> Acked-by: Philipp Zabel <[email protected]> Acked-by: Hyun Kwon <[email protected]> Acked-by: Niklas Söderlund <[email protected]> Acked-by: Lad, Prabhakar <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-10-31media: v4l: async: Move async subdev notifier operations to a separate structureLaurent Pinchart1-3/+7
The async subdev notifier .bound(), .unbind() and .complete() operations are function pointers stored directly in the v4l2_async_subdev structure. As the structure isn't immutable, this creates a potential security risk as the function pointers are mutable. To fix this, move the function pointers to a new v4l2_async_subdev_operations structure that can be made const in drivers. Signed-off-by: Laurent Pinchart <[email protected]> Acked-by: Hans Verkuil <[email protected]> Acked-by: Niklas Söderlund <[email protected]> Reviewed-by: Sebastian Reichel <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-08-26media: stm32-dcmi: g_/s_selection crop supportHugues Fruchet1-4/+370
Implements g_/s_selection crop support by using DCMI crop hardware feature. User can first get the maximum supported resolution of the sensor by calling g_selection(V4L2_SEL_TGT_CROP_BOUNDS). Then user call to s_selection(V4L2_SEL_TGT_CROP) will reset sensor to its maximum resolution and crop request is saved for later usage in s_fmt(). Next call to s_fmt() will check if sensor can do frame size request with crop request. If sensor supports only discrete frame sizes, the frame size which is larger than user request is selected in order to be able to match the crop request. Then s_fmt() resolution user request is adjusted to match crop request resolution. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-08-26media: stm32-dcmi: cleanup variable/fields namingsHugues Fruchet1-49/+54
Uniformize "pixfmt" variables to "pix". Change "current_fmt" & "dcmi_fmt" variables to variables with "sd_" prefix to explicitly refer to subdev format. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-08-26media: stm32-dcmi: revisit control register handlingHugues Fruchet1-10/+4
Simplify bits handling of DCMI_CR register. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-08-26media: stm32-dcmi: catch dma submission errorHugues Fruchet1-0/+4
Test cookie return by dmaengine_submit() and return error if any. Signed-off-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-08-08media: stm32-dcmi: explicitly request exclusive reset controlPhilipp Zabel1-1/+1
Commit a53e35db70d1 ("reset: Ensure drivers are explicit when requesting reset lines") started to transition the reset control request API calls to explicitly state whether the driver needs exclusive or shared reset control behavior. Convert all drivers requesting exclusive resets to the explicit API call so the temporary transition helpers can be removed. No functional changes. Cc: Maxime Coquelin <[email protected]> Cc: Alexandre Torgue <[email protected]> Signed-off-by: Philipp Zabel <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
2017-07-19media: stm32-dcmi: constify vb2_ops structureGustavo A. R. Silva1-1/+1
Check for vb2_ops structures that are only stored in the ops field of a vb2_queue structure. That field is declared const, so vb2_ops structures that have this property can be declared as const also. This issue was detected using Coccinelle and the following semantic patch: @r disable optional_qualifier@ identifier i; position p; @@ static struct vb2_ops i@p = { ... }; @ok@ identifier r.i; struct vb2_queue e; position p; @@ e.ops = &i@p; @bad@ position p != {r.p,ok.p}; identifier r.i; struct vb2_ops e; @@ e@i@p @depends on !bad disable optional_qualifier@ identifier r.i; @@ static +const struct vb2_ops i = { ... }; Signed-off-by: Gustavo A. R. Silva <[email protected]> Acked-by: Hugues Fruchet <[email protected]> Signed-off-by: Hans Verkuil <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>