Index: v4l-dvb/linux/drivers/media/dvb/frontends/mt312.c =================================================================== --- v4l-dvb.orig/linux/drivers/media/dvb/frontends/mt312.c +++ v4l-dvb/linux/drivers/media/dvb/frontends/mt312.c @@ -420,10 +420,11 @@ static int mt312_set_voltage(struct dvb_ struct mt312_state *state = fe->demodulator_priv; const u8 volt_tab[3] = { 0x00, 0x40, 0x00 }; + u8 flip_bits = state->config->voltage_inverted ? 0x40 : 0x00; if (v > SEC_VOLTAGE_OFF) return -EINVAL; - return mt312_writereg(state, DISEQC_MODE, volt_tab[v]); + return mt312_writereg(state, DISEQC_MODE, volt_tab[v] ^ flip_bits); } static int mt312_read_status(struct dvb_frontend *fe, fe_status_t *s) Index: v4l-dvb/linux/drivers/media/dvb/frontends/mt312.h =================================================================== --- v4l-dvb.orig/linux/drivers/media/dvb/frontends/mt312.h +++ v4l-dvb/linux/drivers/media/dvb/frontends/mt312.h @@ -31,6 +31,9 @@ struct mt312_config { /* the demodulator's i2c address */ u8 demod_address; + + /* inverted voltage setting */ + int voltage_inverted:1; }; #if defined(CONFIG_DVB_MT312) || (defined(CONFIG_DVB_MT312_MODULE) && defined(MODULE))