V4L/DVB: saa7134: get rid of I2C_HW_SAA7134
The only reason for keeping I2C_HW_SAA7134 is to allow setting a per-device polling interval. Just move this info to the platform data, allowing drivers to change it per device, where needed. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
44243fc2ef
commit
c72ba8e6ae
@ -259,15 +259,9 @@ static void ir_key_poll(struct IR_i2c *ir)
|
|||||||
static void ir_work(struct work_struct *work)
|
static void ir_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct IR_i2c *ir = container_of(work, struct IR_i2c, work.work);
|
struct IR_i2c *ir = container_of(work, struct IR_i2c, work.work);
|
||||||
int polling_interval = 100;
|
|
||||||
|
|
||||||
/* MSI TV@nywhere Plus requires more frequent polling
|
|
||||||
otherwise it will miss some keypresses */
|
|
||||||
if (ir->c->adapter->id == I2C_HW_SAA7134 && ir->c->addr == 0x30)
|
|
||||||
polling_interval = 50;
|
|
||||||
|
|
||||||
ir_key_poll(ir);
|
ir_key_poll(ir);
|
||||||
schedule_delayed_work(&ir->work, msecs_to_jiffies(polling_interval));
|
schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling_interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
@ -292,6 +286,7 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|||||||
|
|
||||||
ir->c = client;
|
ir->c = client;
|
||||||
ir->input = input_dev;
|
ir->input = input_dev;
|
||||||
|
ir->polling_interval = DEFAULT_POLLING_INTERVAL;
|
||||||
i2c_set_clientdata(client, ir);
|
i2c_set_clientdata(client, ir);
|
||||||
|
|
||||||
switch(addr) {
|
switch(addr) {
|
||||||
@ -343,6 +338,9 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|||||||
if (init_data->type)
|
if (init_data->type)
|
||||||
ir_type = init_data->type;
|
ir_type = init_data->type;
|
||||||
|
|
||||||
|
if (init_data->polling_interval)
|
||||||
|
ir->polling_interval = init_data->polling_interval;
|
||||||
|
|
||||||
switch (init_data->internal_get_key_func) {
|
switch (init_data->internal_get_key_func) {
|
||||||
case IR_KBD_GET_KEY_CUSTOM:
|
case IR_KBD_GET_KEY_CUSTOM:
|
||||||
/* The bridge driver provided us its own function */
|
/* The bridge driver provided us its own function */
|
||||||
|
@ -328,7 +328,6 @@ static struct i2c_algorithm saa7134_algo = {
|
|||||||
static struct i2c_adapter saa7134_adap_template = {
|
static struct i2c_adapter saa7134_adap_template = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.name = "saa7134",
|
.name = "saa7134",
|
||||||
.id = I2C_HW_SAA7134,
|
|
||||||
.algo = &saa7134_algo,
|
.algo = &saa7134_algo,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -959,6 +959,11 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
|
|||||||
dev->init_data.name = "MSI TV@nywhere Plus";
|
dev->init_data.name = "MSI TV@nywhere Plus";
|
||||||
dev->init_data.get_key = get_key_msi_tvanywhere_plus;
|
dev->init_data.get_key = get_key_msi_tvanywhere_plus;
|
||||||
dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS;
|
dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS;
|
||||||
|
/*
|
||||||
|
* MSI TV@nyware Plus requires more frequent polling
|
||||||
|
* otherwise it will miss some keypresses
|
||||||
|
*/
|
||||||
|
dev->init_data.polling_interval = 50;
|
||||||
info.addr = 0x30;
|
info.addr = 0x30;
|
||||||
/* MSI TV@nywhere Plus controller doesn't seem to
|
/* MSI TV@nywhere Plus controller doesn't seem to
|
||||||
respond to probes unless we read something from
|
respond to probes unless we read something from
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <media/ir-common.h>
|
#include <media/ir-common.h>
|
||||||
|
|
||||||
|
#define DEFAULT_POLLING_INTERVAL 100 /* ms */
|
||||||
|
|
||||||
struct IR_i2c;
|
struct IR_i2c;
|
||||||
|
|
||||||
struct IR_i2c {
|
struct IR_i2c {
|
||||||
@ -15,6 +17,8 @@ struct IR_i2c {
|
|||||||
/* Used to avoid fast repeating */
|
/* Used to avoid fast repeating */
|
||||||
unsigned char old;
|
unsigned char old;
|
||||||
|
|
||||||
|
u32 polling_interval; /* in ms */
|
||||||
|
|
||||||
struct delayed_work work;
|
struct delayed_work work;
|
||||||
char name[32];
|
char name[32];
|
||||||
char phys[32];
|
char phys[32];
|
||||||
@ -34,8 +38,9 @@ enum ir_kbd_get_key_fn {
|
|||||||
/* Can be passed when instantiating an ir_video i2c device */
|
/* Can be passed when instantiating an ir_video i2c device */
|
||||||
struct IR_i2c_init_data {
|
struct IR_i2c_init_data {
|
||||||
char *ir_codes;
|
char *ir_codes;
|
||||||
const char *name;
|
const char *name;
|
||||||
u64 type; /* IR_TYPE_RC5, etc */
|
u64 type; /* IR_TYPE_RC5, etc */
|
||||||
|
u32 polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */
|
||||||
/*
|
/*
|
||||||
* Specify either a function pointer or a value indicating one of
|
* Specify either a function pointer or a value indicating one of
|
||||||
* ir_kbd_i2c's internal get_key functions
|
* ir_kbd_i2c's internal get_key functions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user