Skip to content

Commit

Permalink
V4L/DVB: bttv: Move PV951 IR to the right driver
Browse files Browse the repository at this point in the history
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Oct 21, 2010
1 parent 8403472 commit c0c4682
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 79 deletions.
38 changes: 0 additions & 38 deletions drivers/media/video/bt8xx/bttv-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
*/
84 changes: 77 additions & 7 deletions drivers/media/video/bt8xx/bttv-input.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -420,10 +497,3 @@ void bttv_input_fini(struct bttv *btv)
kfree(btv->remote);
btv->remote = NULL;
}


/*
* Local variables:
* c-basic-offset: 8
* End:
*/
1 change: 0 additions & 1 deletion drivers/media/video/bt8xx/bttv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
13 changes: 10 additions & 3 deletions drivers/media/video/bt8xx/bttvp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 */

Expand All @@ -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
Expand Down Expand Up @@ -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;
Expand Down
29 changes: 0 additions & 29 deletions drivers/media/video/ir-kbd-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion include/media/ir-kbd-i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit c0c4682

Please sign in to comment.