* [PATCH v3] add video controls for SUR40 driver
@ 2018-02-07 13:00 Florian Echtler
2018-02-07 13:00 ` [PATCH 1/4] add missing blob structure field for tag id Florian Echtler
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Florian Echtler @ 2018-02-07 13:00 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin
As discussed previously, here's the third iteration of my patch to add
control functions for the SUR40 driver, with (hopefully) correct handling
of default values/module parameters, using the V4L2 control framework.
Best regards, Florian
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] add missing blob structure field for tag id
2018-02-07 13:00 [PATCH v3] add video controls for SUR40 driver Florian Echtler
@ 2018-02-07 13:00 ` Florian Echtler
2018-02-07 13:00 ` [PATCH 2/4] add default settings and module parameters for video controls Florian Echtler
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Florian Echtler @ 2018-02-07 13:00 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin, Florian Echtler
The SUR40 can recognize specific printed patterns directly in hardware;
this information (i.e. the pattern id) is present but currently unused
in the blob structure.
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
drivers/input/touchscreen/sur40.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index f16f835..8375b06 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -81,7 +81,10 @@ struct sur40_blob {
__le32 area; /* size in pixels/pressure (?) */
- u8 padding[32];
+ u8 padding[24];
+
+ __le32 tag_id; /* valid when type == 0x04 (SUR40_TAG) */
+ __le32 unknown;
} __packed;
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] add default settings and module parameters for video controls
2018-02-07 13:00 [PATCH v3] add video controls for SUR40 driver Florian Echtler
2018-02-07 13:00 ` [PATCH 1/4] add missing blob structure field for tag id Florian Echtler
@ 2018-02-07 13:00 ` Florian Echtler
2018-02-07 13:20 ` Hans Verkuil
2018-02-07 13:00 ` [PATCH 3/4] add panel register access functions Florian Echtler
2018-02-07 13:00 ` [PATCH 4/4] add video control handlers using V4L2 control framework Florian Echtler
3 siblings, 1 reply; 8+ messages in thread
From: Florian Echtler @ 2018-02-07 13:00 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin, Florian Echtler
This patch adds parameter definitions and module parameters for the four
userspace controls that the SUR40 can currently provide.
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
drivers/input/touchscreen/sur40.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index 8375b06..8a5b031 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -149,6 +149,34 @@ struct sur40_image_header {
#define SUR40_TOUCH 0x02
#define SUR40_TAG 0x04
+/* video controls */
+#define SUR40_BRIGHTNESS_MAX 0xFF
+#define SUR40_BRIGHTNESS_MIN 0x00
+#define SUR40_BRIGHTNESS_DEF 0xFF
+
+#define SUR40_CONTRAST_MAX 0x0F
+#define SUR40_CONTRAST_MIN 0x00
+#define SUR40_CONTRAST_DEF 0x0A
+
+#define SUR40_GAIN_MAX 0x09
+#define SUR40_GAIN_MIN 0x00
+#define SUR40_GAIN_DEF 0x08
+
+#define SUR40_BACKLIGHT_MAX 0x01
+#define SUR40_BACKLIGHT_MIN 0x00
+#define SUR40_BACKLIGHT_DEF 0x01
+
+/* module parameters */
+static uint brightness = SUR40_BRIGHTNESS_DEF;
+module_param(brightness, uint, 0644);
+MODULE_PARM_DESC(brightness, "set initial brightness");
+static uint contrast = SUR40_CONTRAST_DEF;
+module_param(contrast, uint, 0644);
+MODULE_PARM_DESC(contrast, "set initial contrast");
+static uint gain = SUR40_GAIN_DEF;
+module_param(gain, uint, 0644);
+MODULE_PARM_DESC(gain, "set initial gain");
+
static const struct v4l2_pix_format sur40_pix_format[] = {
{
.pixelformat = V4L2_TCH_FMT_TU08,
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] add panel register access functions
2018-02-07 13:00 [PATCH v3] add video controls for SUR40 driver Florian Echtler
2018-02-07 13:00 ` [PATCH 1/4] add missing blob structure field for tag id Florian Echtler
2018-02-07 13:00 ` [PATCH 2/4] add default settings and module parameters for video controls Florian Echtler
@ 2018-02-07 13:00 ` Florian Echtler
2018-02-07 13:00 ` [PATCH 4/4] add video control handlers using V4L2 control framework Florian Echtler
3 siblings, 0 replies; 8+ messages in thread
From: Florian Echtler @ 2018-02-07 13:00 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin, Florian Echtler
These functions provide write access to the internal LCD panel registers
which also control the sensor. They can be used to disable the
preprocessor, set the illumination brightness, and adjust gain/contrast
(which are stored together in one register internally called "vsvideo").
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
drivers/input/touchscreen/sur40.c | 75 +++++++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index 8a5b031..d6fa25e 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -251,6 +251,81 @@ static int sur40_command(struct sur40_state *dev,
0x00, index, buffer, size, 1000);
}
+/* poke a byte in the panel register space */
+static int sur40_poke(struct sur40_state *dev, u8 offset, u8 value)
+{
+ int result;
+ u8 index = 0x96; // 0xae for permanent write
+
+ result = usb_control_msg(dev->usbdev, usb_sndctrlpipe(dev->usbdev, 0),
+ SUR40_POKE, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
+ 0x32, index, NULL, 0, 1000);
+ if (result < 0)
+ goto error;
+ msleep(5);
+
+ result = usb_control_msg(dev->usbdev, usb_sndctrlpipe(dev->usbdev, 0),
+ SUR40_POKE, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
+ 0x72, offset, NULL, 0, 1000);
+ if (result < 0)
+ goto error;
+ msleep(5);
+
+ result = usb_control_msg(dev->usbdev, usb_sndctrlpipe(dev->usbdev, 0),
+ SUR40_POKE, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
+ 0xb2, value, NULL, 0, 1000);
+ if (result < 0)
+ goto error;
+ msleep(5);
+
+error:
+ return result;
+}
+
+static int sur40_set_preprocessor(struct sur40_state *dev, u8 value)
+{
+ u8 setting_07[2] = { 0x01, 0x00 };
+ u8 setting_17[2] = { 0x85, 0x80 };
+ int result;
+
+ if (value > 1)
+ return -ERANGE;
+
+ result = usb_control_msg(dev->usbdev, usb_sndctrlpipe(dev->usbdev, 0),
+ SUR40_POKE, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
+ 0x07, setting_07[value], NULL, 0, 1000);
+ if (result < 0)
+ goto error;
+ msleep(5);
+
+ result = usb_control_msg(dev->usbdev, usb_sndctrlpipe(dev->usbdev, 0),
+ SUR40_POKE, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
+ 0x17, setting_17[value], NULL, 0, 1000);
+ if (result < 0)
+ goto error;
+ msleep(5);
+
+error:
+ return result;
+}
+
+static void sur40_set_vsvideo(struct sur40_state *handle, u8 value)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ sur40_poke(handle, 0x1c+i, value);
+ handle->vsvideo = value;
+}
+
+static void sur40_set_irlevel(struct sur40_state *handle, u8 value)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ sur40_poke(handle, 0x08+(2*i), value);
+}
+
/* Initialization routine, called from sur40_open */
static int sur40_init(struct sur40_state *dev)
{
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] add video control handlers using V4L2 control framework
2018-02-07 13:00 [PATCH v3] add video controls for SUR40 driver Florian Echtler
` (2 preceding siblings ...)
2018-02-07 13:00 ` [PATCH 3/4] add panel register access functions Florian Echtler
@ 2018-02-07 13:00 ` Florian Echtler
2018-02-07 13:22 ` Hans Verkuil
3 siblings, 1 reply; 8+ messages in thread
From: Florian Echtler @ 2018-02-07 13:00 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin, Florian Echtler
This patch registers four standard control handlers using the corresponding
V4L2 framework.
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
drivers/input/touchscreen/sur40.c | 64 +++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index d6fa25e..b92325b 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -38,6 +38,7 @@
#include <media/v4l2-device.h>
#include <media/v4l2-dev.h>
#include <media/v4l2-ioctl.h>
+#include <media/v4l2-ctrls.h>
#include <media/videobuf2-v4l2.h>
#include <media/videobuf2-dma-sg.h>
@@ -209,6 +210,7 @@ struct sur40_state {
struct video_device vdev;
struct mutex lock;
struct v4l2_pix_format pix_fmt;
+ struct v4l2_ctrl_handler ctrls;
struct vb2_queue queue;
struct list_head buf_list;
@@ -218,6 +220,7 @@ struct sur40_state {
struct sur40_data *bulk_in_buffer;
size_t bulk_in_size;
u8 bulk_in_epaddr;
+ u8 vsvideo;
char phys[64];
};
@@ -231,6 +234,11 @@ struct sur40_buffer {
static const struct video_device sur40_video_device;
static const struct vb2_queue sur40_queue;
static void sur40_process_video(struct sur40_state *sur40);
+static int sur40_s_ctrl(struct v4l2_ctrl *ctrl);
+
+static const struct v4l2_ctrl_ops sur40_ctrl_ops = {
+ .s_ctrl = sur40_s_ctrl,
+};
/*
* Note: an earlier, non-public version of this driver used USB_RECIP_ENDPOINT
@@ -737,6 +745,36 @@ static int sur40_probe(struct usb_interface *interface,
sur40->vdev.queue = &sur40->queue;
video_set_drvdata(&sur40->vdev, sur40);
+ /* initialize the control handler for 4 controls */
+ v4l2_ctrl_handler_init(&sur40->ctrls, 4);
+ sur40->v4l2.ctrl_handler = &sur40->ctrls;
+ sur40->vsvideo = (SUR40_CONTRAST_DEF << 4) | SUR40_GAIN_DEF;
+
+ v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_BRIGHTNESS,
+ SUR40_BRIGHTNESS_MIN, SUR40_BRIGHTNESS_MAX, 1, clamp(brightness,
+ (uint)SUR40_BRIGHTNESS_MIN, (uint)SUR40_BRIGHTNESS_MAX));
+
+ v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_CONTRAST,
+ SUR40_CONTRAST_MIN, SUR40_CONTRAST_MAX, 1, clamp(contrast,
+ (uint)SUR40_CONTRAST_MIN, (uint)SUR40_CONTRAST_MAX));
+
+ v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_GAIN,
+ SUR40_GAIN_MIN, SUR40_GAIN_MAX, 1, clamp(gain,
+ (uint)SUR40_GAIN_MIN, (uint)SUR40_GAIN_MAX));
+
+ v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops,
+ V4L2_CID_BACKLIGHT_COMPENSATION, SUR40_BACKLIGHT_MIN,
+ SUR40_BACKLIGHT_MAX, 1, SUR40_BACKLIGHT_DEF);
+
+ v4l2_ctrl_handler_setup(&sur40->ctrls);
+
+ if (sur40->ctrls.error) {
+ dev_err(&interface->dev,
+ "Unable to register video controls.");
+ v4l2_ctrl_handler_free(&sur40->ctrls);
+ goto err_unreg_v4l2;
+ }
+
error = video_register_device(&sur40->vdev, VFL_TYPE_TOUCH, -1);
if (error) {
dev_err(&interface->dev,
@@ -769,6 +807,7 @@ static void sur40_disconnect(struct usb_interface *interface)
{
struct sur40_state *sur40 = usb_get_intfdata(interface);
+ v4l2_ctrl_handler_free(&sur40->ctrls);
video_unregister_device(&sur40->vdev);
v4l2_device_unregister(&sur40->v4l2);
@@ -962,6 +1001,31 @@ static int sur40_vidioc_g_fmt(struct file *file, void *priv,
return 0;
}
+static int sur40_s_ctrl(struct v4l2_ctrl *ctrl)
+{
+ struct sur40_state *sur40 = container_of(ctrl->handler,
+ struct sur40_state, ctrls);
+ u8 value = sur40->vsvideo;
+
+ switch (ctrl->id) {
+ case V4L2_CID_BRIGHTNESS:
+ sur40_set_irlevel(sur40, ctrl->val);
+ break;
+ case V4L2_CID_CONTRAST:
+ value = (value & 0x0F) | (ctrl->val << 4);
+ sur40_set_vsvideo(sur40, value);
+ break;
+ case V4L2_CID_GAIN:
+ value = (value & 0xF0) | (ctrl->val);
+ sur40_set_vsvideo(sur40, value);
+ break;
+ case V4L2_CID_BACKLIGHT_COMPENSATION:
+ sur40_set_preprocessor(sur40, ctrl->val);
+ break;
+ }
+ return 0;
+}
+
static int sur40_ioctl_parm(struct file *file, void *priv,
struct v4l2_streamparm *p)
{
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] add default settings and module parameters for video controls
2018-02-07 13:00 ` [PATCH 2/4] add default settings and module parameters for video controls Florian Echtler
@ 2018-02-07 13:20 ` Hans Verkuil
0 siblings, 0 replies; 8+ messages in thread
From: Hans Verkuil @ 2018-02-07 13:20 UTC (permalink / raw)
To: Florian Echtler, linux-media; +Cc: linux-input, modin
On 02/07/18 14:00, Florian Echtler wrote:
> This patch adds parameter definitions and module parameters for the four
> userspace controls that the SUR40 can currently provide.
>
> Signed-off-by: Florian Echtler <floe@butterbrot.org>
> ---
> drivers/input/touchscreen/sur40.c | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
> index 8375b06..8a5b031 100644
> --- a/drivers/input/touchscreen/sur40.c
> +++ b/drivers/input/touchscreen/sur40.c
> @@ -149,6 +149,34 @@ struct sur40_image_header {
> #define SUR40_TOUCH 0x02
> #define SUR40_TAG 0x04
>
> +/* video controls */
> +#define SUR40_BRIGHTNESS_MAX 0xFF
> +#define SUR40_BRIGHTNESS_MIN 0x00
> +#define SUR40_BRIGHTNESS_DEF 0xFF
> +
> +#define SUR40_CONTRAST_MAX 0x0F
> +#define SUR40_CONTRAST_MIN 0x00
> +#define SUR40_CONTRAST_DEF 0x0A
It's kernel style to use lowercase hex values.
> +
> +#define SUR40_GAIN_MAX 0x09
> +#define SUR40_GAIN_MIN 0x00
> +#define SUR40_GAIN_DEF 0x08
> +
> +#define SUR40_BACKLIGHT_MAX 0x01
> +#define SUR40_BACKLIGHT_MIN 0x00
> +#define SUR40_BACKLIGHT_DEF 0x01
> +
> +/* module parameters */
> +static uint brightness = SUR40_BRIGHTNESS_DEF;
> +module_param(brightness, uint, 0644);
> +MODULE_PARM_DESC(brightness, "set initial brightness");
No range in the param description? I think you can do some macro magic so you
can use the MIN/MAX defines in the string.
Regards,
Hans
> +static uint contrast = SUR40_CONTRAST_DEF;
> +module_param(contrast, uint, 0644);
> +MODULE_PARM_DESC(contrast, "set initial contrast");
> +static uint gain = SUR40_GAIN_DEF;
> +module_param(gain, uint, 0644);
> +MODULE_PARM_DESC(gain, "set initial gain");
> +
> static const struct v4l2_pix_format sur40_pix_format[] = {
> {
> .pixelformat = V4L2_TCH_FMT_TU08,
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] add video control handlers using V4L2 control framework
2018-02-07 13:00 ` [PATCH 4/4] add video control handlers using V4L2 control framework Florian Echtler
@ 2018-02-07 13:22 ` Hans Verkuil
0 siblings, 0 replies; 8+ messages in thread
From: Hans Verkuil @ 2018-02-07 13:22 UTC (permalink / raw)
To: Florian Echtler, linux-media; +Cc: linux-input, modin
On 02/07/18 14:00, Florian Echtler wrote:
> This patch registers four standard control handlers using the corresponding
> V4L2 framework.
>
> Signed-off-by: Florian Echtler <floe@butterbrot.org>
> ---
> drivers/input/touchscreen/sur40.c | 64 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 64 insertions(+)
>
> diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
> index d6fa25e..b92325b 100644
> --- a/drivers/input/touchscreen/sur40.c
> +++ b/drivers/input/touchscreen/sur40.c
> @@ -38,6 +38,7 @@
> #include <media/v4l2-device.h>
> #include <media/v4l2-dev.h>
> #include <media/v4l2-ioctl.h>
> +#include <media/v4l2-ctrls.h>
> #include <media/videobuf2-v4l2.h>
> #include <media/videobuf2-dma-sg.h>
>
> @@ -209,6 +210,7 @@ struct sur40_state {
> struct video_device vdev;
> struct mutex lock;
> struct v4l2_pix_format pix_fmt;
> + struct v4l2_ctrl_handler ctrls;
Please rename this to either hdl or ctrl_handler. 'ctrls' is confusing.
>
> struct vb2_queue queue;
> struct list_head buf_list;
> @@ -218,6 +220,7 @@ struct sur40_state {
> struct sur40_data *bulk_in_buffer;
> size_t bulk_in_size;
> u8 bulk_in_epaddr;
> + u8 vsvideo;
>
> char phys[64];
> };
> @@ -231,6 +234,11 @@ struct sur40_buffer {
> static const struct video_device sur40_video_device;
> static const struct vb2_queue sur40_queue;
> static void sur40_process_video(struct sur40_state *sur40);
> +static int sur40_s_ctrl(struct v4l2_ctrl *ctrl);
> +
> +static const struct v4l2_ctrl_ops sur40_ctrl_ops = {
> + .s_ctrl = sur40_s_ctrl,
> +};
>
> /*
> * Note: an earlier, non-public version of this driver used USB_RECIP_ENDPOINT
> @@ -737,6 +745,36 @@ static int sur40_probe(struct usb_interface *interface,
> sur40->vdev.queue = &sur40->queue;
> video_set_drvdata(&sur40->vdev, sur40);
>
> + /* initialize the control handler for 4 controls */
> + v4l2_ctrl_handler_init(&sur40->ctrls, 4);
> + sur40->v4l2.ctrl_handler = &sur40->ctrls;
> + sur40->vsvideo = (SUR40_CONTRAST_DEF << 4) | SUR40_GAIN_DEF;
> +
> + v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_BRIGHTNESS,
> + SUR40_BRIGHTNESS_MIN, SUR40_BRIGHTNESS_MAX, 1, clamp(brightness,
> + (uint)SUR40_BRIGHTNESS_MIN, (uint)SUR40_BRIGHTNESS_MAX));
> +
> + v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_CONTRAST,
> + SUR40_CONTRAST_MIN, SUR40_CONTRAST_MAX, 1, clamp(contrast,
> + (uint)SUR40_CONTRAST_MIN, (uint)SUR40_CONTRAST_MAX));
> +
> + v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops, V4L2_CID_GAIN,
> + SUR40_GAIN_MIN, SUR40_GAIN_MAX, 1, clamp(gain,
> + (uint)SUR40_GAIN_MIN, (uint)SUR40_GAIN_MAX));
> +
> + v4l2_ctrl_new_std(&sur40->ctrls, &sur40_ctrl_ops,
> + V4L2_CID_BACKLIGHT_COMPENSATION, SUR40_BACKLIGHT_MIN,
> + SUR40_BACKLIGHT_MAX, 1, SUR40_BACKLIGHT_DEF);
> +
> + v4l2_ctrl_handler_setup(&sur40->ctrls);
> +
> + if (sur40->ctrls.error) {
> + dev_err(&interface->dev,
> + "Unable to register video controls.");
> + v4l2_ctrl_handler_free(&sur40->ctrls);
> + goto err_unreg_v4l2;
> + }
> +
> error = video_register_device(&sur40->vdev, VFL_TYPE_TOUCH, -1);
> if (error) {
> dev_err(&interface->dev,
> @@ -769,6 +807,7 @@ static void sur40_disconnect(struct usb_interface *interface)
> {
> struct sur40_state *sur40 = usb_get_intfdata(interface);
>
> + v4l2_ctrl_handler_free(&sur40->ctrls);
> video_unregister_device(&sur40->vdev);
> v4l2_device_unregister(&sur40->v4l2);
>
> @@ -962,6 +1001,31 @@ static int sur40_vidioc_g_fmt(struct file *file, void *priv,
> return 0;
> }
>
> +static int sur40_s_ctrl(struct v4l2_ctrl *ctrl)
> +{
> + struct sur40_state *sur40 = container_of(ctrl->handler,
> + struct sur40_state, ctrls);
> + u8 value = sur40->vsvideo;
> +
> + switch (ctrl->id) {
> + case V4L2_CID_BRIGHTNESS:
> + sur40_set_irlevel(sur40, ctrl->val);
> + break;
> + case V4L2_CID_CONTRAST:
> + value = (value & 0x0F) | (ctrl->val << 4);
> + sur40_set_vsvideo(sur40, value);
> + break;
> + case V4L2_CID_GAIN:
> + value = (value & 0xF0) | (ctrl->val);
> + sur40_set_vsvideo(sur40, value);
> + break;
> + case V4L2_CID_BACKLIGHT_COMPENSATION:
> + sur40_set_preprocessor(sur40, ctrl->val);
> + break;
> + }
> + return 0;
> +}
> +
> static int sur40_ioctl_parm(struct file *file, void *priv,
> struct v4l2_streamparm *p)
> {
>
Looks good otherwise.
Regards,
Hans
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/4] add default settings and module parameters for video controls
2018-02-08 8:43 [PATCH v4] add video controls for SUR40 driver Florian Echtler
@ 2018-02-08 8:43 ` Florian Echtler
0 siblings, 0 replies; 8+ messages in thread
From: Florian Echtler @ 2018-02-08 8:43 UTC (permalink / raw)
To: hverkuil, linux-media; +Cc: linux-input, modin, Florian Echtler
This patch adds parameter definitions and module parameters for the four
userspace controls that the SUR40 can currently provide.
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
drivers/input/touchscreen/sur40.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index 8375b06..8a5b031 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -149,6 +149,40 @@ struct sur40_image_header {
#define SUR40_TOUCH 0x02
#define SUR40_TAG 0x04
+/* video controls */
+#define SUR40_BRIGHTNESS_MAX 0xff
+#define SUR40_BRIGHTNESS_MIN 0x00
+#define SUR40_BRIGHTNESS_DEF 0xff
+
+#define SUR40_CONTRAST_MAX 0x0f
+#define SUR40_CONTRAST_MIN 0x00
+#define SUR40_CONTRAST_DEF 0x0a
+
+#define SUR40_GAIN_MAX 0x09
+#define SUR40_GAIN_MIN 0x00
+#define SUR40_GAIN_DEF 0x08
+
+#define SUR40_BACKLIGHT_MAX 0x01
+#define SUR40_BACKLIGHT_MIN 0x00
+#define SUR40_BACKLIGHT_DEF 0x01
+
+#define sur40_str(s) #s
+#define SUR40_PARAM_RANGE(lo, hi) " (range " sur40_str(lo) "-" sur40_str(hi) ")"
+
+/* module parameters */
+static uint brightness = SUR40_BRIGHTNESS_DEF;
+module_param(brightness, uint, 0644);
+MODULE_PARM_DESC(brightness, "set initial brightness"
+ SUR40_PARAM_RANGE(SUR40_BRIGHTNESS_MIN, SUR40_BRIGHTNESS_MAX));
+static uint contrast = SUR40_CONTRAST_DEF;
+module_param(contrast, uint, 0644);
+MODULE_PARM_DESC(contrast, "set initial contrast"
+ SUR40_PARAM_RANGE(SUR40_CONTRAST_MIN, SUR40_CONTRAST_MAX));
+static uint gain = SUR40_GAIN_DEF;
+module_param(gain, uint, 0644);
+MODULE_PARM_DESC(gain, "set initial gain"
+ SUR40_PARAM_RANGE(SUR40_GAIN_MIN, SUR40_GAIN_MAX));
+
static const struct v4l2_pix_format sur40_pix_format[] = {
{
.pixelformat = V4L2_TCH_FMT_TU08,
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-02-08 8:44 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-07 13:00 [PATCH v3] add video controls for SUR40 driver Florian Echtler
2018-02-07 13:00 ` [PATCH 1/4] add missing blob structure field for tag id Florian Echtler
2018-02-07 13:00 ` [PATCH 2/4] add default settings and module parameters for video controls Florian Echtler
2018-02-07 13:20 ` Hans Verkuil
2018-02-07 13:00 ` [PATCH 3/4] add panel register access functions Florian Echtler
2018-02-07 13:00 ` [PATCH 4/4] add video control handlers using V4L2 control framework Florian Echtler
2018-02-07 13:22 ` Hans Verkuil
-- strict thread matches above, loose matches on Subject: below --
2018-02-08 8:43 [PATCH v4] add video controls for SUR40 driver Florian Echtler
2018-02-08 8:43 ` [PATCH 2/4] add default settings and module parameters for video controls Florian Echtler
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).