Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 97734
b: refs/heads/master
c: ba60bc6
h: refs/heads/master
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Jun 5, 2008
1 parent e507e4f commit 0a0a99b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 16 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: 8f9935732930e705cab1936a03418ce01aee979a
refs/heads/master: ba60bc673ce7d019ae6684cebbb33e5239346664
4 changes: 4 additions & 0 deletions trunk/drivers/media/video/cx18/cx18-driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,10 @@ struct cx18 {
struct mutex i2c_bus_lock[2];
struct i2c_client *i2c_clients[I2C_CLIENTS_MAX];

/* gpio */
u32 gpio_dir;
u32 gpio_val;

/* v4l2 and User settings */

/* codec settings */
Expand Down
29 changes: 14 additions & 15 deletions trunk/drivers/media/video/cx18/cx18-gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@
#define CX18_REG_GPIO_OUT2 0xc78104
#define CX18_REG_GPIO_DIR2 0xc7810c

static u32 gpio_dir;
static u32 gpio_val;

/*
* HVR-1600 GPIO pins, courtesy of Hauppauge:
*
Expand All @@ -49,25 +46,28 @@ static u32 gpio_val;

static void gpio_write(struct cx18 *cx)
{
write_reg((gpio_dir & 0xffff) << 16, CX18_REG_GPIO_DIR1);
write_reg(((gpio_dir & 0xffff) << 16) | (gpio_val & 0xffff),
u32 dir = cx->gpio_dir;
u32 val = cx->gpio_val;

write_reg((dir & 0xffff) << 16, CX18_REG_GPIO_DIR1);
write_reg(((dir & 0xffff) << 16) | (val & 0xffff),
CX18_REG_GPIO_OUT1);
write_reg(gpio_dir & 0xffff0000, CX18_REG_GPIO_DIR2);
write_reg((gpio_dir & 0xffff0000) | ((gpio_val & 0xffff0000) >> 16),
write_reg(dir & 0xffff0000, CX18_REG_GPIO_DIR2);
write_reg((dir & 0xffff0000) | ((val & 0xffff0000) >> 16),
CX18_REG_GPIO_OUT2);
}

void cx18_gpio_init(struct cx18 *cx)
{
gpio_dir = cx->card->gpio_init.direction;
gpio_val = cx->card->gpio_init.initial_value;
cx->gpio_dir = cx->card->gpio_init.direction;
cx->gpio_val = cx->card->gpio_init.initial_value;

if (cx->card->xceive_pin) {
gpio_dir |= 1 << cx->card->xceive_pin;
gpio_val |= 1 << cx->card->xceive_pin;
cx->gpio_dir |= 1 << cx->card->xceive_pin;
cx->gpio_val |= 1 << cx->card->xceive_pin;
}

if (gpio_dir == 0)
if (cx->gpio_dir == 0)
return;

CX18_DEBUG_INFO("GPIO initial dir: %08x/%08x out: %08x/%08x\n",
Expand All @@ -88,13 +88,12 @@ int cx18_reset_tuner_gpio(void *dev, int cmd, int value)
return 0;
CX18_DEBUG_INFO("Resetting tuner\n");

gpio_dir |= 1 << cx->card->xceive_pin;
gpio_val &= ~(1 << cx->card->xceive_pin);
cx->gpio_val &= ~(1 << cx->card->xceive_pin);

gpio_write(cx);
schedule_timeout_interruptible(msecs_to_jiffies(1));

gpio_val |= 1 << cx->card->xceive_pin;
cx->gpio_val |= 1 << cx->card->xceive_pin;
gpio_write(cx);
schedule_timeout_interruptible(msecs_to_jiffies(1));
return 0;
Expand Down

0 comments on commit 0a0a99b

Please sign in to comment.