提交 06b3d3f3 编写于 作者: N Nick Dyer 提交者: Mauro Carvalho Chehab

[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: NNick Dyer <nick@shmanahar.org>
Signed-off-by: NHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@s-opensource.com>
Acked-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
上级 566d533a
...@@ -135,6 +135,7 @@ struct t9_range { ...@@ -135,6 +135,7 @@ struct t9_range {
/* MXT_DEBUG_DIAGNOSTIC_T37 */ /* MXT_DEBUG_DIAGNOSTIC_T37 */
#define MXT_DIAGNOSTIC_PAGEUP 0x01 #define MXT_DIAGNOSTIC_PAGEUP 0x01
#define MXT_DIAGNOSTIC_DELTAS 0x10 #define MXT_DIAGNOSTIC_DELTAS 0x10
#define MXT_DIAGNOSTIC_REFS 0x11
#define MXT_DIAGNOSTIC_SIZE 128 #define MXT_DIAGNOSTIC_SIZE 128
#define MXT_FAMILY_1386 160 #define MXT_FAMILY_1386 160
...@@ -249,6 +250,12 @@ struct mxt_dbg { ...@@ -249,6 +250,12 @@ struct mxt_dbg {
int input; 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 = { static const struct v4l2_file_operations mxt_video_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = v4l2_fh_open, .open = v4l2_fh_open,
...@@ -2273,6 +2280,7 @@ static void mxt_buffer_queue(struct vb2_buffer *vb) ...@@ -2273,6 +2280,7 @@ static void mxt_buffer_queue(struct vb2_buffer *vb)
struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue); struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue);
u16 *ptr; u16 *ptr;
int ret; int ret;
u8 mode;
ptr = vb2_plane_vaddr(vb, 0); ptr = vb2_plane_vaddr(vb, 0);
if (!ptr) { if (!ptr) {
...@@ -2280,7 +2288,18 @@ static void mxt_buffer_queue(struct vb2_buffer *vb) ...@@ -2280,7 +2288,18 @@ static void mxt_buffer_queue(struct vb2_buffer *vb)
goto fault; 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) if (ret)
goto fault; goto fault;
...@@ -2325,11 +2344,21 @@ static int mxt_vidioc_querycap(struct file *file, void *priv, ...@@ -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, static int mxt_vidioc_enum_input(struct file *file, void *priv,
struct v4l2_input *i) struct v4l2_input *i)
{ {
if (i->index > 0) if (i->index >= MXT_V4L_INPUT_MAX)
return -EINVAL; return -EINVAL;
i->type = V4L2_INPUT_TYPE_TOUCH; 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; return 0;
} }
...@@ -2337,12 +2366,16 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i) ...@@ -2337,12 +2366,16 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i)
{ {
struct v4l2_pix_format *f = &data->dbg.format; struct v4l2_pix_format *f = &data->dbg.format;
if (i > 0) if (i >= MXT_V4L_INPUT_MAX)
return -EINVAL; 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->width = data->xy_switch ? data->ysize : data->xsize;
f->height = data->xy_switch ? data->xsize : data->ysize; f->height = data->xy_switch ? data->xsize : data->ysize;
f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
f->field = V4L2_FIELD_NONE; f->field = V4L2_FIELD_NONE;
f->colorspace = V4L2_COLORSPACE_RAW; f->colorspace = V4L2_COLORSPACE_RAW;
f->bytesperline = f->width * sizeof(u16); f->bytesperline = f->width * sizeof(u16);
...@@ -2383,7 +2416,19 @@ static int mxt_vidioc_enum_fmt(struct file *file, void *priv, ...@@ -2383,7 +2416,19 @@ static int mxt_vidioc_enum_fmt(struct file *file, void *priv,
if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL; 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; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册