Hi Rob,
Thank you for the patch.
On Mon, Nov 02, 2020 at 02:36:55PM -0600, Rob Herring wrote:
> Now that we have a graph schema, reference it from the usb-connector
> schema.
>
> Signed-off-by: Rob Herring
Reviewed-by: Laurent Pinchart
> ---
> v3: new patch
>
>
be required.
Should we set additionalProperties: false here ?
> +
> + ports:
> +type: object
> +description: |
> + If there is more than one port node or 'reg' property present in port
> + nodes then '#address-cells' and '#size-cells' properties are re
, 16);
> + break;
> + case UVC_VC_PROCESSING_UNIT:
> + memcpy(entity->guid, uvc_processing_guid, 16);
> + break;
> + }
Given that the GUID is set in uvc_parse_vendor_control() and
uvc_parse_standard_control() for extension units, I'm wo
s after the fw_devlink initialization, so I can still report results.
Before your series:
[0.743065] cpuidle: using governor menu
[ 13.350259] No ATAGs?
With your series applied:
[ 0.722670] cpuidle: using governor menu
[1.135859] No ATAGs?
That's a very clear improveme
warning: variable ‘dw’ set but not
> used [-Wunused-but-set-variable]
>
> Cc: Tomi Valkeinen
> Cc: David Airlie
> Cc: Daniel Vetter
> Cc: Laurent Pinchart
> Cc: dri-de...@lists.freedesktop.org
> Signed-off-by: Lee Jones
Reviewed-by: Laurent Pinchart
> ---
>
Hi Xu Wang,
Thank you for the patch.
On Wed, Nov 04, 2020 at 09:29:48AM +, Xu Wang wrote:
> Because clk_disable_unprepare() already checked NULL clock parameter,
> so the additional check is unnecessary, just remove it.
>
> Signed-off-by: Xu Wang
Reviewed-by: Laurent Pinchar
media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -6,6 +6,8 @@
> * Laurent Pinchart (laurent.pinch...@ideasonboard.com)
> */
>
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> #include
> #include
> #include
> @@
Hi Ricardo,
On Wed, Nov 04, 2020 at 12:48:25PM +0100, Ricardo Ribalda wrote:
> On Wed, Nov 4, 2020 at 12:10 PM Laurent Pinchart wrote:
> > On Thu, Oct 22, 2020 at 03:37:48PM +0200, Ricardo Ribalda wrote:
> > > This flag allows controls to get their properties from an entity
No need for a blank line.
And it looks like the local irq variable should be introduced in this
patch, not in the previous one. I think I'd squash this with 5/6.
> + if (irq == -EPROBE_DEFER)
> + return -EPROBE_DEFER;
> +
> + if (irq < 0)
> + return
05b6a9 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -6,6 +6,7 @@
> #error "The uvcvideo.h header is deprecated, use linux/uvcvideo.h instead."
> #endif /* __KERNEL__ */
>
> +#include
> #include
> #include
> #include
> @@ -37,6 +38,7 @@
> (UVC_ENTITY_IS_TERM(entity) && \
> ((entity)->type & 0x8000) == UVC_TERM_OUTPUT)
>
> +#define UVC_GPIO_UNIT 0x7ffe
I'd name this UVC_EXT_GPIO_UNIT.
>
> /*
> * GUIDs
> @@ -351,6 +353,12 @@ struct uvc_entity {
> u8 *bmControls;
> u8 *bmControlsType;
> } extension;
> +
> + struct {
> + u8 bControlSize;
> + u8 *bmControls;
> + struct gpio_desc *gpio_privacy;
> + } gpio;
> };
>
> u8 bNrInPins;
--
Regards,
Laurent Pinchart
xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01}
> + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01}
This belongs to the previous patch.
>
> #define UVC_GUID_FORMAT_MJPEG \
> { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \
--
Regards,
Laurent Pinchart
ll internal.
> +#define UVC_GUID_EXT_GPIO_CONTROLLER \
> + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, \
I assume the last value was meant to be 0xff ?
> + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01}
>
> #define UVC_GUID_FORMAT_MJPEG \
> { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \
--
Regards,
Laurent Pinchart
inux/uvcvideo.h
> +++ b/include/uapi/linux/uvcvideo.h
> @@ -32,6 +32,7 @@
> #define UVC_CTRL_FLAG_ASYNCHRONOUS (1 << 8)
> /* Entity queries */
> #define UVC_CTRL_FLAG_ENTITY_GET_INFO(1 << 9)
> +#define UVC_CTRL_FLAG_ENTITY_GET_CUR (1 << 10)
>
> #define UVC_CTRL_FLAG_GET_RANGE \
> (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
--
Regards,
Laurent Pinchart
ux/uvcvideo.h
> @@ -30,6 +30,8 @@
> #define UVC_CTRL_FLAG_AUTO_UPDATE(1 << 7)
> /* Control supports asynchronous reporting */
> #define UVC_CTRL_FLAG_ASYNCHRONOUS (1 << 8)
> +/* Entity queries */
> +#define UVC_CTRL_FLAG_ENTITY_GET_INFO(1 << 9)
>
> #define UVC_CTRL_FLAG_GET_RANGE \
> (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
--
Regards,
Laurent Pinchart
use the IRQ. If it doesn't (gpiod_to_irq
> returns an error), it gets polled via detect().
>
> Fixes: cff5e6f7e83f ("drm/bridge: Add driver for the TI TPD12S015 HDMI level
> shifter")
> Signed-off-by: YueHaibing
Reviewed-by: Laurent Pinchart
> ---
> v2: Add
Hi Stephen,
On Mon, Nov 02, 2020 at 09:38:12AM -0800, Stephen Boyd wrote:
> Quoting Doug Anderson (2020-11-02 08:06:14)
> > On Sun, Nov 1, 2020 at 11:21 AM Laurent Pinchart wrote:
> > > On Thu, Oct 29, 2020 at 06:17:37PM -0700, Stephen Boyd wrote:
> &g
Hi Stephen,
Thank you for the patch.
On Thu, Oct 29, 2020 at 06:17:37PM -0700, Stephen Boyd wrote:
> Use the DDC connection to read the EDID from the eDP panel instead of
> relying on the panel to tell us the modes.
>
> Reviewed-by: Douglas Anderson
> Cc: Laurent Pinchart
>
ed,
> +dcon_rgb_in: endpoint {
> +remote-endpoint = <_rgb_out>;
> + };
> +};
> +
> +port@1 {
> +reg = <0x01>;
> +dcon_gettl_out: endpoint {
> +remote-endpoint = <_dettl_in>;
> +};
> +};
> +};
> +};
> +};
It's customary to end bindings with
...
(not sure why though, given that it seems to work find without)
--
Regards,
Laurent Pinchart
Hi Andy,
On Fri, Oct 30, 2020 at 12:22:15AM +0200, Andy Shevchenko wrote:
> On Thu, Oct 29, 2020 at 11:29:30PM +0200, Laurent Pinchart wrote:
> > On Thu, Oct 29, 2020 at 10:26:56PM +0200, Andy Shevchenko wrote:
> > > On Thu, Oct 29, 2020 at 10:21 PM Laurent Pinchart wrote:
>
On Thu, Oct 29, 2020 at 10:26:56PM +0200, Andy Shevchenko wrote:
> On Thu, Oct 29, 2020 at 10:21 PM Laurent Pinchart wrote:
> > On Mon, Oct 26, 2020 at 06:10:50PM +0200, Andy Shevchenko wrote:
> > > On Sat, Oct 24, 2020 at 12:37:02PM +0300, Laurent Pinchart wrote:
> >
Hi Andy,
On Mon, Oct 26, 2020 at 06:10:50PM +0200, Andy Shevchenko wrote:
> On Sat, Oct 24, 2020 at 12:37:02PM +0300, Laurent Pinchart wrote:
> > On Sat, Oct 24, 2020 at 09:50:07AM +0100, Dan Scally wrote:
> > > On 24/10/2020 02:24, Laurent Pinchart wrote:
> > > >
Hi Andy,
On Mon, Oct 26, 2020 at 06:05:49PM +0200, Andy Shevchenko wrote:
> On Mon, Oct 26, 2020 at 08:20:14AM +, Dan Scally wrote:
> > On 24/10/2020 23:36, Laurent Pinchart wrote:
> > > On Sat, Oct 24, 2020 at 11:28:06PM +0100, Daniel Scally wrote:
> > >>
Hi Dan,
On Sat, Oct 24, 2020 at 11:28:06PM +0100, Daniel Scally wrote:
> On 24/10/2020 10:37, Laurent Pinchart wrote:
> >
> >>> I wonder if we could avoid depending on the I2C device being created by
> >>> getting the fwnode from adev, and setting ->secon
Hi Dan,
On Sat, Oct 24, 2020 at 05:33:32PM +0100, Dan Scally wrote:
> On 24/10/2020 15:29, Sakari Ailus wrote:
> > On Sat, Oct 24, 2020 at 03:39:55AM +0300, Laurent Pinchart wrote:
> >> On Wed, Oct 21, 2020 at 01:49:10AM +0300, Sakari Ailus wrote:
> >>> On Tue, Oc
Hi Daniel,
On Sat, Oct 24, 2020 at 09:50:07AM +0100, Dan Scally wrote:
> On 24/10/2020 02:24, Laurent Pinchart wrote:
>
> > On Mon, Oct 19, 2020 at 11:59:03PM +0100, Daniel Scally wrote:
> >> Currently on platforms designed for Windows, connections between CIO2 and
> >
2_queues_exit(struct cio2_device *cio2)
> static int cio2_pci_probe(struct pci_dev *pci_dev,
> const struct pci_device_id *id)
> {
> + struct fwnode_handle *endpoint;
> struct cio2_device *cio2;
> int r;
>
> + /*
> + * On some platforms no connections to sensors are defined in firmware,
> + * if the device has no endpoints then we can try to build those as
> + * software_nodes parsed from SSDB.
> + *
> + * This may EPROBE_DEFER if supported devices are found defined in ACPI
> + * but not yet ready for use (either not attached to the i2c bus yet,
> + * or not done probing themselves).
Why do we need for the I2C devices to be probed, isn't it enough to have
them created ?
> + */
> +
> + endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(_dev->dev),
> NULL);
> + if (!endpoint) {
> + r = cio2_bridge_build(pci_dev);
> + if (r)
> + return r;
> + }
> +
> cio2 = devm_kzalloc(_dev->dev, sizeof(*cio2), GFP_KERNEL);
> if (!cio2)
> return -ENOMEM;
> @@ -1825,6 +1843,9 @@ static void cio2_pci_remove(struct pci_dev *pci_dev)
> {
> struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
>
> + if (is_software_node(dev_fwnode(_dev->dev)))
> + cio2_bridge_burn(pci_dev);
> +
> media_device_unregister(>media_dev);
> v4l2_async_notifier_unregister(>notifier);
> v4l2_async_notifier_cleanup(>notifier);
> diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.h
> b/drivers/media/pci/intel/ipu3/ipu3-cio2.h
> index 549b08f88..80a081d7e 100644
> --- a/drivers/media/pci/intel/ipu3/ipu3-cio2.h
> +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2.h
> @@ -436,4 +436,13 @@ static inline struct cio2_queue
> *vb2q_to_cio2_queue(struct vb2_queue *vq)
> return container_of(vq, struct cio2_queue, vbq);
> }
>
> +#if IS_ENABLED(CONFIG_CIO2_BRIDGE)
> + int cio2_bridge_build(struct pci_dev *cio2);
> + void cio2_bridge_burn(struct pci_dev *cio2);
No need for an extra indentation level, neither here, not below.
> +#else
> +
NO need for this blank line.
> + int cio2_bridge_build(struct pci_dev *cio2) { return 0; }
> + void cio2_bridge_burn(struct pci_dev *cio2) { }
> +#endif
> +
> #endif
--
Regards,
Laurent Pinchart
returns true.
*/
bool fwnode_device_is_available(const struct fwnode_handle *fwnode)
{
+ if (!fwnode_has_op(fwnode, device_is_available))
+ return true;
return fwnode_call_bool_op(fwnode, device_is_available);
}
EXPORT_SYMBOL_GPL(fwnode_device_is_available);
--
Regards,
Laurent Pinchart
bly been mistaken by
focussing quite a bit on drivers/gpu/drm/ in the past few years).
-core.c wins over both though :-) Anyway, enough bikeshedding, with the
newline fixed,
Reviewed-by: Laurent Pinchart
> diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2.c
> b/drivers/media/pci/intel
y
Reviewed-by: Laurent Pinchart
> ---
> Changes in v3:
> - patch introduced.
>
> MAINTAINERS | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 43a025039..5d768d5ad 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINE
de 100644 Documentation/devicetree/bindings/media/renesas,drif.yaml
--
Regards,
Laurent Pinchart
;
> Signed-off-by: Fabrizio Castro
Reviewed-by: Laurent Pinchart
> ---
> v2->v3:
> * New patch
>
> Documentation/devicetree/bindings/media/renesas,drif.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/media/renesas,dri
e() "Context: in_interrupt()" is
> therefore as useful as "Context: unknown'. Remove it.
>
> Signed-off-by: Thomas Gleixner
> Cc: Mauro Carvalho Chehab
> Cc: Laurent Pinchart
> Cc: linux-me...@vger.kernel.org
Reviewed-by: Laurent Pinchart
> ---
> drivers/media
"scck";
> +
> +port@0 {
> + reg = <0>; /* must be 0, first child port */
> + csi2dc_in: endpoint { /* input from IDI interface */
> + remote-endpoint = <_out>;
> + };
> +};
> +
> +port@1 {
> +#address-cells = <1>;
> +#size-cells = <0>;
> +reg = <1>; /* must be 1, second child port */
> +csi2dc_out: endpoint@2 {
> +reg = <2>; /* virtual channel identifier */
> +remote-endpoint = <_in>; /* output to sensor
> controller */
> +};
> +};
> +};
> +
> +...
--
Regards,
Laurent Pinchart
:( It took 4 years for RDMA to undo the uAPI
> > breakage caused by a security fix for something that was a 15 years
> > old bug.
>
> Yeah we have a bunch of these on the drm side too. Some of them are
> really just "you have to upgrade userspace", and there's no real fix
> for the security nightmare without that.
--
Regards,
Laurent Pinchart
his way, instead of broken an
> > > > userspace API that it is there since 1991.
> > >
> > > It has happened before :( It took 4 years for RDMA to undo the uAPI
> > > breakage caused by a security fix for something that was a 15 years
> > > old bug.
> >
> > Yeah we have a bunch of these on the drm side too. Some of them are
> > really just "you have to upgrade userspace", and there's no real fix
> > for the security nightmare without that.
>
> I think we need to phase out such userspace indeed. The Kconfig symbol
> allows enabling the unsafe functionality for anyone who still needs
> it, so I think it's not entirely a breakage.
--
Regards,
Laurent Pinchart
quot; ACPI design, but
unless someone has a better idea, without knowing how this was intended
to be handled, we will only keep speculating without moving forward.
On Wed, Oct 07, 2020 at 03:35:05AM +0300, Laurent Pinchart wrote:
> On Fri, Oct 02, 2020 at 03:26:55PM +0300, Laurent Pinchart wrot
On Fri, Oct 02, 2020 at 03:26:55PM +0300, Laurent Pinchart wrote:
> On Fri, Oct 02, 2020 at 01:35:12PM +0300, Andy Shevchenko wrote:
> > On Fri, Oct 02, 2020 at 01:10:23AM +0300, Laurent Pinchart wrote:
> > > On Mon, May 02, 2016 at 01:35:01PM +0300, Mika Westerberg wrote:
>
Hi Stefan,
On Mon, Oct 05, 2020 at 11:28:21AM +0200, Stefan Riedmüller wrote:
> On 02.10.20 02:05, Laurent Pinchart wrote:
> > On Wed, Sep 30, 2020 at 12:51:33PM +0200, Stefan Riedmueller wrote:
> >> From: Dirk Bender
> >>
> >> To prevent corrupted frames af
Hi Saravana,
On Fri, Oct 02, 2020 at 12:56:30PM -0700, Saravana Kannan wrote:
> On Fri, Oct 2, 2020 at 11:35 AM 'Grygorii Strashko' via kernel-team wrote:
> > On 02/10/2020 21:27, Laurent Pinchart wrote:
> > > On Fri, Oct 02, 2020 at 10:58:55AM -0700, Saravana Kannan wrote:
&g
Hi Saravana,
On Fri, Oct 02, 2020 at 10:58:55AM -0700, Saravana Kannan wrote:
> On Fri, Oct 2, 2020 at 10:55 AM Laurent Pinchart wrote:
> > On Fri, Oct 02, 2020 at 10:51:51AM -0700, Saravana Kannan wrote:
> > > On Fri, Oct 2, 2020 at 7:08 AM Rob Herring wrote:
> > > &g
of_platform_default_populate() seems to be the most
> common path. For other cases, I think we just need to call
> fw_devlink_pause/resume() wherever the top level devices are added for
> the first time. As I said in the other email, we can't add
> fw_devlink_pause/resume() by default to of_platform_populate().
>
> Do you have other ideas for achieving "call fw_devlink_pause/resume()
> only when top level devices are added for the first time"?
I'm not an expert in this domain, but before investigating it, would you
be able to share a hack patch that implements this (in the most simple
way) to check if it actually fixes the delays I experience on my system
?
--
Regards,
Laurent Pinchart
Hi Andy,
On Fri, Oct 02, 2020 at 01:35:12PM +0300, Andy Shevchenko wrote:
> On Fri, Oct 02, 2020 at 01:10:23AM +0300, Laurent Pinchart wrote:
> > Hi Mika,
> >
> > Reviving an old thread.
>
> Very old :-)
>
> > On Mon, May 02, 2016 at 01:35:01PM +0300, Mika
4, 0,
> 3758096384, 0, 268435456, 1124073472, 6, 0, 6, 0, 2, 0] is too long
I would keep the error message unwrapped as it's a bit confusing to
read, even if it exceeds the normal 72 columns limit of commit messaged.
> Signed-off-by: Michal Simek
Reviewed-by: Laurent Pinchart
> ---
>
>
Hi Stefan,
On Thu, Oct 01, 2020 at 10:56:24AM +0200, Stefan Riedmüller wrote:
> On 30.09.20 13:38, Laurent Pinchart wrote:
> > On Wed, Sep 30, 2020 at 12:51:31PM +0200, Stefan Riedmueller wrote:
> >> From: Enrico Scholz
> >>
> >> Implement g_register and s_reg
estart */
> + val &= ~MT9P031_FRAME_PAUSE_RESTART_SET;
Same here, I think you can simply write MT9P031_FRAME_PAUSE_RESTART_SET.
> + ret = mt9p031_write(client, MT9P031_FRAME_RESTART, val);
> + if (ret < 0)
> + return ret;
> +
> return mt9p031_pll_enable(mt9p031);
> }
>
--
Regards,
Laurent Pinchart
-by: Enrico Scholz
> Signed-off-by: Stefan Riedmueller
Reviewed-by: Laurent Pinchart
> ---
> No changes in v2
> ---
> drivers/media/i2c/mt9p031.c | 9 ++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/i2c/mt9p031.c b/driver
Hi Stefan,
On Thu, Oct 01, 2020 at 11:07:00AM +0200, Stefan Riedmüller wrote:
> On 30.09.20 13:42, Laurent Pinchart wrote:
> > On Wed, Sep 30, 2020 at 12:51:29PM +0200, Stefan Riedmueller wrote:
> >> From: Christian Hemp
> >>
> >> Aside from 12 bit m
@@ static int __init of_platform_default_populate_init(void)
> }
>
> /* Populate everything else. */
> - fw_devlink_pause();
> of_platform_default_populate(NULL, NULL, NULL);
> - fw_devlink_resume();
>
> return 0;
> }
--
Regards,
Laurent Pinchart
dows appears to have proper support for configurating this touchpad
> > in PS/2 mode, which is unfortunately an ALPS devices).
> >
> > Looking at the DSDT it seems that enabling the I2C interface may require
> > the help of the embedded controller, the state of which is exposed in
> > the DSDT through a mysteriously-named SDS1 field. It looks like this
> > field could take on a number of values which identify a variety of
> > different touchpads. Given that it looks like GPIO pin states may be
> > determined by the value of this field I'm a bit reluctant to go fiddling
> > around with it.
> >
> > I do wish that firmware weren't such a nightmare.
>
> +1
--
Regards,
Laurent Pinchart
mt9p031->format.code = MEDIA_BUS_FMT_SGRBG12_1X12;
> + if (mt9p031->model == MT9P031_MODEL_MONOCHROME) {
> + mt9p031->fmts = mt9p031_monochrome_fmts;
> + mt9p031->num_fmts = ARRAY_SIZE(mt9p031_monochrome_fmts);
> + } else {
> + mt9p031->fmts = mt9p031_color_fmts;
> + mt9p031->num_fmts = ARRAY_SIZE(mt9p031_color_fmts);
> + }
> + mt9p031->format.code = mt9p031_find_datafmt(mt9p031, 0);
>
> mt9p031->format.width = MT9P031_WINDOW_WIDTH_DEF;
> mt9p031->format.height = MT9P031_WINDOW_HEIGHT_DEF;
--
Regards,
Laurent Pinchart
> struct v4l2_subdev_fh *fh)
>
> static const struct v4l2_subdev_core_ops mt9p031_subdev_core_ops = {
> .s_power= mt9p031_set_power,
> +#ifdef CONFIG_VIDEO_ADV_DEBUG
> + .s_register = mt9p031_s_register,
> + .g_register = mt9p031_g_register,
> +#endif
> };
>
> static const struct v4l2_subdev_video_ops mt9p031_subdev_video_ops = {
--
Regards,
Laurent Pinchart
rs/staging/media/zoran/TODO
> > create mode 100644 drivers/staging/media/zoran/videocodec.c
> > create mode 100644 drivers/staging/media/zoran/videocodec.h
> > create mode 100644 drivers/staging/media/zoran/zoran.h
> > create mode 100644 drivers/staging/media/zoran/zoran_card.c
> > create mode 100644 drivers/staging/media/zoran/zoran_card.h
> > create mode 100644 drivers/staging/media/zoran/zoran_device.c
> > create mode 100644 drivers/staging/media/zoran/zoran_device.h
> > create mode 100644 drivers/staging/media/zoran/zoran_driver.c
> > create mode 100644 drivers/staging/media/zoran/zr36016.c
> > create mode 100644 drivers/staging/media/zoran/zr36016.h
> > create mode 100644 drivers/staging/media/zoran/zr36050.c
> > create mode 100644 drivers/staging/media/zoran/zr36050.h
> > create mode 100644 drivers/staging/media/zoran/zr36057.h
> > create mode 100644 drivers/staging/media/zoran/zr36060.c
> > create mode 100644 drivers/staging/media/zoran/zr36060.h
--
Regards,
Laurent Pinchart
Hi Prabhakar,
On Sun, Sep 27, 2020 at 02:01:50PM +0100, Lad, Prabhakar wrote:
> On Mon, Aug 24, 2020 at 1:48 AM Laurent Pinchart wrote:
> > On Thu, Aug 13, 2020 at 03:00:41PM +0100, Lad Prabhakar wrote:
> > > The iwg21d comes with a 7" capacitive touch screen, ther
On Sun, Sep 20, 2020 at 12:22:14PM +0100, Ramesh Shanmugasundaram wrote:
> Hi Fabrizio,
>
> >
> > Renesas are expanding their DRIF support and offering,
> > I'll be the internal maintainer for DRIF.
> >
> > Signed-off-by: Fabrizio Castro
> > Rev
On Mon, Sep 21, 2020 at 01:35:34PM -0700, Paul E. McKenney wrote:
> On Mon, Sep 21, 2020 at 12:46:22PM -0700, Linus Torvalds wrote:
> > On Mon, Sep 21, 2020 at 12:37 PM Paul E. McKenney
> > wrote:
> > >
> > > This bug was reported by Laurent Pinchart (CCed),
>
On Mon, Sep 21, 2020 at 12:37:18PM -0700, Paul E. McKenney wrote:
> On Thu, Sep 17, 2020 at 04:24:16PM -0700, Paul E. McKenney wrote:
> > On Fri, Sep 18, 2020 at 01:26:41AM +0300, Laurent Pinchart wrote:
> > > Hi Paul,
> > >
> > > On Tue, Aug 25, 2020 at 09:1
Hi Krzysztof,
On Fri, Sep 18, 2020 at 10:19:25AM +0200, Krzysztof Kozlowski wrote:
> On Thu, 17 Sep 2020 at 22:12, Laurent Pinchart wrote:
> > On Thu, Sep 17, 2020 at 06:52:57PM +0200, Krzysztof Kozlowski wrote:
> > > Include the common GPIO schema in GPIO controllers to
Hi Krzysztof,
On Fri, Sep 18, 2020 at 09:52:57AM +0200, Krzysztof Kozlowski wrote:
> On Thu, 17 Sep 2020 at 22:10, Laurent Pinchart wrote:
> > On Thu, Sep 17, 2020 at 06:52:49PM +0200, Krzysztof Kozlowski wrote:
> > > Convert parts of gpio.txt bindings into common dtsc
Hi Paul,
On Tue, Aug 25, 2020 at 09:16:29AM -0700, Paul E. McKenney wrote:
> On Tue, Aug 25, 2020 at 06:22:49PM +0300, Laurent Pinchart wrote:
> > On Tue, Aug 25, 2020 at 08:02:22AM -0700, Paul E. McKenney wrote:
> > > On Sun, Aug 23, 2020 at 06:04:05AM +0300, Laur
niphier-gpio.yaml
> +++ b/Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml
> @@ -9,6 +9,9 @@ title: UniPhier GPIO controller
> maintainers:
>- Masahiro Yamada
>
> +allOf:
> + - $ref: gpio-common.yaml#
> +
> properties:
>$nodename:
> pattern: "^gpio@[0-9a-f]+$"
> diff --git a/Documentation/devicetree/bindings/gpio/xylon,logicvc-gpio.yaml
> b/Documentation/devicetree/bindings/gpio/xylon,logicvc-gpio.yaml
> index a36aec27069c..0e4581241b3f 100644
> --- a/Documentation/devicetree/bindings/gpio/xylon,logicvc-gpio.yaml
> +++ b/Documentation/devicetree/bindings/gpio/xylon,logicvc-gpio.yaml
> @@ -23,6 +23,9 @@ description: |
>- EN_VEE (power control) mapped to index 7
>- V_EN (power control) mapped to index 8
>
> +allOf:
> + - $ref: gpio-common.yaml#
> +
> properties:
>$nodename:
> pattern: "^gpio@[0-9a-f]+$"
--
Regards,
Laurent Pinchart
a combined Pin and GPIO
>controller.
> diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> index 72877544ca78..28b861362ba0 100644
> --- a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> @@ -56,6 +56,9 @@ properties:
> patternProperties:
>'^gpio@[0-9a-f]*$':
> type: object
> +allOf:
> + - $ref: /schemas/gpio/gpio-common.yaml#
> +
> properties:
>gpio-controller: true
>'#gpio-cells':
--
Regards,
Laurent Pinchart
= <18>;
> +gpio-reserved-ranges = <0 4>, <12 2>;
> +gpio-line-names = "MMC-CD", "MMC-WP", "VDD eth", "RST eth", "LED R",
> + "LED G", "LED B", "Col A", "Col B", "Col C", "Col
> D",
> + "Row A", "Row B", "Row C", "Row D", "NMI button",
> + "poweroff", "reset";
> +};
> +
> + - |
> +gpio-controller@1400 {
> +compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
> +reg = <0x1400 0x18>;
> +gpio-controller;
> +#gpio-cells = <2>;
> +
> +line-b-hog {
> +gpio-hog;
> +gpios = <6 0>;
> +input;
> +line-name = "foo-bar-gpio";
> +};
> +};
--
Regards,
Laurent Pinchart
o device is unregistered
>
> drivers/media/usb/uvc/uvc_ctrl.c | 11 ++
> drivers/media/usb/uvc/uvc_driver.c | 12 ++
> drivers/media/usb/uvc/uvc_queue.c | 32 +--
> drivers/media/usb/uvc/uvc_v4l2.c | 45
> --
> drivers/media/usb/uvc/uvcvideo.h | 1 +
> 5 files changed, 93 insertions(+), 8 deletions(-)
--
Regards,
Laurent Pinchart
Hi Greg,
On Thu, Sep 17, 2020 at 02:34:26PM +0200, Greg Kroah-Hartman wrote:
> On Thu, Sep 17, 2020 at 03:25:50PM +0300, Laurent Pinchart wrote:
> > On Wed, Aug 19, 2020 at 02:47:19AM +0300, Laurent Pinchart wrote:
> > > On Tue, Aug 18, 2020 at 03:36:08PM +0200, Greg K
Hi Greg,
On Wed, Aug 19, 2020 at 02:47:19AM +0300, Laurent Pinchart wrote:
> Hi Greg,
>
> Thank you for the patch.
>
> On Tue, Aug 18, 2020 at 03:36:08PM +0200, Greg Kroah-Hartman wrote:
> > When calling debugfs functions, there is no need to ever check the
> > retu
!= V4L2_SEL_TGT_CROP)
> > > > > + return -EINVAL;
> > > > > +
> > > > > + sel->r = *addi9036_get_pad_crop(addi9036, cfg, sel->pad,
> > > > > sel->which);
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +
> > > > > +static int addi9036_s_stream(struct v4l2_subdev *subdev, int enable)
> > > > > +{
> > > > > + struct addi9036 *addi9036 = to_addi9036(subdev);
> > > > > +
> > > > > + dev_dbg(addi9036->dev, "stream %d\n", enable);
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +
> > > > > +static const struct v4l2_subdev_core_ops addi9036_core_ops = {
> > > > > + .s_power= addi9036_s_power,
> > > > > +};
> > > > > +
> > > > > +static const struct v4l2_subdev_video_ops addi9036_video_ops = {
> > > > > + .s_stream = addi9036_s_stream,
> > > > > +};
> > > > > +
> > > > > +static const struct v4l2_subdev_pad_ops addi9036_subdev_pad_ops = {
> > > > > + .init_cfg = addi9036_entity_init_cfg,
> > > > > + .enum_mbus_code = addi9036_enum_mbus_code,
> > > > > + .enum_frame_size= addi9036_enum_frame_size,
> > > > > + .get_fmt= addi9036_get_format,
> > > > > + .set_fmt= addi9036_set_format,
> > > > > + .get_selection = addi9036_get_selection,
> > > > > +};
> > > > > +
> > > > > +static const struct v4l2_subdev_ops addi9036_subdev_ops = {
> > > > > + .core = _core_ops,
> > > > > + .video = _video_ops,
> > > > > + .pad= _subdev_pad_ops,
> > > > > +};
> > > > > +
> > > > > +static int addi9036_probe(struct i2c_client *client)
> > > > > +{
> > > > > + struct device *dev = >dev;
> > > > > + struct fwnode_handle *endpoint;
> > > > > + struct addi9036 *addi9036;
> > > > > + int ret;
> > > > > +
> > > > > + dev_dbg(dev, "%s: i2c addr = 0x%x\n", __func__, client->addr);
> > > > > +
> > > > > + addi9036 = devm_kzalloc(dev, sizeof(struct addi9036),
> > > > > GFP_KERNEL);
> > > > > + if (!addi9036)
> > > > > + return -ENOMEM;
> > > > > +
> > > > > + addi9036->dev = dev;
> > > > > +
> > > > > + addi9036->regmap = devm_regmap_init_i2c(client,
> > > > > +
> > > > > _i2c_regmap_config);
> > > > > + if (IS_ERR(addi9036->regmap)) {
> > > > > + dev_err(dev, "Error initializing i2c regmap\n");
> > > > > + return PTR_ERR(addi9036->regmap);
> > > > > + }
> > > > > +
> > > > > + mutex_init(>power_lock);
> > > > > +
> > > > > + endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(dev),
> > > > > NULL);
> > > > > + if (!endpoint) {
> > > > > + dev_err(dev, "endpoint node not found\n");
> > > > > + return -EINVAL;
> > > > > + }
> > > > > +
> > > > > + ret = v4l2_fwnode_endpoint_parse(endpoint, >ep);
> > > > > + if (ret < 0) {
> > > > > + dev_err(dev, "parsing endpoint node failed\n");
> > > > > + return ret;
> > > > > + }
> > > > > + fwnode_handle_put(endpoint);
> > > > > +
> > > > > + if (addi9036->ep.bus_type != V4L2_MBUS_CSI2_DPHY) {
> > > > > + dev_err(dev, "invalid bus type, must be MIPI CSI2\n");
> > > > > + return -EINVAL;
> > > > > + }
> > > > > +
> > > > > + addi9036->rst_gpio = gpiod_get_optional(dev, "reset",
> > > > > GPIOD_OUT_HIGH);
> > > > > + if (IS_ERR(addi9036->rst_gpio)) {
> > > > > + dev_info(dev, "Unable to get \"reset\" gpio\n");
> > > > > + return PTR_ERR(addi9036->rst_gpio);
> > > > > + }
> > > > > +
> > > > > + v4l2_ctrl_handler_init(>ctrls, 4);
> > > > > +
> > > > > + addi9036->pixel_rate = v4l2_ctrl_new_std(>ctrls,
> > > > > + _ctrl_ops,
> > > > > + V4L2_CID_PIXEL_RATE,
> > > > > + 1, INT_MAX, 1, 1);
> > > > > + addi9036->link_freq = v4l2_ctrl_new_int_menu(>ctrls,
> > > > > + _ctrl_ops,
> > > > > + V4L2_CID_LINK_FREQ,
> > > > > + ARRAY_SIZE(
> > > > > +
> > > > > link_freq_tbl) - 1,
> > > > > + 0, link_freq_tbl);
> > > > > + if (addi9036->link_freq)
> > > > > + addi9036->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> > > > > +
> > > > > + addi9036->set_chip_config =
> > > > > v4l2_ctrl_new_custom(>ctrls,
> > > > > +
> > > > > _ctrl_chip_config,
> > > > > + NULL);
> > > > > +
> > > > > + addi9036->reg_read = v4l2_ctrl_new_custom(>ctrls,
> > > > > +
> > > > > _ctrl_reg_read,
> > > > > + NULL);
> > > > > +
> > > > > + addi9036->sd.ctrl_handler = >ctrls;
> > > > > +
> > > > > + if (addi9036->ctrls.error) {
> > > > > + dev_err(dev, "%s: control initialization error %d\n",
> > > > > + __func__, addi9036->ctrls.error);
> > > > > + ret = addi9036->ctrls.error;
> > > > > + goto free_ctrl;
> > > > > + }
> > > > > +
> > > > > + v4l2_i2c_subdev_init(>sd, client,
> > > > > _subdev_ops);
> > > > > + addi9036->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
> > > > > + addi9036->pad.flags = MEDIA_PAD_FL_SOURCE;
> > > > > + addi9036->sd.dev = >dev;
> > > > > + addi9036->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
> > > > > +
> > > > > + ret = media_entity_pads_init(>sd.entity, 1,
> > > > > >pad);
> > > > > +
> > > > > + if (ret < 0) {
> > > > > + dev_err(dev, "could not register media entity\n");
> > > > > + goto free_ctrl;
> > > > > + }
> > > > > +
> > > > > + ret = addi9036_s_power(>sd, true);
> > > > > + if (ret < 0) {
> > > > > + dev_err(dev, "could not power up addi9036\n");
> > > > > + goto free_entity;
> > > > > + }
> > > > > +
> > > > > + dev_info(dev, "addi9036 detected at address 0x%02x\n",
> > > > > client->addr);
> > > > > +
> > > > > + ret = addi9036_s_power(>sd, false);
> > > > > + if (ret < 0) {
> > > > > + dev_err(dev, "could not power down addi9036\n");
> > > > > + goto free_entity;
> > > > > + }
> > > > > +
> > > > > + addi9036_entity_init_cfg(>sd, NULL);
> > > > > +
> > > > > + ret = v4l2_async_register_subdev(>sd);
> > > > > + if (ret < 0)
> > > > > + dev_err(dev, "could not register v4l2 device\n");
> > > > > +
> > > > > + return 0;
> > > > > +
> > > > > +free_entity:
> > > > > + media_entity_cleanup(>sd.entity);
> > > > > +free_ctrl:
> > > > > + v4l2_ctrl_handler_free(>ctrls);
> > > > > + mutex_destroy(>power_lock);
> > > > > +
> > > > > + return ret;
> > > > > +}
> > > > > +
> > > > > +static int addi9036_remove(struct i2c_client *client)
> > > > > +{
> > > > > + struct v4l2_subdev *sd = i2c_get_clientdata(client);
> > > > > + struct addi9036 *addi9036 = to_addi9036(sd);
> > > > > +
> > > > > + v4l2_async_unregister_subdev(>sd);
> > > > > + media_entity_cleanup(>sd.entity);
> > > > > + if (addi9036->rst_gpio)
> > > > > + gpiod_put(addi9036->rst_gpio);
> > > > > + v4l2_ctrl_handler_free(>ctrls);
> > > > > + mutex_destroy(>power_lock);
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +
> > > > > +static const struct i2c_device_id addi9036_id[] = {
> > > > > + { "addi9036", 0 },
> > > > > + {}
> > > > > +};
> > > > > +MODULE_DEVICE_TABLE(i2c, addi9036_id);
> > > > > +
> > > > > +static const struct of_device_id addi9036_of_match[] = {
> > > > > + { .compatible = "adi,addi9036" },
> > > > > + { /* sentinel */ }
> > > > > +};
> > > > > +MODULE_DEVICE_TABLE(of, addi9036_of_match);
> > > > > +
> > > > > +static struct i2c_driver addi9036_i2c_driver = {
> > > > > + .driver = {
> > > > > + .of_match_table = addi9036_of_match,
> > > > > + .name = "addi9036",
> > > > > + },
> > > > > + .probe_new = addi9036_probe,
> > > > > + .remove = addi9036_remove,
> > > > > + .id_table = addi9036_id,
> > > > > +};
> > > > > +
> > > > > +module_i2c_driver(addi9036_i2c_driver);
> > > > > +
> > > > > +MODULE_DESCRIPTION("Analog Devices ADDI9036 Camera Driver");
> > > > > +MODULE_AUTHOR("Bogdan Togorean");
> > > > > +MODULE_LICENSE("GPL v2");
> > > > > diff --git a/include/uapi/linux/v4l2-controls.h
> > > > > b/include/uapi/linux/v4l2- controls.h
> > > > > index 62271418c1be..f88b56479bc1 100644
> > > > > --- a/include/uapi/linux/v4l2-controls.h
> > > > > +++ b/include/uapi/linux/v4l2-controls.h
> > > > > @@ -198,6 +198,12 @@ enum v4l2_colorfx {
> > > > > */
> > > > > #define V4L2_CID_USER_ATMEL_ISC_BASE (V4L2_CID_USER_BASE +
> > > > > 0x10c0)
> > > > >
> > > > > +/*
> > > > > + * The base for the addi9036 driver controls.
> > > > > + * We reserve 16 controls for this driver.
> > > > > + */
> > > > > +#define V4L2_CID_USER_ADDI9036_BASE (V4L2_CID_USER_BASE + 0x10e0)
> > > > > +
> > > > > /* MPEG-class control IDs */
> > > > > /* The MPEG controls are applicable to all codec controls
> > > > > * and the 'MPEG' part of the define is historical */
--
Regards,
Laurent Pinchart
| 3 +-
> 3 files changed, 273 insertions(+), 178 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/media/renesas,drif.txt
> create mode 100644 Documentation/devicetree/bindings/media/renesas,drif.yaml
--
Regards,
Laurent Pinchart
On Wed, Sep 16, 2020 at 10:57:46PM +0530, Sekhar Nori wrote:
> On 16/09/20 6:13 PM, Vinod Koul wrote:
> > On 16-09-20, 15:18, Laurent Pinchart wrote:
> >> Hi Sekhar,
> >>
> >> On Wed, Sep 16, 2020 at 01:11:17PM +0530, Sekhar Nori wrote:
> >>
> Can you please add these patches on an immutable branch/tag when you are
> ready to apply them - will try to see if we can use it to get the
> DisplayPort driver merged in v5.10 too.
>
> Hi Laurent, any other ideas on managing the dependency?
I think that will work fine.
--
Regards,
Laurent Pinchart
e
driver is unloaded. The way to handle cleanup in DRM is through
drmm_add_action() nowadays, and I think we could thus simply replace the
change above with a cleanup action that is run both in the error path
and at driver remove.
I'll post a proposal in a reply to this e-mail.
--
Regards,
Laurent Pinchart
Hi Swapnil,
Thank you for the patch.
On Fri, Sep 11, 2020 at 08:18:34AM +0200, Swapnil Jakhade wrote:
> Set Torrent PHY attributes bus_width, max_link_rate and mode
> for DisplayPort.
>
> Signed-off-by: Swapnil Jakhade
> Acked-by: Kishon Vijay Abraham I
Reviewed-by: L
Swapnil Jakhade
> Acked-by: Kishon Vijay Abraham I
Reviewed-by: Laurent Pinchart
> ---
> include/linux/phy/phy.h | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
> index bcee8eba62b3..e435bdb0bab3 100644
> --- a/
-ceu.h
>
> MEDIA DRIVERS FOR RENESAS - DRIF
> M: Ramesh Shanmugasundaram
> +M: Fabrizio Castro
> L: linux-me...@vger.kernel.org
> L: linux-renesas-...@vger.kernel.org
> S: Supported
--
Regards,
Laurent Pinchart
ere. I'd propose
The rcar_dw_hdmi driver is also used on Renesas RZ/G2 SoCs. Update the
Kconfig entry description to reflect this.
Reviewed-by: Laurent Pinchart
If you're fine with that, there's no need to resubmit the patch.
> Signed-off-by: Lad Prabhakar
> Reviewed-by: Chris Paterson
&g
On Wed, Sep 16, 2020 at 12:26:08AM +0300, Laurent Pinchart wrote:
> Hi Prabhakar,
>
> Thank you for the patch.
>
> On Fri, Sep 11, 2020 at 11:10:46AM +0100, Lad Prabhakar wrote:
> > rcar-fcp driver is also used on Renesas RZ/G2 SoC's, update the same
>
> I'm not sure
as RZ/G2 SoCs. Update the
Kconfig entry description to reflect this.
Reviewed-by: Laurent Pinchart
If you're fine with that, there's no need to resubmit the patch.
> to reflect help description for VIDEO_RENESAS_FCP config.
>
> Signed-off-by: Lad Prabhakar
> Reviewed-by: Chris Paterso
(IS_ERR(addi9036->regmap)) {
> > > + dev_err(dev, "Error initializing i2c regmap\n");
> > > + return PTR_ERR(addi9036->regmap);
> > > + }
> > > +
> > > + mutex_init(>power_lock);
> > > +
> > > + endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(dev), NULL);
> > > + if (!endpoint) {
> > > + dev_err(dev, "endpoint node not found\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + ret = v4l2_fwnode_endpoint_parse(endpoint, >ep);
> > > + if (ret < 0) {
> > > + dev_err(dev, "parsing endpoint node failed\n");
> > > + return ret;
> > > + }
> > > + fwnode_handle_put(endpoint);
> > > +
> > > + if (addi9036->ep.bus_type != V4L2_MBUS_CSI2_DPHY) {
> > > + dev_err(dev, "invalid bus type, must be MIPI CSI2\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + addi9036->rst_gpio = gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> > > + if (IS_ERR(addi9036->rst_gpio)) {
> > > + dev_info(dev, "Unable to get \"reset\" gpio\n");
> > > + return PTR_ERR(addi9036->rst_gpio);
> > > + }
> > > +
> > > + v4l2_ctrl_handler_init(>ctrls, 4);
> > > +
> > > + addi9036->pixel_rate = v4l2_ctrl_new_std(>ctrls,
> > > + _ctrl_ops,
> > > + V4L2_CID_PIXEL_RATE,
> > > + 1, INT_MAX, 1, 1);
> > > + addi9036->link_freq = v4l2_ctrl_new_int_menu(>ctrls,
> > > + _ctrl_ops,
> > > + V4L2_CID_LINK_FREQ,
> > > + ARRAY_SIZE(
> > > + link_freq_tbl) - 1,
> > > + 0, link_freq_tbl);
> > > + if (addi9036->link_freq)
> > > + addi9036->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> > > +
> > > + addi9036->set_chip_config = v4l2_ctrl_new_custom(>ctrls,
> > > + _ctrl_chip_config,
> > > + NULL);
> > > +
> > > + addi9036->reg_read = v4l2_ctrl_new_custom(>ctrls,
> > > + _ctrl_reg_read,
> > > + NULL);
> > > +
> > > + addi9036->sd.ctrl_handler = >ctrls;
> > > +
> > > + if (addi9036->ctrls.error) {
> > > + dev_err(dev, "%s: control initialization error %d\n",
> > > + __func__, addi9036->ctrls.error);
> > > + ret = addi9036->ctrls.error;
> > > + goto free_ctrl;
> > > + }
> > > +
> > > + v4l2_i2c_subdev_init(>sd, client, _subdev_ops);
> > > + addi9036->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
> > > + addi9036->pad.flags = MEDIA_PAD_FL_SOURCE;
> > > + addi9036->sd.dev = >dev;
> > > + addi9036->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
> > > +
> > > + ret = media_entity_pads_init(>sd.entity, 1, >pad);
> > > +
> > > + if (ret < 0) {
> > > + dev_err(dev, "could not register media entity\n");
> > > + goto free_ctrl;
> > > + }
> > > +
> > > + ret = addi9036_s_power(>sd, true);
> > > + if (ret < 0) {
> > > + dev_err(dev, "could not power up addi9036\n");
> > > + goto free_entity;
> > > + }
> > > +
> > > + dev_info(dev, "addi9036 detected at address 0x%02x\n", client->addr);
> > > +
> > > + ret = addi9036_s_power(>sd, false);
> > > + if (ret < 0) {
> > > + dev_err(dev, "could not power down addi9036\n");
> > > + goto free_entity;
> > > + }
> > > +
> > > + addi9036_entity_init_cfg(>sd, NULL);
> > > +
> > > + ret = v4l2_async_register_subdev(>sd);
> > > + if (ret < 0)
> > > + dev_err(dev, "could not register v4l2 device\n");
> > > +
> > > + return 0;
> > > +
> > > +free_entity:
> > > + media_entity_cleanup(>sd.entity);
> > > +free_ctrl:
> > > + v4l2_ctrl_handler_free(>ctrls);
> > > + mutex_destroy(>power_lock);
> > > +
> > > + return ret;
> > > +}
> > > +
> > > +static int addi9036_remove(struct i2c_client *client)
> > > +{
> > > + struct v4l2_subdev *sd = i2c_get_clientdata(client);
> > > + struct addi9036 *addi9036 = to_addi9036(sd);
> > > +
> > > + v4l2_async_unregister_subdev(>sd);
> > > + media_entity_cleanup(>sd.entity);
> > > + if (addi9036->rst_gpio)
> > > + gpiod_put(addi9036->rst_gpio);
> > > + v4l2_ctrl_handler_free(>ctrls);
> > > + mutex_destroy(>power_lock);
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +static const struct i2c_device_id addi9036_id[] = {
> > > + { "addi9036", 0 },
> > > + {}
> > > +};
> > > +MODULE_DEVICE_TABLE(i2c, addi9036_id);
> > > +
> > > +static const struct of_device_id addi9036_of_match[] = {
> > > + { .compatible = "adi,addi9036" },
> > > + { /* sentinel */ }
> > > +};
> > > +MODULE_DEVICE_TABLE(of, addi9036_of_match);
> > > +
> > > +static struct i2c_driver addi9036_i2c_driver = {
> > > + .driver = {
> > > + .of_match_table = addi9036_of_match,
> > > + .name = "addi9036",
> > > + },
> > > + .probe_new = addi9036_probe,
> > > + .remove = addi9036_remove,
> > > + .id_table = addi9036_id,
> > > +};
> > > +
> > > +module_i2c_driver(addi9036_i2c_driver);
> > > +
> > > +MODULE_DESCRIPTION("Analog Devices ADDI9036 Camera Driver");
> > > +MODULE_AUTHOR("Bogdan Togorean");
> > > +MODULE_LICENSE("GPL v2");
> > > diff --git a/include/uapi/linux/v4l2-controls.h
> > > b/include/uapi/linux/v4l2- controls.h
> > > index 62271418c1be..f88b56479bc1 100644
> > > --- a/include/uapi/linux/v4l2-controls.h
> > > +++ b/include/uapi/linux/v4l2-controls.h
> > > @@ -198,6 +198,12 @@ enum v4l2_colorfx {
> > > */
> > > #define V4L2_CID_USER_ATMEL_ISC_BASE (V4L2_CID_USER_BASE +
> > > 0x10c0)
> > >
> > > +/*
> > > + * The base for the addi9036 driver controls.
> > > + * We reserve 16 controls for this driver.
> > > + */
> > > +#define V4L2_CID_USER_ADDI9036_BASE (V4L2_CID_USER_BASE +
> > > 0x10e0)
> > > +
> > > /* MPEG-class control IDs */
> > > /* The MPEG controls are applicable to all codec controls
> > > * and the 'MPEG' part of the define is historical */
--
Regards,
Laurent Pinchart
y: Fabrizio Castro
Reviewed-by: Laurent Pinchart
> ---
> Documentation/devicetree/bindings/media/renesas,drif.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/media/renesas,drif.yaml
> b/Documentation/devicetree/bindings/media/re
On Tue, Sep 15, 2020 at 08:36:39PM +0300, Laurent Pinchart wrote:
> Hi Fabrizio,
>
> Thank you for the patch.
>
> On Tue, Sep 15, 2020 at 02:12:15PM +0100, Fabrizio Castro wrote:
> > Convert the Renesas DRIF bindings to DT schema and update
> > MAINTAINERS accor
nded together are enabled,
> + the zeroth channel is selected as primary-bond. This channels accepts
> + properties common to all the members of the bond.
> + * When only one of the bonded channels need to be enabled, the property
> + "renesas,bonding" or &
Hi Hans,
On Thu, Sep 10, 2020 at 12:22:28PM +0200, Hans Verkuil wrote:
> On 26/08/2020 16:10, Nicolas Dufresne wrote:
> > Le mercredi 19 août 2020 à 19:56 +0300, Laurent Pinchart a écrit :
> >> Hi Vishal,
> >>
> >> (Hans, there's a question for you below)
>
Hi Niklas,
On Tue, Sep 15, 2020 at 02:01:40AM +0200, Niklas Söderlund wrote:
> On 2020-09-15 02:45:32 +0300, Laurent Pinchart wrote:
> > On Sun, Sep 13, 2020 at 07:16:08PM +0100, Lad Prabhakar wrote:
> > > Enable YDS bit if bus_width and data_shift is set to
n->format = f->fmt.pix;
> -
> - fmt_rect.top = 0;
> - fmt_rect.left = 0;
> - fmt_rect.width = vin->format.width;
> - fmt_rect.height = vin->format.height;
> -
> - v4l2_rect_map_inside(>crop, _rect);
> - v4l2_rect_map_inside(>compose, _
BUS_VSYNC_ACTIVE_LOW))
> + if (!(vin->parallel->bus.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
> dmr2 |= VNDMR2_VPS;
>
> /* Data Enable Polarity Select */
> - if (vin->parallel->mbus_flags & V4L2
8g),
> > > SH_PFC_PIN_GROUP(vin2_sync),
> > > SH_PFC_PIN_GROUP(vin2_field),
> > > SH_PFC_PIN_GROUP(vin2_clkenb),
> > > @@ -4784,10 +4886,19 @@ static const char * const vin1_groups[] = {
> > > "vin1_data10",
> > > "vin1_data8",
> > > "vin1_data4",
> > > + "vin1_data24_b",
> > > + "vin1_data20_b",
> > > + "vin1_data18_b",
> > > + "vin1_data16_b",
> > > + "vin1_data12_b",
> > > + "vin1_data10_b",
> > > + "vin1_data8_b",
> >
> > Missing vin1_data4_b.
> >
> > > "vin1_sync",
> > > + "vin1_sync_b",
> > > "vin1_field",
> > > "vin1_clkenb",
> > > "vin1_clk",
> > > + "vin1_clk_b",
> > > };
> > >
> > > static const char * const vin2_groups[] = {
> >
> > The rest looks good to me.
--
Regards,
Laurent Pinchart
6_s_power(>sd, true);
> + if (ret < 0) {
> + dev_err(dev, "could not power up addi9036\n");
> + goto free_entity;
> + }
> +
> + dev_info(dev, "addi9036 detected at address 0x%02x\n", client->addr);
> +
> + ret = addi9036_s_power(>sd, false);
> + if (ret < 0) {
> + dev_err(dev, "could not power down addi9036\n");
> + goto free_entity;
> + }
> +
> + addi9036_entity_init_cfg(>sd, NULL);
> +
> + ret = v4l2_async_register_subdev(>sd);
> + if (ret < 0)
> + dev_err(dev, "could not register v4l2 device\n");
> +
> + return 0;
> +
> +free_entity:
> + media_entity_cleanup(>sd.entity);
> +free_ctrl:
> + v4l2_ctrl_handler_free(>ctrls);
> + mutex_destroy(>power_lock);
> +
> + return ret;
> +}
> +
> +static int addi9036_remove(struct i2c_client *client)
> +{
> + struct v4l2_subdev *sd = i2c_get_clientdata(client);
> + struct addi9036 *addi9036 = to_addi9036(sd);
> +
> + v4l2_async_unregister_subdev(>sd);
> + media_entity_cleanup(>sd.entity);
> + if (addi9036->rst_gpio)
> + gpiod_put(addi9036->rst_gpio);
> + v4l2_ctrl_handler_free(>ctrls);
> + mutex_destroy(>power_lock);
> +
> + return 0;
> +}
> +
> +static const struct i2c_device_id addi9036_id[] = {
> + { "addi9036", 0 },
> + {}
> +};
> +MODULE_DEVICE_TABLE(i2c, addi9036_id);
> +
> +static const struct of_device_id addi9036_of_match[] = {
> + { .compatible = "adi,addi9036" },
> + { /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, addi9036_of_match);
> +
> +static struct i2c_driver addi9036_i2c_driver = {
> + .driver = {
> + .of_match_table = addi9036_of_match,
> + .name = "addi9036",
> + },
> + .probe_new = addi9036_probe,
> + .remove = addi9036_remove,
> + .id_table = addi9036_id,
> +};
> +
> +module_i2c_driver(addi9036_i2c_driver);
> +
> +MODULE_DESCRIPTION("Analog Devices ADDI9036 Camera Driver");
> +MODULE_AUTHOR("Bogdan Togorean");
> +MODULE_LICENSE("GPL v2");
> diff --git a/include/uapi/linux/v4l2-controls.h
> b/include/uapi/linux/v4l2-controls.h
> index 62271418c1be..f88b56479bc1 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -198,6 +198,12 @@ enum v4l2_colorfx {
> */
> #define V4L2_CID_USER_ATMEL_ISC_BASE (V4L2_CID_USER_BASE + 0x10c0)
>
> +/*
> + * The base for the addi9036 driver controls.
> + * We reserve 16 controls for this driver.
> + */
> +#define V4L2_CID_USER_ADDI9036_BASE (V4L2_CID_USER_BASE + 0x10e0)
> +
> /* MPEG-class control IDs */
> /* The MPEG controls are applicable to all codec controls
> * and the 'MPEG' part of the define is historical */
> --
> 2.28.0
>
--
Regards,
Laurent Pinchart
Agner wrote:
> >>>> On 2020-09-07 20:18, Daniel Vetter wrote:
> >>>>> On Mon, Sep 07, 2020 at 07:17:12PM +0300, Laurent Pinchart wrote:
> >>>>>> Hi Stefan,
> >>>>>>
> >>>>>> Thank you for the patch.
> &g
as no information
> > > > > wrt CPADHI or for loosely packed
> > > > >
> > > > > static const u32 tc_lvds_in_bus_fmts[] = {
> > > > > MEDIA_BUS_FMT_RGB565_1X16,
> > > > > MEDIA_BUS_FMT_RGB666_1X18,
> >
On Tue, Sep 08, 2020 at 10:48:55AM +0200, Daniel Vetter wrote:
> On Tue, Sep 08, 2020 at 11:18:25AM +0300, Tomi Valkeinen wrote:
> > On 08/09/2020 10:55, Stefan Agner wrote:
> > > On 2020-09-07 20:18, Daniel Vetter wrote:
> > >> On Mon, Sep 07, 2020 at 07:17:12PM
erspace to handle the issue correctly.
>
> Signed-off-by: Stefan Agner
Reviewed-by: Laurent Pinchart
> ---
> drivers/gpu/drm/mxsfb/mxsfb_drv.c | 21 -
> 1 file changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.
;
I'd turn this into a dev_dbg(), printing error messages to the kernel
log in response to user-triggered conditions is a bit too verbose and
could flood the log.
Wouldn't it be best to catch this issue when creating the framebuffer ?
> + return -EINVAL;
> + }
> +
> + return 0;
> }
>
> static void mxsfb_plane_primary_atomic_update(struct drm_plane *plane,
--
Regards,
Laurent Pinchart
nded, looking at
this patch I have no idea what this does and how to compute the value
that should be set.
> patternProperties:
>"^panel@[0-9]+$":
> type: object
--
Regards,
Laurent Pinchart
On Fri, Sep 04, 2020 at 11:21:04AM +0300, Sakari Ailus wrote:
> > > > > On Fri, Sep 04, 2020 at 09:55:53AM +0200, Jacopo Mondi wrote:
> > > > > > On Fri, Sep 04, 2020 at 04:20:00AM +0300, Laurent Pinchart wrote:
> > > > > > > Hi Prabhakar,
>
Hello,
On Fri, Sep 04, 2020 at 11:21:04AM +0300, Sakari Ailus wrote:
> On Fri, Sep 04, 2020 at 09:55:53AM +0200, Jacopo Mondi wrote:
> > On Fri, Sep 04, 2020 at 04:20:00AM +0300, Laurent Pinchart wrote:
> > > On Mon, Aug 24, 2020 at 08:04:05PM +0100, Lad Prabhakar wrote:
&
return V4L2_XFER_FUNC_DEFAULT; /* Reserved */
> +}
> +
> +static enum v4l2_ycbcr_encoding uvc_ycbcr_enc(const u8 matrix_coefficients)
> +{
> + /* V4L2 currently does not currently have definitions for all
Same here.
Reviewed-by: Laurent Pinchart
> + * possible
ed on EDID, fbdev is created with 1920x1200. Link
> training is done, which
> has the CR issue, and because of that the actual mode that we get is
> 1280x960. I get a proper
> picture here, so far so good.
>
> Then if I run kmstest, it only allows 1280x960 as the link doesn't support
> higher modes (that's ok).
> It the does link training and gets a 4 lane link, and enables 1280x960. But
> the picture is not ok.
>
> If I then exit kmstest, it goes back to fbdev, but now that picture is broken
> also.
>
> Running kmstest again gives me 1920x1200 (as the link has been 4 lane now),
> and the picture is fine.
>
> I think the above suggests that the driver is not properly updating all the
> registers based on the
> new mode and link. I tried adding cdns_mhdp_validate_mode_params() call to
> cdns_mhdp_atomic_enable(), so that tu-size etc will be calculated, but that
> did not fix the problem.
--
Regards,
Laurent Pinchart
us either adjust or reset
the crop and selection rectangles. The specification isn't clear on
which behaviour should be implemented, the only related text is
"Sub-devices that scale frames using variable scaling factors should
reset the scale factors to default values when sink pads formats are
modified. If the 1:1 scaling ratio is supported, this means that source
pads formats should be reset to the sink pads formats."
I would recommend resetting as the default behaviour. In any case,
adjustements are needed to ensure that the configuration remains valid.
--
Regards,
Laurent Pinchart
Hi Prabhakar,
On Tue, Aug 11, 2020 at 06:40:58PM +0100, Lad, Prabhakar wrote:
> On Tue, Aug 11, 2020 at 12:41 PM Laurent Pinchart wrote:
> > On Fri, Aug 07, 2020 at 09:20:36PM +0100, Lad, Prabhakar wrote:
> > > On Wed, Aug 5, 2020 at 1:35 PM Laurent Pinchart wrote:
> >
ret = priv->hdl.error;
> diff --git a/include/media/i2c/ov772x.h b/include/media/i2c/ov772x.h
> index a1702d420087..65e6f8d2f4bb 100644
> --- a/include/media/i2c/ov772x.h
> +++ b/include/media/i2c/ov772x.h
> @@ -12,6 +12,7 @@
> /* for flags */
> #define OV772X_FLAG_VFLIP(1 << 0) /* Vertical flip image */
> #define OV772X_FLAG_HFLIP(1 << 1) /* Horizontal flip image */
> +#define OV772X_FLAG_TEST_PATTERN (1 << 2) /* Test pattern */
>
> /*
> * for Edge ctrl
--
Regards,
Laurent Pinchart
error
path and in remove().
On the other hand, not setting .bus_type and letting the parse()
function determine the but type automatically is also deprecated, and I
don't think forcing drivers to call v4l2_fwnode_endpoint_alloc_parse()
once for each bus type until one succeeds is a good API. As
401 - 500 of 4490 matches
Mail list logo