mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 21:30:54 +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;
|
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)
|
int bttv_input_init(struct bttv *btv)
|
||||||
{
|
{
|
||||||
struct card_ir *ir;
|
struct card_ir *ir;
|
||||||
@ -420,10 +497,3 @@ void bttv_input_fini(struct bttv *btv)
|
|||||||
kfree(btv->remote);
|
kfree(btv->remote);
|
||||||
btv->remote = NULL;
|
btv->remote = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local variables:
|
|
||||||
* c-basic-offset: 8
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <media/v4l2-device.h>
|
#include <media/v4l2-device.h>
|
||||||
#include <media/ir-common.h>
|
#include <media/ir-common.h>
|
||||||
#include <media/ir-kbd-i2c.h>
|
|
||||||
#include <media/i2c-addr.h>
|
#include <media/i2c-addr.h>
|
||||||
#include <media/tuner.h>
|
#include <media/tuner.h>
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#include <media/videobuf-dma-sg.h>
|
#include <media/videobuf-dma-sg.h>
|
||||||
#include <media/tveeprom.h>
|
#include <media/tveeprom.h>
|
||||||
#include <media/ir-common.h>
|
#include <media/ir-common.h>
|
||||||
|
#include <media/ir-kbd-i2c.h>
|
||||||
|
|
||||||
#include "bt848.h"
|
#include "bt848.h"
|
||||||
#include "bttv.h"
|
#include "bttv.h"
|
||||||
@ -270,6 +270,12 @@ int bttv_sub_del_devices(struct bttv_core *core);
|
|||||||
|
|
||||||
extern int no_overlay;
|
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 */
|
/* bttv-driver.c */
|
||||||
|
|
||||||
@ -279,8 +285,6 @@ extern unsigned int bttv_debug;
|
|||||||
extern unsigned int bttv_gpio;
|
extern unsigned int bttv_gpio;
|
||||||
extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
|
extern void bttv_gpio_tracking(struct bttv *btv, char *comment);
|
||||||
extern int init_bttv_i2c(struct bttv *btv);
|
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 bttv_printk if (bttv_verbose) printk
|
||||||
#define dprintk if (bttv_debug >= 1) printk
|
#define dprintk if (bttv_debug >= 1) printk
|
||||||
@ -366,6 +370,9 @@ struct bttv {
|
|||||||
int has_remote;
|
int has_remote;
|
||||||
struct card_ir *remote;
|
struct card_ir *remote;
|
||||||
|
|
||||||
|
/* I2C remote data */
|
||||||
|
struct IR_i2c_init_data init_data;
|
||||||
|
|
||||||
/* locking */
|
/* locking */
|
||||||
spinlock_t s_lock;
|
spinlock_t s_lock;
|
||||||
struct mutex 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;
|
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)
|
static int get_key_fusionhdtv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||||
{
|
{
|
||||||
unsigned char buf[4];
|
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_type = IR_TYPE_OTHER;
|
||||||
ir_codes = RC_MAP_EMPTY;
|
ir_codes = RC_MAP_EMPTY;
|
||||||
break;
|
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 0x18:
|
||||||
case 0x1f:
|
case 0x1f:
|
||||||
case 0x1a:
|
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:
|
case IR_KBD_GET_KEY_PIXELVIEW:
|
||||||
ir->get_key = get_key_pixelview;
|
ir->get_key = get_key_pixelview;
|
||||||
break;
|
break;
|
||||||
case IR_KBD_GET_KEY_PV951:
|
|
||||||
ir->get_key = get_key_pv951;
|
|
||||||
break;
|
|
||||||
case IR_KBD_GET_KEY_HAUP:
|
case IR_KBD_GET_KEY_HAUP:
|
||||||
ir->get_key = get_key_haup;
|
ir->get_key = get_key_haup;
|
||||||
break;
|
break;
|
||||||
|
@ -24,7 +24,6 @@ struct IR_i2c {
|
|||||||
enum ir_kbd_get_key_fn {
|
enum ir_kbd_get_key_fn {
|
||||||
IR_KBD_GET_KEY_CUSTOM = 0,
|
IR_KBD_GET_KEY_CUSTOM = 0,
|
||||||
IR_KBD_GET_KEY_PIXELVIEW,
|
IR_KBD_GET_KEY_PIXELVIEW,
|
||||||
IR_KBD_GET_KEY_PV951,
|
|
||||||
IR_KBD_GET_KEY_HAUP,
|
IR_KBD_GET_KEY_HAUP,
|
||||||
IR_KBD_GET_KEY_KNC1,
|
IR_KBD_GET_KEY_KNC1,
|
||||||
IR_KBD_GET_KEY_FUSIONHDTV,
|
IR_KBD_GET_KEY_FUSIONHDTV,
|
||||||
|
Loading…
Reference in New Issue
Block a user