Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124182
b: refs/heads/master
c: 6a1acc3
h: refs/heads/master
v: v3
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed Dec 29, 2008
1 parent 8d5a606 commit 6ae1208
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 600bd7f0edee0f9687c3c77e6fe63c74452acbfa
refs/heads/master: 6a1acc3bc5144e004996029b20e46e6020d128a7
15 changes: 12 additions & 3 deletions trunk/drivers/media/video/em28xx/em28xx-cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -1312,11 +1312,13 @@ void em28xx_pre_card_setup(struct em28xx *dev)
{
int rc;

rc = em28xx_read_reg(dev, EM2880_R04_GPO);
if (rc >= 0)
dev->reg_gpo = rc;
/* Set the default GPO/GPIO for legacy devices */
dev->reg_gpo_num = EM2880_R04_GPO;
dev->reg_gpio_num = EM28XX_R08_GPIO;

dev->wait_after_write = 5;

/* Based on the Chip ID, set the device configuration */
rc = em28xx_read_reg(dev, EM28XX_R0A_CHIPID);
if (rc > 0) {
dev->chip_id = rc;
Expand All @@ -1326,6 +1328,7 @@ void em28xx_pre_card_setup(struct em28xx *dev)
break;
case CHIP_ID_EM2874:
em28xx_info("chip ID is em2874\n");
dev->reg_gpio_num = EM2874_R80_GPIO;
dev->wait_after_write = 0;
break;
case CHIP_ID_EM2883:
Expand All @@ -1336,6 +1339,12 @@ void em28xx_pre_card_setup(struct em28xx *dev)
em28xx_info("em28xx chip ID = %d\n", rc);
}
}

/* Prepopulate cached GPO register content */
rc = em28xx_read_reg(dev, dev->reg_gpo_num);
if (rc >= 0)
dev->reg_gpo = rc;

em28xx_set_model(dev);

/* request some modules */
Expand Down
8 changes: 4 additions & 4 deletions trunk/drivers/media/video/em28xx/em28xx-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,9 @@ int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
Not sure what happens on reading GPO register.
*/
if (rc >= 0) {
if (reg == EM2880_R04_GPO)
if (reg == dev->reg_gpo_num)
dev->reg_gpo = buf[0];
else if (reg == EM28XX_R08_GPIO)
else if (reg == dev->reg_gpio_num)
dev->reg_gpio = buf[0];
}

Expand All @@ -208,9 +208,9 @@ static int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
u8 newval;

/* Uses cache for gpo/gpio registers */
if (reg == EM2880_R04_GPO)
if (reg == dev->reg_gpo_num)
oldval = dev->reg_gpo;
else if (reg == EM28XX_R08_GPIO)
else if (reg == dev->reg_gpio_num)
oldval = dev->reg_gpio;
else
oldval = em28xx_read_reg(dev, reg);
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/media/video/em28xx/em28xx-reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@
#define EM28XX_R10_LINE_IN_AC97 0x10
#define EM28XX_R14_VIDEO_AC97 0x14

/* em2874 registers */
#define EM2874_R80_GPIO 0x80

/* register settings */
#define EM2800_AUDIO_SRC_TUNER 0x0d
#define EM2800_AUDIO_SRC_LINE 0x0c
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/media/video/em28xx/em28xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,9 @@ struct em28xx {

enum em28xx_mode mode;

/* register numbers for GPO/GPIO registers */
u16 reg_gpo_num, reg_gpio_num;

/* Caches GPO and GPIO registers */
unsigned char reg_gpo, reg_gpio;

Expand Down

0 comments on commit 6ae1208

Please sign in to comment.