You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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: Thomas Genty <tomlohave@gmail.com> Signed-off-by: Nickolay V. Shmyrev <nshmyrev@yandex.ru> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
4be3276a66
commit
177aaaf826
@@ -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)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
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[] = {
|
|||||||
.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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user