[media] fc0012: use struct for driver config
authorAntti Palosaari <crope@iki.fi>
Sun, 9 Dec 2012 02:27:49 +0000 (23:27 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 6 Jan 2013 11:04:57 +0000 (09:04 -0200)
I need even more configuration options and overloading dvb_attach()
for all those sounds quite stupid. Due to that switch struct and make
room for new options.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Acked-by: Hans-Frieder Vogt <hfvogt@gmx.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/tuners/fc0012.c
drivers/media/tuners/fc0012.h
drivers/media/usb/dvb-usb-v2/af9035.c
drivers/media/usb/dvb-usb-v2/rtl28xxu.c

index 308135abd54c0581ebf0179bc720a2e25c98b728..5ede0c049bc0f0a98a15acc0660351c565a6d8f8 100644 (file)
@@ -436,8 +436,7 @@ static const struct dvb_tuner_ops fc0012_tuner_ops = {
 };
 
 struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
-       struct i2c_adapter *i2c, u8 i2c_address, int dual_master,
-       enum fc001x_xtal_freq xtal_freq)
+       struct i2c_adapter *i2c, const struct fc0012_config *cfg)
 {
        struct fc0012_priv *priv = NULL;
 
@@ -446,9 +445,9 @@ struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
                return NULL;
 
        priv->i2c = i2c;
-       priv->dual_master = dual_master;
-       priv->addr = i2c_address;
-       priv->xtal_freq = xtal_freq;
+       priv->dual_master = cfg->dual_master;
+       priv->addr = cfg->i2c_address;
+       priv->xtal_freq = cfg->xtal_freq;
 
        info("Fitipower FC0012 successfully attached.");
 
index 4dbd5efe8845a9e8b425a1959a269ba2a80d888e..41946f82d02bbb6f1bb102aa2fa5a8ec63d71e32 100644 (file)
 #include "dvb_frontend.h"
 #include "fc001x-common.h"
 
+struct fc0012_config {
+       /*
+        * I2C address
+        */
+       u8 i2c_address;
+
+       /*
+        * clock
+        */
+       enum fc001x_xtal_freq xtal_freq;
+
+       int dual_master;
+};
+
 #if defined(CONFIG_MEDIA_TUNER_FC0012) || \
        (defined(CONFIG_MEDIA_TUNER_FC0012_MODULE) && defined(MODULE))
 extern struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
                                        struct i2c_adapter *i2c,
-                                       u8 i2c_address, int dual_master,
-                                       enum fc001x_xtal_freq xtal_freq);
+                                       const struct fc0012_config *cfg);
 #else
 static inline struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
                                        struct i2c_adapter *i2c,
-                                       u8 i2c_address, int dual_master,
-                                       enum fc001x_xtal_freq xtal_freq)
+                                       const struct fc0012_config *cfg)
 {
        printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
        return NULL;
index d1beb7ffe72cffc3f819810b413f07e2bfdc3114..6cf9ad5ef8c12595a00a29538368380d8d6b6a3d 100644 (file)
@@ -900,6 +900,12 @@ static const struct fc2580_config af9035_fc2580_config = {
        .clock = 16384000,
 };
 
+static const struct fc0012_config af9035_fc0012_config = {
+       .i2c_address = 0x63,
+       .xtal_freq = FC_XTAL_36_MHZ,
+       .dual_master = 1,
+};
+
 static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct state *state = adap_to_priv(adap);
@@ -1043,8 +1049,8 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
 
                usleep_range(10000, 50000);
 
-               fe = dvb_attach(fc0012_attach, adap->fe[0], &d->i2c_adap, 0x63,
-                               1, FC_XTAL_36_MHZ);
+               fe = dvb_attach(fc0012_attach, adap->fe[0], &d->i2c_adap,
+                               &af9035_fc0012_config);
                break;
        default:
                fe = NULL;
index a4c302d0aa37011472e3dbc047b2041d4ddf8eb3..eddda6958c19b7f0e416c0134b6663d72dde875c 100644 (file)
@@ -835,6 +835,11 @@ static struct tua9001_config rtl2832u_tua9001_config = {
        .i2c_addr = 0x60,
 };
 
+static const struct fc0012_config rtl2832u_fc0012_config = {
+       .i2c_address = 0x63, /* 0xc6 >> 1 */
+       .xtal_freq = FC_XTAL_28_8_MHZ,
+};
+
 static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
 {
        int ret;
@@ -847,7 +852,7 @@ static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
        switch (priv->tuner) {
        case TUNER_RTL2832_FC0012:
                fe = dvb_attach(fc0012_attach, adap->fe[0],
-                       &d->i2c_adap, 0xc6>>1, 0, FC_XTAL_28_8_MHZ);
+                       &d->i2c_adap, &rtl2832u_fc0012_config);
 
                /* since fc0012 includs reading the signal strength delegate
                 * that to the tuner driver */