Commit 177aaaf8 authored by Thomas Genty's avatar Thomas Genty Committed by Mauro Carvalho Chehab

V4L/DVB (4898): Saa7134: add support for remote control of Hauppauge HVR1110

This patch adds support for the remote control bundled with the
Hauppauge HVR1110
Signed-off-by: default avatarThomas Genty <tomlohave@gmail.com>
Signed-off-by: default avatarNickolay V. Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 4be3276a
...@@ -354,6 +354,7 @@ static int ir_attach(struct i2c_adapter *adap, int addr, ...@@ -354,6 +354,7 @@ static int ir_attach(struct i2c_adapter *adap, int addr,
break; break;
case 0x7a: case 0x7a:
case 0x47: case 0x47:
case 0x71:
/* Handled by saa7134-input */ /* Handled by saa7134-input */
name = "SAA713x remote"; name = "SAA713x remote";
ir_type = IR_TYPE_OTHER; ir_type = IR_TYPE_OTHER;
...@@ -448,7 +449,7 @@ static int ir_probe(struct i2c_adapter *adap) ...@@ -448,7 +449,7 @@ static int ir_probe(struct i2c_adapter *adap)
*/ */
static const int probe_bttv[] = { 0x1a, 0x18, 0x4b, 0x64, 0x30, -1}; static const int probe_bttv[] = { 0x1a, 0x18, 0x4b, 0x64, 0x30, -1};
static const int probe_saa7134[] = { 0x7a, 0x47, -1 }; static const int probe_saa7134[] = { 0x7a, 0x47, 0x71, -1 };
static const int probe_em28XX[] = { 0x30, 0x47, -1 }; static const int probe_em28XX[] = { 0x30, 0x47, -1 };
const int *probe = NULL; const int *probe = NULL;
struct i2c_client c; struct i2c_client c;
......
...@@ -3135,17 +3135,23 @@ struct saa7134_board saa7134_boards[] = { ...@@ -3135,17 +3135,23 @@ struct saa7134_board saa7134_boards[] = {
.tuner_addr = ADDR_UNSET, .tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET, .radio_addr = ADDR_UNSET,
.mpeg = SAA7134_MPEG_DVB, .mpeg = SAA7134_MPEG_DVB,
.gpiomask = 0x000200000,
.inputs = {{ .inputs = {{
.name = name_tv, .name = name_tv,
.vmux = 1, .vmux = 1,
.amux = TV, .amux = TV,
.tv = 1, .tv = 1,
},{
.name = name_comp1,
.vmux = 3,
.amux = LINE2, /* FIXME: audio doesn't work on svideo/composite */
},{
.name = name_svideo,
.vmux = 8,
.amux = LINE2, /* FIXME: audio doesn't work on svideo/composite */
}}, }},
.radio = { .radio = {
.name = name_radio, .name = name_radio,
.amux = TV, .amux = TV,
.gpio = 0x0200000,
}, },
}, },
[SAA7134_BOARD_CINERGY_HT_PCMCIA] = { [SAA7134_BOARD_CINERGY_HT_PCMCIA] = {
...@@ -3976,6 +3982,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) ...@@ -3976,6 +3982,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
case SAA7134_BOARD_PINNACLE_PCTV_110i: case SAA7134_BOARD_PINNACLE_PCTV_110i:
case SAA7134_BOARD_PINNACLE_PCTV_310i: case SAA7134_BOARD_PINNACLE_PCTV_310i:
case SAA7134_BOARD_UPMOST_PURPLE_TV: case SAA7134_BOARD_UPMOST_PURPLE_TV:
case SAA7134_BOARD_HAUPPAUGE_HVR1110:
dev->has_remote = SAA7134_REMOTE_I2C; dev->has_remote = SAA7134_REMOTE_I2C;
break; break;
case SAA7134_BOARD_AVERMEDIA_A169_B: case SAA7134_BOARD_AVERMEDIA_A169_B:
......
...@@ -341,6 +341,7 @@ static int attach_inform(struct i2c_client *client) ...@@ -341,6 +341,7 @@ static int attach_inform(struct i2c_client *client)
switch (client->addr) { switch (client->addr) {
case 0x7a: case 0x7a:
case 0x47: case 0x47:
case 0x71:
{ {
struct IR_i2c *ir = i2c_get_clientdata(client); struct IR_i2c *ir = i2c_get_clientdata(client);
d1printk("%s i2c IR detected (%s).\n", d1printk("%s i2c IR detected (%s).\n",
......
...@@ -112,6 +112,27 @@ static int get_key_purpletv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) ...@@ -112,6 +112,27 @@ static int get_key_purpletv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
return 1; return 1;
} }
static int get_key_hvr1110(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
{
unsigned char buf[5], cod4, code3, code4;
/* poll IR chip */
if (5 != i2c_master_recv(&ir->c,buf,5))
return -EIO;
cod4 = buf[4];
code4 = (cod4 >> 2);
code3 = buf[3];
if (code3 == 0)
/* no key pressed */
return 0;
/* return key */
*ir_key = code4;
*ir_raw = code4;
return 1;
}
void saa7134_input_irq(struct saa7134_dev *dev) void saa7134_input_irq(struct saa7134_dev *dev)
{ {
struct saa7134_ir *ir = dev->remote; struct saa7134_ir *ir = dev->remote;
...@@ -371,6 +392,11 @@ void saa7134_set_i2c_ir(struct saa7134_dev *dev, struct IR_i2c *ir) ...@@ -371,6 +392,11 @@ void saa7134_set_i2c_ir(struct saa7134_dev *dev, struct IR_i2c *ir)
ir->get_key = get_key_purpletv; ir->get_key = get_key_purpletv;
ir->ir_codes = ir_codes_purpletv; ir->ir_codes = ir_codes_purpletv;
break; break;
case SAA7134_BOARD_HAUPPAUGE_HVR1110:
snprintf(ir->c.name, sizeof(ir->c.name), "HVR 1110");
ir->get_key = get_key_hvr1110;
ir->ir_codes = ir_codes_hauppauge_new;
break;
default: default:
dprintk("Shouldn't get here: Unknown board %x for I2C IR?\n",dev->board); dprintk("Shouldn't get here: Unknown board %x for I2C IR?\n",dev->board);
break; break;
......
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