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 <enrico.sch...@sigma-chemnitz.de>
> >>
> >> Implement g_register and s_register v4l2_subdev_core_ops to access
> >> camera register directly from userspace for debug purposes.
> > 
> > As the name of the operations imply, this is meant for debug purpose
> > only. They are however prone to be abused to configure the sensor from
> > userspace in production, which isn't a direction we want to take.
> > What's your use case for this ?  I'd rather drop this patch and see the
> > driver extended with support for more controls if needed
> 
> thanks for your feedback.
> 
> I get your point. I myself solely use these operations for debugging 
> purposes but I'm aware that others like to abuse them.
> 
> I thought I send it anyway since for me the DEBUG config is enough to 
> signalize that these operations are not to be used with a productive system. 
> But I'm OK with dropping this patch if you think it might send the wrong 
> signal.

I'd rather avoid this patch due to the risk of abuse if it's OK with
you.

> >> Signed-off-by: Enrico Scholz <enrico.sch...@sigma-chemnitz.de>
> >> Signed-off-by: Stefan Riedmueller <s.riedmuel...@phytec.de>
> >> ---
> >> No changes in v2
> >> ---
> >>   drivers/media/i2c/mt9p031.c | 28 ++++++++++++++++++++++++++++
> >>   1 file changed, 28 insertions(+)
> >>
> >> diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
> >> index b4c042f418c1..de36025260a8 100644
> >> --- a/drivers/media/i2c/mt9p031.c
> >> +++ b/drivers/media/i2c/mt9p031.c
> >> @@ -703,6 +703,30 @@ static int mt9p031_restore_blc(struct mt9p031 
> >> *mt9p031)
> >>    return 0;
> >>   }
> >>   
> >> +#ifdef CONFIG_VIDEO_ADV_DEBUG
> >> +static int mt9p031_g_register(struct v4l2_subdev *sd,
> >> +                        struct v4l2_dbg_register *reg)
> >> +{
> >> +  struct i2c_client *client = v4l2_get_subdevdata(sd);
> >> +  int ret;
> >> +
> >> +  ret = mt9p031_read(client, reg->reg);
> >> +  if (ret < 0)
> >> +          return ret;
> >> +
> >> +  reg->val = ret;
> >> +  return 0;
> >> +}
> >> +
> >> +static int mt9p031_s_register(struct v4l2_subdev *sd,
> >> +                        struct v4l2_dbg_register const *reg)
> >> +{
> >> +  struct i2c_client *client = v4l2_get_subdevdata(sd);
> >> +
> >> +  return mt9p031_write(client, reg->reg, reg->val);
> >> +}
> >> +#endif
> >> +
> >>   static int mt9p031_s_ctrl(struct v4l2_ctrl *ctrl)
> >>   {
> >>    struct mt9p031 *mt9p031 =
> >> @@ -1000,6 +1024,10 @@ static int mt9p031_close(struct v4l2_subdev 
> >> *subdev, 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

Reply via email to