mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 19:40:56 +07:00
V4L/DVB: bttv: Move PV951 IR to the right driver
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
8403472f19
commit
c0c4682627
@ -390,41 +390,3 @@ int __devinit init_bttv_i2c(struct bttv *btv)
|
||||
|
||||
return btv->i2c_rc;
|
||||
}
|
||||
|
||||
/* Instantiate the I2C IR receiver device, if present */
|
||||
void __devinit init_bttv_i2c_ir(struct bttv *btv)
|
||||
{
|
||||
if (0 == btv->i2c_rc) {
|
||||
struct i2c_board_info info;
|
||||
/* The external IR receiver is at i2c address 0x34 (0x35 for
|
||||
reads). Future Hauppauge cards will have an internal
|
||||
receiver at 0x30 (0x31 for reads). In theory, both can be
|
||||
fitted, and Hauppauge suggest an external overrides an
|
||||
internal.
|
||||
|
||||
That's why we probe 0x1a (~0x34) first. CB
|
||||
*/
|
||||
const unsigned short addr_list[] = {
|
||||
0x1a, 0x18, 0x4b, 0x64, 0x30, 0x71,
|
||||
I2C_CLIENT_END
|
||||
};
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
|
||||
i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
int __devexit fini_bttv_i2c(struct bttv *btv)
|
||||
{
|
||||
if (0 != btv->i2c_rc)
|
||||
return 0;
|
||||
|
||||
return i2c_del_adapter(&btv->c.i2c_adap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
|
@ -245,6 +245,83 @@ static void bttv_ir_stop(struct bttv *btv)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get_key functions used by I2C remotes
|
||||
*/
|
||||
|
||||
static int get_key_pv951(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
/* poll IR chip */
|
||||
if (1 != i2c_master_recv(ir->c, &b, 1)) {
|
||||
dprintk(KERN_INFO DEVNAME ": read error\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* ignore 0xaa */
|
||||
if (b==0xaa)
|
||||
return 0;
|
||||
dprintk(KERN_INFO DEVNAME ": key %02x\n", b);
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Instantiate the I2C IR receiver device, if present */
|
||||
void __devinit init_bttv_i2c_ir(struct bttv *btv)
|
||||
{
|
||||
const unsigned short addr_list[] = {
|
||||
0x1a, 0x18, 0x64, 0x30, 0x71,
|
||||
I2C_CLIENT_END
|
||||
};
|
||||
struct i2c_board_info info;
|
||||
|
||||
if (0 != btv->i2c_rc)
|
||||
return;
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
memset(&btv->init_data, 0, sizeof(btv->init_data));
|
||||
strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
|
||||
|
||||
switch (btv->c.type) {
|
||||
case BTTV_BOARD_PV951:
|
||||
btv->init_data.name = "PV951";
|
||||
btv->init_data.get_key = get_key_pv951;
|
||||
btv->init_data.ir_codes = RC_MAP_PV951;
|
||||
btv->init_data.type = IR_TYPE_OTHER;
|
||||
info.addr = 0x4b;
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* The external IR receiver is at i2c address 0x34 (0x35 for
|
||||
* reads). Future Hauppauge cards will have an internal
|
||||
* receiver at 0x30 (0x31 for reads). In theory, both can be
|
||||
* fitted, and Hauppauge suggest an external overrides an
|
||||
* internal.
|
||||
* That's why we probe 0x1a (~0x34) first. CB
|
||||
*/
|
||||
|
||||
i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (btv->init_data.name)
|
||||
info.platform_data = &btv->init_data;
|
||||
i2c_new_device(&btv->c.i2c_adap, &info);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int __devexit fini_bttv_i2c(struct bttv *btv)
|
||||
{
|
||||
if (0 != btv->i2c_rc)
|
||||
return 0;
|
||||
|
||||
return i2c_del_adapter(&btv->c.i2c_adap);
|
||||
}
|
||||
|
||||
int bttv_input_init(struct bttv *btv)
|
||||
{
|
||||
struct card_ir *ir;
|
||||
@ -420,10 +497,3 @@ void bttv_input_fini(struct bttv *btv)
|
||||
kfree(btv->remote);
|
||||
btv->remote = NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
* End:
|
||||
*/
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/ir-common.h>
|
||||
#include <media/ir-kbd-i2c.h>
|
||||
#include <media/i2c-addr.h>
|
||||
#include <media/tuner.h>
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include <media/videobuf-dma-sg.h>
|
||||
#include <media/tveeprom.h>
|
||||
#include <media/ir-common.h>
|
||||
|
||||
#include <media/ir-kbd-i2c.h>
|
||||
|
||||
#include "bt848.h"
|
||||
#include "bttv.h"
|
||||
@ -270,6 +270,12 @@ int bttv_sub_del_devices(struct bttv_core *core);
|
||||
|
||||
extern int no_overlay;
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
/* bttv-input.c */
|
||||
|
||||
extern void init_bttv_i2c_ir(struct bttv *btv);
|
||||
extern int fini_bttv_i2c(struct bttv *btv);
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
/* bttv-driver.c */
|
||||
|
||||
@ -279,8 +285,6 @@ extern unsigned int bttv_debug;
|
||||
extern unsigned int bttv_gpio;
|
||||
extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
|
||||
extern int init_bttv_i2c(struct bttv *btv);
|
||||
extern void init_bttv_i2c_ir(struct bttv *btv);
|
||||
extern int fini_bttv_i2c(struct bttv *btv);
|
||||
|
||||
#define bttv_printk if (bttv_verbose) printk
|
||||
#define dprintk if (bttv_debug >= 1) printk
|
||||
@ -366,6 +370,9 @@ struct bttv {
|
||||
int has_remote;
|
||||
struct card_ir *remote;
|
||||
|
||||
/* I2C remote data */
|
||||
struct IR_i2c_init_data init_data;
|
||||
|
||||
/* locking */
|
||||
spinlock_t s_lock;
|
||||
struct mutex lock;
|
||||
|
@ -146,26 +146,6 @@ static int get_key_pixelview(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_pv951(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
/* poll IR chip */
|
||||
if (1 != i2c_master_recv(ir->c, &b, 1)) {
|
||||
dprintk(1,"read error\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* ignore 0xaa */
|
||||
if (b==0xaa)
|
||||
return 0;
|
||||
dprintk(2,"key %02x\n", b);
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_fusionhdtv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
unsigned char buf[4];
|
||||
@ -321,12 +301,6 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
ir_type = IR_TYPE_OTHER;
|
||||
ir_codes = RC_MAP_EMPTY;
|
||||
break;
|
||||
case 0x4b:
|
||||
name = "PV951";
|
||||
ir->get_key = get_key_pv951;
|
||||
ir_type = IR_TYPE_OTHER;
|
||||
ir_codes = RC_MAP_PV951;
|
||||
break;
|
||||
case 0x18:
|
||||
case 0x1f:
|
||||
case 0x1a:
|
||||
@ -396,9 +370,6 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
case IR_KBD_GET_KEY_PIXELVIEW:
|
||||
ir->get_key = get_key_pixelview;
|
||||
break;
|
||||
case IR_KBD_GET_KEY_PV951:
|
||||
ir->get_key = get_key_pv951;
|
||||
break;
|
||||
case IR_KBD_GET_KEY_HAUP:
|
||||
ir->get_key = get_key_haup;
|
||||
break;
|
||||
|
@ -24,7 +24,6 @@ struct IR_i2c {
|
||||
enum ir_kbd_get_key_fn {
|
||||
IR_KBD_GET_KEY_CUSTOM = 0,
|
||||
IR_KBD_GET_KEY_PIXELVIEW,
|
||||
IR_KBD_GET_KEY_PV951,
|
||||
IR_KBD_GET_KEY_HAUP,
|
||||
IR_KBD_GET_KEY_KNC1,
|
||||
IR_KBD_GET_KEY_FUSIONHDTV,
|
||||
|
Loading…
Reference in New Issue
Block a user