[media] Input: atmel_mxt_ts - add support for reference data
There are different datatypes available from a maXTouch chip. Add support to retrieve reference data as well. Signed-off-by: Nick Dyer <nick@shmanahar.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
566d533a4b
commit
06b3d3f38c
|
@ -135,6 +135,7 @@ struct t9_range {
|
|||
/* MXT_DEBUG_DIAGNOSTIC_T37 */
|
||||
#define MXT_DIAGNOSTIC_PAGEUP 0x01
|
||||
#define MXT_DIAGNOSTIC_DELTAS 0x10
|
||||
#define MXT_DIAGNOSTIC_REFS 0x11
|
||||
#define MXT_DIAGNOSTIC_SIZE 128
|
||||
|
||||
#define MXT_FAMILY_1386 160
|
||||
|
@ -249,6 +250,12 @@ struct mxt_dbg {
|
|||
int input;
|
||||
};
|
||||
|
||||
enum v4l_dbg_inputs {
|
||||
MXT_V4L_INPUT_DELTAS,
|
||||
MXT_V4L_INPUT_REFS,
|
||||
MXT_V4L_INPUT_MAX,
|
||||
};
|
||||
|
||||
static const struct v4l2_file_operations mxt_video_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = v4l2_fh_open,
|
||||
|
@ -2273,6 +2280,7 @@ static void mxt_buffer_queue(struct vb2_buffer *vb)
|
|||
struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue);
|
||||
u16 *ptr;
|
||||
int ret;
|
||||
u8 mode;
|
||||
|
||||
ptr = vb2_plane_vaddr(vb, 0);
|
||||
if (!ptr) {
|
||||
|
@ -2280,7 +2288,18 @@ static void mxt_buffer_queue(struct vb2_buffer *vb)
|
|||
goto fault;
|
||||
}
|
||||
|
||||
ret = mxt_read_diagnostic_debug(data, MXT_DIAGNOSTIC_DELTAS, ptr);
|
||||
switch (data->dbg.input) {
|
||||
case MXT_V4L_INPUT_DELTAS:
|
||||
default:
|
||||
mode = MXT_DIAGNOSTIC_DELTAS;
|
||||
break;
|
||||
|
||||
case MXT_V4L_INPUT_REFS:
|
||||
mode = MXT_DIAGNOSTIC_REFS;
|
||||
break;
|
||||
}
|
||||
|
||||
ret = mxt_read_diagnostic_debug(data, mode, ptr);
|
||||
if (ret)
|
||||
goto fault;
|
||||
|
||||
|
@ -2325,11 +2344,21 @@ static int mxt_vidioc_querycap(struct file *file, void *priv,
|
|||
static int mxt_vidioc_enum_input(struct file *file, void *priv,
|
||||
struct v4l2_input *i)
|
||||
{
|
||||
if (i->index > 0)
|
||||
if (i->index >= MXT_V4L_INPUT_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
i->type = V4L2_INPUT_TYPE_TOUCH;
|
||||
strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name));
|
||||
|
||||
switch (i->index) {
|
||||
case MXT_V4L_INPUT_REFS:
|
||||
strlcpy(i->name, "Mutual Capacitance References",
|
||||
sizeof(i->name));
|
||||
break;
|
||||
case MXT_V4L_INPUT_DELTAS:
|
||||
strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2337,12 +2366,16 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i)
|
|||
{
|
||||
struct v4l2_pix_format *f = &data->dbg.format;
|
||||
|
||||
if (i > 0)
|
||||
if (i >= MXT_V4L_INPUT_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
if (i == MXT_V4L_INPUT_DELTAS)
|
||||
f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
|
||||
else
|
||||
f->pixelformat = V4L2_TCH_FMT_TU16;
|
||||
|
||||
f->width = data->xy_switch ? data->ysize : data->xsize;
|
||||
f->height = data->xy_switch ? data->xsize : data->ysize;
|
||||
f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
|
||||
f->field = V4L2_FIELD_NONE;
|
||||
f->colorspace = V4L2_COLORSPACE_RAW;
|
||||
f->bytesperline = f->width * sizeof(u16);
|
||||
|
@ -2383,7 +2416,19 @@ static int mxt_vidioc_enum_fmt(struct file *file, void *priv,
|
|||
if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
|
||||
fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
|
||||
switch (fmt->index) {
|
||||
case 0:
|
||||
fmt->pixelformat = V4L2_TCH_FMT_TU16;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue