Hi Laurent,
Thank you for your feedback.
On 2018-03-02 13:31:47 +0200, Laurent Pinchart wrote:
> Hi Niklas,
>
> Thank you for the patch.
>
> On Friday, 2 March 2018 03:57:38 EET Niklas Söderlund wrote:
> > On Gen3 the CSI-2 routing is controlled by the VnCSI_IFMD register. One
> > feature of this register is that it's only present in the VIN0 and VIN4
> > instances. The register in VIN0 controls the routing for VIN0-3 and the
> > register in VIN4 controls routing for VIN4-7.
> >
> > To be able to control routing from a media device this function is need
> > to control runtime PM for the subgroup master (VIN0 and VIN4). The
> > subgroup master must be switched on before the register is manipulated,
> > once the operation is complete it's safe to switch the master off and
> > the new routing will still be in effect.
> >
> > Signed-off-by: Niklas Söderlund
>
> Reviewed-by: Laurent Pinchart
Thank you.
>
> > ---
> > drivers/media/platform/rcar-vin/rcar-dma.c | 38 +++
> > drivers/media/platform/rcar-vin/rcar-vin.h | 2 ++
> > 2 files changed, 40 insertions(+)
>
> By the way it would be useful if you added per-patch changelogs. You can
> capture them in the commit message below a --- line.
I'm feeling the pain already of not doing this. I have in the past tried
to keep such change long under a --- line like you suggest. But
something in my work flow at that time caused the --- to be dropped and
I never figured out what caused it.
I will try it again and see if I can figure out what caused it and how I
can work around it. Thanks for brining this up.
>
> > diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c
> > b/drivers/media/platform/rcar-vin/rcar-dma.c index
> > 57bb288b3ca67a60..3fb9c325285c5a5a 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-dma.c
> > +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
> > @@ -16,6 +16,7 @@
> >
> > #include
> > #include
> > +#include
> >
> > #include
> >
> > @@ -1228,3 +1229,40 @@ int rvin_dma_register(struct rvin_dev *vin, int irq)
> >
> > return ret;
> > }
> > +
> > +/*
> > + * Gen3 CHSEL manipulation
> > + */
> > +
> > +/*
> > + * There is no need to have locking around changing the routing
> > + * as it's only possible to do so when no VIN in the group is
> > + * streaming so nothing can race with the VNMC register.
> > + */
> > +int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel)
> > +{
> > + u32 ifmd, vnmc;
> > + int ret;
> > +
> > + ret = pm_runtime_get_sync(vin->dev);
> > + if (ret < 0)
> > + return ret;
> > +
> > + /* Make register writes take effect immediately. */
> > + vnmc = rvin_read(vin, VNMC_REG);
> > + rvin_write(vin, vnmc & ~VNMC_VUP, VNMC_REG);
> > +
> > + ifmd = VNCSI_IFMD_DES2 | VNCSI_IFMD_DES1 | VNCSI_IFMD_DES0 |
> > + VNCSI_IFMD_CSI_CHSEL(chsel);
> > +
> > + rvin_write(vin, ifmd, VNCSI_IFMD_REG);
> > +
> > + vin_dbg(vin, "Set IFMD 0x%x\n", ifmd);
> > +
> > + /* Restore VNMC. */
> > + rvin_write(vin, vnmc, VNMC_REG);
> > +
> > + pm_runtime_put(vin->dev);
> > +
> > + return ret;
> > +}
> > diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h
> > b/drivers/media/platform/rcar-vin/rcar-vin.h index
> > b3802651eaa78ea9..666308946eb4994d 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-vin.h
> > +++ b/drivers/media/platform/rcar-vin/rcar-vin.h
> > @@ -165,4 +165,6 @@ const struct rvin_video_format
> > *rvin_format_from_pixel(u32 pixelformat); /* Cropping, composing and
> > scaling */
> > void rvin_crop_scale_comp(struct rvin_dev *vin);
> >
> > +int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel);
> > +
> > #endif
>
> --
> Regards,
>
> Laurent Pinchart
>
--
Regards,
Niklas Söderlund