gspca pac7302/pac7311: separate hvflip
PATCH 12/21 gspca pac7302/pac7311: separate hvflip
From: Márton Németh <[email protected]>
Separate the horizontal and vertical flip control. Remove the run-time decision for PAC7302 and PAC7311 sensors.
Signed-off-by Márton Németh <[email protected]>
Cc Thomas Kaiser <[email protected]>
Cc Theodore Kilgore <[email protected]>
Cc Kyle Guinn <[email protected]>
---
drivers/media/video/gspca/pac7311.c +75 -30
@@ -91,10 +91,14 @@ static int pac7302_sd_setcolors(struct gstatic int pac7302_sd_getcolors (struct gspca_dev *gspca_dev,__s32 *val);static int sd_setautogain (struct gspca_dev *gspca_dev,__s32 val);static int sd_getautogain (struct gspca_dev *gspca_dev,__s32 *val); -static int sd_sethflip (struct gspca_dev *gspca_dev,__s32 val); -static int sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val); -static int sd_setvflip (struct gspca_dev *gspca_dev,__s32 val); -static int sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val); +static int pac7302_sd_sethflip (struct gspca_dev *gspca_dev,__s32 val); +static int pac7311_sd_sethflip (struct gspca_dev *gspca_dev,__s32 val); +static int pac7302_sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val); +static int pac7311_sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val); +static int pac7302_sd_setvflip (struct gspca_dev *gspca_dev,__s32 val); +static int pac7311_sd_setvflip (struct gspca_dev *gspca_dev,__s32 val); +static int pac7302_sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val); +static int pac7311_sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val);static int sd_setgain (struct gspca_dev *gspca_dev,__s32 val);static int sd_getgain (struct gspca_dev *gspca_dev,__s32 *val);static int sd_setexposure (struct gspca_dev *gspca_dev,__s32 val);
@@ -207,8 +211,8 @@ static struct ctrl pac7302_sd_ctrls[] =#define HFLIP_DEF 0 .default_value = HFLIP_DEF, }, - .set = sd_sethflip, - .get = sd_gethflip, + .set = pac7302_sd_sethflip, + .get = pac7302_sd_gethflip, }, { {
@@ -221,8 +225,8 @@ static struct ctrl pac7302_sd_ctrls[] =#define VFLIP_DEF 0 .default_value = VFLIP_DEF, }, - .set = sd_setvflip, - .get = sd_getvflip, + .set = pac7302_sd_setvflip, + .get = pac7302_sd_getvflip, }, };
@@ -301,8 +305,8 @@ static struct ctrl pac7311_sd_ctrls[] =#define HFLIP_DEF 0 .default_value = HFLIP_DEF, }, - .set = sd_sethflip, - .get = sd_gethflip, + .set = pac7311_sd_sethflip, + .get = pac7311_sd_gethflip, }, { {
@@ -315,8 +319,8 @@ static struct ctrl pac7311_sd_ctrls[] =#define VFLIP_DEF 0 .default_value = VFLIP_DEF, }, - .set = sd_setvflip, - .get = sd_getvflip, + .set = pac7311_sd_setvflip, + .get = pac7311_sd_getvflip, }, };
@@ -771,20 +775,25 @@ static void setexposure(struct gspca_devreg_w (gspca_dev,0x11 ,0x01 ); } -static void sethvflip (struct gspca_dev *gspca_dev) +static void pac7302_sethvflip (struct gspca_dev *gspca_dev) {struct sd *sd = (struct sd *) gspca_dev;__u8 data; -if (sd->sensor ==SENSOR_PAC7302 ) { -reg_w (gspca_dev,0xff ,0x03 );/* page 3 */ - data = (sd->hflip ?0x08 :0x00 ) - | (sd->vflip ?0x04 :0x00 ); - }else { -reg_w (gspca_dev,0xff ,0x04 );/* page 4 */ - data = (sd->hflip ?0x04 :0x00 ) - | (sd->vflip ?0x08 :0x00 ); - } +reg_w (gspca_dev,0xff ,0x03 );/* page 3 */ + data = (sd->hflip ?0x08 :0x00 ) | (sd->vflip ?0x04 :0x00 ); +reg_w (gspca_dev,0x21 , data); +/* load registers to sensor (Bit 0, auto clear) */ +reg_w (gspca_dev,0x11 ,0x01 ); +} + +static void pac7311_sethvflip (struct gspca_dev *gspca_dev) +{ +struct sd *sd = (struct sd *) gspca_dev; +__u8 data; + +reg_w (gspca_dev,0xff ,0x04 );/* page 4 */ + data = (sd->hflip ?0x04 :0x00 ) | (sd->vflip ?0x08 :0x00 );reg_w (gspca_dev,0x21 , data);/* load registers to sensor (Bit 0, auto clear) */ reg_w (gspca_dev,0x11 ,0x01 );
@@ -817,7 +826,7 @@ static int pac7302_sd_start(struct gspcapac7302_setcolors (gspca_dev);setgain (gspca_dev);setexposure (gspca_dev); -sethvflip (gspca_dev); +pac7302_sethvflip (gspca_dev);/* only resolution 640x480 is supported for pac7302 */
@@ -842,7 +851,7 @@ static int pac7311_sd_start(struct gspcapac7311_setcontrast (gspca_dev);setgain (gspca_dev);setexposure (gspca_dev); -sethvflip (gspca_dev); +pac7311_sethvflip (gspca_dev);/* set correct resolution */ switch (gspca_dev->cam.cam_mode[(int ) gspca_dev->curr_mode].priv) {
@@ -1255,17 +1264,27 @@ static int sd_getautogain(struct gspca_dreturn 0 ; } -static int sd_sethflip (struct gspca_dev *gspca_dev,__s32 val) +static int pac7302_sd_sethflip (struct gspca_dev *gspca_dev,__s32 val) +{ +struct sd *sd = (struct sd *) gspca_dev; + + sd->hflip = val; +if (gspca_dev->streaming) +pac7302_sethvflip (gspca_dev); +return 0 ; +} + +static int pac7311_sd_sethflip (struct gspca_dev *gspca_dev,__s32 val) {struct sd *sd = (struct sd *) gspca_dev; sd->hflip = val;if (gspca_dev->streaming) -sethvflip (gspca_dev); +pac7311_sethvflip (gspca_dev);return 0 ; } -static int sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val) +static int pac7302_sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val) {struct sd *sd = (struct sd *) gspca_dev;
@@ -1273,17 +1292,43 @@ static int sd_gethflip(struct gspca_devreturn 0 ; } -static int sd_setvflip (struct gspca_dev *gspca_dev,__s32 val) +static int pac7311_sd_gethflip (struct gspca_dev *gspca_dev,__s32 *val) +{ +struct sd *sd = (struct sd *) gspca_dev; + + *val = sd->hflip; +return 0 ; +} + +static int pac7302_sd_setvflip (struct gspca_dev *gspca_dev,__s32 val) +{ +struct sd *sd = (struct sd *) gspca_dev; + + sd->vflip = val; +if (gspca_dev->streaming) +pac7302_sethvflip (gspca_dev); +return 0 ; +} + +static int pac7311_sd_setvflip (struct gspca_dev *gspca_dev,__s32 val) {struct sd *sd = (struct sd *) gspca_dev; sd->vflip = val;if (gspca_dev->streaming) -sethvflip (gspca_dev); +pac7311_sethvflip (gspca_dev); +return 0 ; +} + +static int pac7302_sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val) +{ +struct sd *sd = (struct sd *) gspca_dev; + + *val = sd->vflip;return 0 ; } -static int sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val) +static int pac7311_sd_getvflip (struct gspca_dev *gspca_dev,__s32 *val) {struct sd *sd = (struct sd *) gspca_dev;