Commit b1a19c01 authored by Frank Schäfer's avatar Frank Schäfer Committed by Mauro Carvalho Chehab

[media] gspca_pac7302: add sharpness control

The Windows driver uses page 0 register 0xb6 for sharpness adjustment.
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent db43b9ca
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
/* /*
* Some documentation about various registers as determined by trial and error. * Some documentation about various registers as determined by trial and error.
* *
* Register page 0:
*
* Address Description
* 0xb6 Sharpness control (bits 0-4)
*
* Register page 1: * Register page 1:
* *
* Address Description * Address Description
...@@ -66,6 +71,7 @@ ...@@ -66,6 +71,7 @@
* -----+------------+--------------------------------------------------- * -----+------------+---------------------------------------------------
* 0 | 0x0f..0x20 | setcolors() * 0 | 0x0f..0x20 | setcolors()
* 0 | 0xa2..0xab | setbrightcont() * 0 | 0xa2..0xab | setbrightcont()
* 0 | 0xb6 | setsharpness()
* 0 | 0xc5 | setredbalance() * 0 | 0xc5 | setredbalance()
* 0 | 0xc6 | setwhitebalance() * 0 | 0xc6 | setwhitebalance()
* 0 | 0xc7 | setbluebalance() * 0 | 0xc7 | setbluebalance()
...@@ -109,6 +115,7 @@ struct sd { ...@@ -109,6 +115,7 @@ struct sd {
struct v4l2_ctrl *hflip; struct v4l2_ctrl *hflip;
struct v4l2_ctrl *vflip; struct v4l2_ctrl *vflip;
}; };
struct v4l2_ctrl *sharpness;
u8 flags; u8 flags;
#define FL_HFLIP 0x01 /* mirrored by default */ #define FL_HFLIP 0x01 /* mirrored by default */
#define FL_VFLIP 0x02 /* vertical flipped by default */ #define FL_VFLIP 0x02 /* vertical flipped by default */
...@@ -531,6 +538,16 @@ static void sethvflip(struct gspca_dev *gspca_dev) ...@@ -531,6 +538,16 @@ static void sethvflip(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0x11, 0x01); reg_w(gspca_dev, 0x11, 0x01);
} }
static void setsharpness(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
reg_w(gspca_dev, 0xff, 0x00); /* page 0 */
reg_w(gspca_dev, 0xb6, sd->sharpness->val);
reg_w(gspca_dev, 0xdc, 0x01);
}
/* this function is called at probe and resume time for pac7302 */ /* this function is called at probe and resume time for pac7302 */
static int sd_init(struct gspca_dev *gspca_dev) static int sd_init(struct gspca_dev *gspca_dev)
{ {
...@@ -584,6 +601,9 @@ static int sd_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -584,6 +601,9 @@ static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_HFLIP: case V4L2_CID_HFLIP:
sethvflip(gspca_dev); sethvflip(gspca_dev);
break; break;
case V4L2_CID_SHARPNESS:
setsharpness(gspca_dev);
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -601,7 +621,7 @@ static int sd_init_controls(struct gspca_dev *gspca_dev) ...@@ -601,7 +621,7 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
gspca_dev->vdev.ctrl_handler = hdl; gspca_dev->vdev.ctrl_handler = hdl;
v4l2_ctrl_handler_init(hdl, 11); v4l2_ctrl_handler_init(hdl, 12);
sd->brightness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, sd->brightness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_BRIGHTNESS, 0, 32, 1, 16); V4L2_CID_BRIGHTNESS, 0, 32, 1, 16);
...@@ -632,6 +652,9 @@ static int sd_init_controls(struct gspca_dev *gspca_dev) ...@@ -632,6 +652,9 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_VFLIP, 0, 1, 1, 0); V4L2_CID_VFLIP, 0, 1, 1, 0);
sd->sharpness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
V4L2_CID_SHARPNESS, 0, 15, 1, 8);
if (hdl->error) { if (hdl->error) {
pr_err("Could not initialize controls\n"); pr_err("Could not initialize controls\n");
return hdl->error; return hdl->error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment