V4L/DVB: saa7134: get rid of I2C_HW_SAA7134
authorMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 23 Sep 2010 04:23:10 +0000 (01:23 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Oct 2010 03:06:07 +0000 (01:06 -0200)
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>
drivers/media/video/ir-kbd-i2c.c
drivers/media/video/saa7134/saa7134-i2c.c
drivers/media/video/saa7134/saa7134-input.c
include/media/ir-kbd-i2c.h

index 91b2c88d4d72feb765d59aea7c853529e3649ef8..5a000c65ae98ab3f4fa75b26b4f87ba885874290 100644 (file)
@@ -259,15 +259,9 @@ static void ir_key_poll(struct IR_i2c *ir)
 static void ir_work(struct work_struct *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);
-       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->input = input_dev;
+       ir->polling_interval = DEFAULT_POLLING_INTERVAL;
        i2c_set_clientdata(client, ir);
 
        switch(addr) {
@@ -343,6 +338,9 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
                if (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) {
                case IR_KBD_GET_KEY_CUSTOM:
                        /* The bridge driver provided us its own function */
index da41b6b1e64a2239569256ca3c7eaffef1b43382..2d3f6d265bbfc18a545b6d667790423cdbfefc9e 100644 (file)
@@ -328,7 +328,6 @@ static struct i2c_algorithm saa7134_algo = {
 static struct i2c_adapter saa7134_adap_template = {
        .owner         = THIS_MODULE,
        .name          = "saa7134",
-       .id            = I2C_HW_SAA7134,
        .algo          = &saa7134_algo,
 };
 
index 0b336ca6d55b9a281c3e346193389587a2534852..52a1ee5aefd0f81931af2a794993c76319469138 100644 (file)
@@ -959,6 +959,11 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
                dev->init_data.name = "MSI TV@nywhere Plus";
                dev->init_data.get_key = get_key_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;
                /* MSI TV@nywhere Plus controller doesn't seem to
                   respond to probes unless we read something from
index 4102f0dd5c401946be04e892f7af149054a873e6..557c676ab7dc9b93bc459797eafb17cffa4c6d55 100644 (file)
@@ -3,6 +3,8 @@
 
 #include <media/ir-common.h>
 
+#define DEFAULT_POLLING_INTERVAL       100     /* ms */
+
 struct IR_i2c;
 
 struct IR_i2c {
@@ -15,6 +17,8 @@ struct IR_i2c {
        /* Used to avoid fast repeating */
        unsigned char          old;
 
+       u32                    polling_interval; /* in ms */
+
        struct delayed_work    work;
        char                   name[32];
        char                   phys[32];
@@ -34,8 +38,9 @@ enum ir_kbd_get_key_fn {
 /* Can be passed when instantiating an ir_video i2c device */
 struct IR_i2c_init_data {
        char                    *ir_codes;
-       const char             *name;
-       u64          type; /* IR_TYPE_RC5, etc */
+       const char              *name;
+       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
         * ir_kbd_i2c's internal get_key functions