Re: [PATCH v2 6/7] usb: gadget: uvc: Make color matching attributes read/write

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dan,

Thank you for the patch.

On Mon, Dec 19, 2022 at 02:43:15PM +0000, Daniel Scally wrote:
> In preparation for allowing more than the default color matching
> descriptor, make the color matching attributes writeable.
> 
> Signed-off-by: Daniel Scally <dan.scally@xxxxxxxxxxxxxxxx>
> ---
> Changes in v2:
> 
> 	- Check refcnt before allowing the change in .store()
> 	- Renamed uvcg_cmd to uvcg_color_matching
> 
>  .../ABI/testing/configfs-usb-gadget-uvc       |  2 +-
>  drivers/usb/gadget/function/uvc_configfs.c    | 36 ++++++++++++++++++-
>  2 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/ABI/testing/configfs-usb-gadget-uvc b/Documentation/ABI/testing/configfs-usb-gadget-uvc
> index f00cff6d8c5c..53258b7c6f2d 100644
> --- a/Documentation/ABI/testing/configfs-usb-gadget-uvc
> +++ b/Documentation/ABI/testing/configfs-usb-gadget-uvc
> @@ -165,7 +165,7 @@ Date:		Dec 2014
>  KernelVersion:	4.0
>  Description:	Default color matching descriptors
>  
> -		All attributes read only:
> +		All attributes read/write:
>  
>  		========================  ======================================
>  		bMatrixCoefficients	  matrix used to compute luma and
> diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
> index 6fb7ac8366fe..ef5d75942f24 100644
> --- a/drivers/usb/gadget/function/uvc_configfs.c
> +++ b/drivers/usb/gadget/function/uvc_configfs.c
> @@ -1851,7 +1851,41 @@ static ssize_t uvcg_color_matching_##cname##_show(			\
>  	return result;							\
>  }									\
>  									\
> -UVC_ATTR_RO(uvcg_color_matching_, cname, aname)
> +static ssize_t uvcg_color_matching_##cname##_store(			\
> +	struct config_item *item, const char *page, size_t len)		\
> +{									\
> +	struct config_group *group = to_config_group(item);		\
> +	struct mutex *su_mutex = &group->cg_subsys->su_mutex;		\
> +	struct uvcg_color_matching *color_match =			\
> +		to_uvcg_color_matching(group);				\
> +	struct f_uvc_opts *opts;					\
> +	struct config_item *opts_item;					\
> +	int ret;							\
> +	u##bits num;							\
> +									\
> +	if (color_match->refcnt)					\

Shouldn't this be protected by the same lock that you use to modify
refcnt in 7/7 ?

> +		return -EBUSY;						\
> +									\
> +	ret = kstrtou##bits(page, 0, &num);				\
> +	if (ret)							\
> +		return ret;						\
> +									\
> +	mutex_lock(su_mutex); /* for navigating configfs hierarchy */	\
> +									\
> +	opts_item = group->cg_item.ci_parent->ci_parent->ci_parent;	\
> +	opts = to_f_uvc_opts(opts_item);				\
> +									\
> +	mutex_lock(&opts->lock);					\
> +									\
> +	color_match->desc.aname = num;					\
> +	ret = len;							\
> +									\
> +	mutex_unlock(&opts->lock);					\
> +	mutex_unlock(su_mutex);						\
> +									\
> +	return ret;							\
> +}									\
> +UVC_ATTR(uvcg_color_matching_, cname, aname)
>  
>  UVCG_COLOR_MATCHING_ATTR(b_color_primaries, bColorPrimaries, 8);
>  UVCG_COLOR_MATCHING_ATTR(b_transfer_characteristics, bTransferCharacteristics, 8);

-- 
Regards,

Laurent Pinchart



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux