[media] stv090x: added function to control GPIOs from the outside
authorPatrick Boettcher <pboettcher@kernellabs.com>
Sun, 10 Oct 2010 16:45:54 +0000 (13:45 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 21 Mar 2011 23:31:32 +0000 (20:31 -0300)
This patch STV090X adds and exports a function to control the GPIOs of
the stv090x-devices.

Cc: Manu Abraham <abraham.manu@gmail.com>
Signed-off-by: Martin Wilks <m.wilks@technisat.com>
Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/stv090x.c
drivers/media/dvb/frontends/stv090x.h

index 4e0fc2c8a41c24eeabd940e8e79547547d1f6163..63cb4f8fa6c81d9fb23bdefa2ad6ebc42774d440 100644 (file)
@@ -4516,6 +4516,20 @@ err:
        return -1;
 }
 
+int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, u8 dir, u8 value,
+               u8 xor_value)
+{
+       struct stv090x_state *state = fe->demodulator_priv;
+       u8 reg = 0;
+
+       STV090x_SETFIELD(reg, GPIOx_OPD_FIELD, dir);
+       STV090x_SETFIELD(reg, GPIOx_CONFIG_FIELD, value);
+       STV090x_SETFIELD(reg, GPIOx_XOR_FIELD, xor_value);
+
+       return stv090x_write_reg(state, STV090x_GPIOxCFG(gpio), reg);
+}
+EXPORT_SYMBOL(stv090x_set_gpio);
+
 static struct dvb_frontend_ops stv090x_ops = {
 
        .info = {
index dd1b93ae4e9d2e570c68409b19b010575d259de3..11754f2f6437a1748e8dd1ed34b579fa534232c5 100644 (file)
@@ -104,6 +104,11 @@ struct stv090x_config {
 extern struct dvb_frontend *stv090x_attach(const struct stv090x_config *config,
                                           struct i2c_adapter *i2c,
                                           enum stv090x_demodulator demod);
+
+/* dir = 0 -> output, dir = 1 -> input/open-drain */
+extern int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio,
+               u8 dir, u8 value, u8 xor_value);
+
 #else
 
 static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *config,
@@ -113,6 +118,13 @@ static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *c
        printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
        return NULL;
 }
+
+static inline int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio,
+               u8 opd, u8 value, u8 xor_value)
+{
+       printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+       return -ENODEV;
+}
 #endif /* CONFIG_DVB_STV090x */
 
 #endif /* __STV090x_H */