提交 c72ba8e6 编写于 作者: M Mauro Carvalho Chehab

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: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 44243fc2
...@@ -259,15 +259,9 @@ static void ir_key_poll(struct IR_i2c *ir) ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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) ...@@ -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 @@ ...@@ -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 { ...@@ -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 { ...@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册