diff mbox

[v2,08/12,media] ngene: deduplicate I2C adapter evaluation

Message ID 20180225123140.19486-9-d.scheller.oss@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Scheller Feb. 25, 2018, 12:31 p.m. UTC
From: Daniel Scheller <d.scheller@gmx.net>

The I2C adapter evaluation (based on chan->number) is duplicated at
several places (tuner_attach_() functions, demod_attach_stv0900() and
cineS2_probe()). Clean this up by wrapping that construct in a separate
function which all users of that can pass the ngene_channel pointer and
get the correct I2C adapter from.

Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
---
 drivers/media/pci/ngene/ngene-cards.c | 41 +++++++++++++----------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

Comments

Mauro Carvalho Chehab March 6, 2018, 4:06 p.m. UTC | #1
Em Sun, 25 Feb 2018 13:31:36 +0100
Daniel Scheller <d.scheller.oss@gmail.com> escreveu:

> From: Daniel Scheller <d.scheller@gmx.net>
> 
> The I2C adapter evaluation (based on chan->number) is duplicated at
> several places (tuner_attach_() functions, demod_attach_stv0900() and
> cineS2_probe()). Clean this up by wrapping that construct in a separate
> function which all users of that can pass the ngene_channel pointer and
> get the correct I2C adapter from.

This patch doesn't apply. 

Please rebase from this point at the top of the media tree.

PS.: Perhaps I ended by merging an older version of some of your
patches, as I noticed that some e-mails got lost either by me or
by patch work along those days.

> 
> Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
> ---
>  drivers/media/pci/ngene/ngene-cards.c | 41 +++++++++++++----------------------
>  1 file changed, 15 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/media/pci/ngene/ngene-cards.c b/drivers/media/pci/ngene/ngene-cards.c
> index 00b100660784..dff55c7c9f86 100644
> --- a/drivers/media/pci/ngene/ngene-cards.c
> +++ b/drivers/media/pci/ngene/ngene-cards.c
> @@ -118,17 +118,25 @@ static int i2c_read_reg(struct i2c_adapter *adapter, u8 adr, u8 reg, u8 *val)
>  /* Demod/tuner attachment ***************************************************/
>  /****************************************************************************/
>  
> +static struct i2c_adapter *i2c_adapter_from_chan(struct ngene_channel *chan)
> +{
> +	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> +	if (chan->number < 2)
> +		return &chan->dev->channel[0].i2c_adapter;
> +
> +	return &chan->dev->channel[1].i2c_adapter;
> +}
> +
>  static int tuner_attach_stv6110(struct ngene_channel *chan)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct stv090x_config *feconf = (struct stv090x_config *)
>  		chan->dev->card_info->fe_config[chan->number];
>  	struct stv6110x_config *tunerconf = (struct stv6110x_config *)
>  		chan->dev->card_info->tuner_config[chan->number];
>  	const struct stv6110x_devctl *ctl;
>  
> -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
>  	if (chan->number < 2)
>  		i2c = &chan->dev->channel[0].i2c_adapter;
>  	else
> @@ -158,16 +166,10 @@ static int tuner_attach_stv6110(struct ngene_channel *chan)
>  static int tuner_attach_stv6111(struct ngene_channel *chan)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct dvb_frontend *fe;
>  	u8 adr = 4 + ((chan->number & 1) ? 0x63 : 0x60);
>  
> -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> -	if (chan->number < 2)
> -		i2c = &chan->dev->channel[0].i2c_adapter;
> -	else
> -		i2c = &chan->dev->channel[1].i2c_adapter;
> -
>  	fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr);
>  	if (!fe) {
>  		fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr & ~4);
> @@ -197,10 +199,9 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
>  static int tuner_attach_tda18271(struct ngene_channel *chan)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct dvb_frontend *fe;
>  
> -	i2c = &chan->dev->channel[0].i2c_adapter;
>  	if (chan->fe->ops.i2c_gate_ctrl)
>  		chan->fe->ops.i2c_gate_ctrl(chan->fe, 1);
>  	fe = dvb_attach(tda18271c2dd_attach, chan->fe, i2c, 0x60);
> @@ -240,7 +241,7 @@ static int tuner_tda18212_ping(struct ngene_channel *chan,
>  static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct i2c_client *client;
>  	struct tda18212_config config = {
>  		.fe = chan->fe,
> @@ -262,12 +263,6 @@ static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
>  	else
>  		board_info.addr = 0x60;
>  
> -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> -	if (chan->number < 2)
> -		i2c = &chan->dev->channel[0].i2c_adapter;
> -	else
> -		i2c = &chan->dev->channel[1].i2c_adapter;
> -
>  	/*
>  	 * due to a hardware quirk with the I2C gate on the stv0367+tda18212
>  	 * combo, the tda18212 must be probed by reading it's id _twice_ when
> @@ -320,7 +315,7 @@ static int tuner_attach_probe(struct ngene_channel *chan)
>  static int demod_attach_stv0900(struct ngene_channel *chan)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct stv090x_config *feconf = (struct stv090x_config *)
>  		chan->dev->card_info->fe_config[chan->number];
>  
> @@ -620,7 +615,7 @@ static int port_has_xo2(struct i2c_adapter *i2c, u8 *type, u8 *id)
>  static int cineS2_probe(struct ngene_channel *chan)
>  {
>  	struct device *pdev = &chan->dev->pci_dev->dev;
> -	struct i2c_adapter *i2c;
> +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
>  	struct stv090x_config *fe_conf;
>  	u8 buf[3];
>  	u8 xo2_type, xo2_id, xo2_demodtype;
> @@ -628,12 +623,6 @@ static int cineS2_probe(struct ngene_channel *chan)
>  	struct i2c_msg i2c_msg = { .flags = 0, .buf = buf };
>  	int rc;
>  
> -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> -	if (chan->number < 2)
> -		i2c = &chan->dev->channel[0].i2c_adapter;
> -	else
> -		i2c = &chan->dev->channel[1].i2c_adapter;
> -
>  	if (port_has_xo2(i2c, &xo2_type, &xo2_id)) {
>  		xo2_id >>= 2;
>  		dev_dbg(pdev, "XO2 on channel %d (type %d, id %d)\n",



Thanks,
Mauro
Mauro Carvalho Chehab March 6, 2018, 4:14 p.m. UTC | #2
Em Tue, 6 Mar 2018 13:06:15 -0300
Mauro Carvalho Chehab <mchehab@kernel.org> escreveu:

> Em Sun, 25 Feb 2018 13:31:36 +0100
> Daniel Scheller <d.scheller.oss@gmail.com> escreveu:
> 
> > From: Daniel Scheller <d.scheller@gmx.net>
> > 
> > The I2C adapter evaluation (based on chan->number) is duplicated at
> > several places (tuner_attach_() functions, demod_attach_stv0900() and
> > cineS2_probe()). Clean this up by wrapping that construct in a separate
> > function which all users of that can pass the ngene_channel pointer and
> > get the correct I2C adapter from.
> 
> This patch doesn't apply. 

Forget that. Patch 7 was missing. After applying it, this one
merged OK.

> 
> Please rebase from this point at the top of the media tree.
> 
> PS.: Perhaps I ended by merging an older version of some of your
> patches, as I noticed that some e-mails got lost either by me or
> by patch work along those days.


> 
> > 
> > Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
> > ---
> >  drivers/media/pci/ngene/ngene-cards.c | 41 +++++++++++++----------------------
> >  1 file changed, 15 insertions(+), 26 deletions(-)
> > 
> > diff --git a/drivers/media/pci/ngene/ngene-cards.c b/drivers/media/pci/ngene/ngene-cards.c
> > index 00b100660784..dff55c7c9f86 100644
> > --- a/drivers/media/pci/ngene/ngene-cards.c
> > +++ b/drivers/media/pci/ngene/ngene-cards.c
> > @@ -118,17 +118,25 @@ static int i2c_read_reg(struct i2c_adapter *adapter, u8 adr, u8 reg, u8 *val)
> >  /* Demod/tuner attachment ***************************************************/
> >  /****************************************************************************/
> >  
> > +static struct i2c_adapter *i2c_adapter_from_chan(struct ngene_channel *chan)
> > +{
> > +	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> > +	if (chan->number < 2)
> > +		return &chan->dev->channel[0].i2c_adapter;
> > +
> > +	return &chan->dev->channel[1].i2c_adapter;
> > +}
> > +
> >  static int tuner_attach_stv6110(struct ngene_channel *chan)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct stv090x_config *feconf = (struct stv090x_config *)
> >  		chan->dev->card_info->fe_config[chan->number];
> >  	struct stv6110x_config *tunerconf = (struct stv6110x_config *)
> >  		chan->dev->card_info->tuner_config[chan->number];
> >  	const struct stv6110x_devctl *ctl;
> >  
> > -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> >  	if (chan->number < 2)
> >  		i2c = &chan->dev->channel[0].i2c_adapter;
> >  	else
> > @@ -158,16 +166,10 @@ static int tuner_attach_stv6110(struct ngene_channel *chan)
> >  static int tuner_attach_stv6111(struct ngene_channel *chan)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct dvb_frontend *fe;
> >  	u8 adr = 4 + ((chan->number & 1) ? 0x63 : 0x60);
> >  
> > -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> > -	if (chan->number < 2)
> > -		i2c = &chan->dev->channel[0].i2c_adapter;
> > -	else
> > -		i2c = &chan->dev->channel[1].i2c_adapter;
> > -
> >  	fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr);
> >  	if (!fe) {
> >  		fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr & ~4);
> > @@ -197,10 +199,9 @@ static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
> >  static int tuner_attach_tda18271(struct ngene_channel *chan)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct dvb_frontend *fe;
> >  
> > -	i2c = &chan->dev->channel[0].i2c_adapter;
> >  	if (chan->fe->ops.i2c_gate_ctrl)
> >  		chan->fe->ops.i2c_gate_ctrl(chan->fe, 1);
> >  	fe = dvb_attach(tda18271c2dd_attach, chan->fe, i2c, 0x60);
> > @@ -240,7 +241,7 @@ static int tuner_tda18212_ping(struct ngene_channel *chan,
> >  static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct i2c_client *client;
> >  	struct tda18212_config config = {
> >  		.fe = chan->fe,
> > @@ -262,12 +263,6 @@ static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
> >  	else
> >  		board_info.addr = 0x60;
> >  
> > -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> > -	if (chan->number < 2)
> > -		i2c = &chan->dev->channel[0].i2c_adapter;
> > -	else
> > -		i2c = &chan->dev->channel[1].i2c_adapter;
> > -
> >  	/*
> >  	 * due to a hardware quirk with the I2C gate on the stv0367+tda18212
> >  	 * combo, the tda18212 must be probed by reading it's id _twice_ when
> > @@ -320,7 +315,7 @@ static int tuner_attach_probe(struct ngene_channel *chan)
> >  static int demod_attach_stv0900(struct ngene_channel *chan)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct stv090x_config *feconf = (struct stv090x_config *)
> >  		chan->dev->card_info->fe_config[chan->number];
> >  
> > @@ -620,7 +615,7 @@ static int port_has_xo2(struct i2c_adapter *i2c, u8 *type, u8 *id)
> >  static int cineS2_probe(struct ngene_channel *chan)
> >  {
> >  	struct device *pdev = &chan->dev->pci_dev->dev;
> > -	struct i2c_adapter *i2c;
> > +	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
> >  	struct stv090x_config *fe_conf;
> >  	u8 buf[3];
> >  	u8 xo2_type, xo2_id, xo2_demodtype;
> > @@ -628,12 +623,6 @@ static int cineS2_probe(struct ngene_channel *chan)
> >  	struct i2c_msg i2c_msg = { .flags = 0, .buf = buf };
> >  	int rc;
> >  
> > -	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
> > -	if (chan->number < 2)
> > -		i2c = &chan->dev->channel[0].i2c_adapter;
> > -	else
> > -		i2c = &chan->dev->channel[1].i2c_adapter;
> > -
> >  	if (port_has_xo2(i2c, &xo2_type, &xo2_id)) {
> >  		xo2_id >>= 2;
> >  		dev_dbg(pdev, "XO2 on channel %d (type %d, id %d)\n",
> 
> 
> 
> Thanks,
> Mauro



Thanks,
Mauro
diff mbox

Patch

diff --git a/drivers/media/pci/ngene/ngene-cards.c b/drivers/media/pci/ngene/ngene-cards.c
index 00b100660784..dff55c7c9f86 100644
--- a/drivers/media/pci/ngene/ngene-cards.c
+++ b/drivers/media/pci/ngene/ngene-cards.c
@@ -118,17 +118,25 @@  static int i2c_read_reg(struct i2c_adapter *adapter, u8 adr, u8 reg, u8 *val)
 /* Demod/tuner attachment ***************************************************/
 /****************************************************************************/
 
+static struct i2c_adapter *i2c_adapter_from_chan(struct ngene_channel *chan)
+{
+	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
+	if (chan->number < 2)
+		return &chan->dev->channel[0].i2c_adapter;
+
+	return &chan->dev->channel[1].i2c_adapter;
+}
+
 static int tuner_attach_stv6110(struct ngene_channel *chan)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct stv090x_config *feconf = (struct stv090x_config *)
 		chan->dev->card_info->fe_config[chan->number];
 	struct stv6110x_config *tunerconf = (struct stv6110x_config *)
 		chan->dev->card_info->tuner_config[chan->number];
 	const struct stv6110x_devctl *ctl;
 
-	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
 	if (chan->number < 2)
 		i2c = &chan->dev->channel[0].i2c_adapter;
 	else
@@ -158,16 +166,10 @@  static int tuner_attach_stv6110(struct ngene_channel *chan)
 static int tuner_attach_stv6111(struct ngene_channel *chan)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct dvb_frontend *fe;
 	u8 adr = 4 + ((chan->number & 1) ? 0x63 : 0x60);
 
-	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
-	if (chan->number < 2)
-		i2c = &chan->dev->channel[0].i2c_adapter;
-	else
-		i2c = &chan->dev->channel[1].i2c_adapter;
-
 	fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr);
 	if (!fe) {
 		fe = dvb_attach(stv6111_attach, chan->fe, i2c, adr & ~4);
@@ -197,10 +199,9 @@  static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
 static int tuner_attach_tda18271(struct ngene_channel *chan)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct dvb_frontend *fe;
 
-	i2c = &chan->dev->channel[0].i2c_adapter;
 	if (chan->fe->ops.i2c_gate_ctrl)
 		chan->fe->ops.i2c_gate_ctrl(chan->fe, 1);
 	fe = dvb_attach(tda18271c2dd_attach, chan->fe, i2c, 0x60);
@@ -240,7 +241,7 @@  static int tuner_tda18212_ping(struct ngene_channel *chan,
 static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct i2c_client *client;
 	struct tda18212_config config = {
 		.fe = chan->fe,
@@ -262,12 +263,6 @@  static int tuner_attach_tda18212(struct ngene_channel *chan, u32 dmdtype)
 	else
 		board_info.addr = 0x60;
 
-	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
-	if (chan->number < 2)
-		i2c = &chan->dev->channel[0].i2c_adapter;
-	else
-		i2c = &chan->dev->channel[1].i2c_adapter;
-
 	/*
 	 * due to a hardware quirk with the I2C gate on the stv0367+tda18212
 	 * combo, the tda18212 must be probed by reading it's id _twice_ when
@@ -320,7 +315,7 @@  static int tuner_attach_probe(struct ngene_channel *chan)
 static int demod_attach_stv0900(struct ngene_channel *chan)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct stv090x_config *feconf = (struct stv090x_config *)
 		chan->dev->card_info->fe_config[chan->number];
 
@@ -620,7 +615,7 @@  static int port_has_xo2(struct i2c_adapter *i2c, u8 *type, u8 *id)
 static int cineS2_probe(struct ngene_channel *chan)
 {
 	struct device *pdev = &chan->dev->pci_dev->dev;
-	struct i2c_adapter *i2c;
+	struct i2c_adapter *i2c = i2c_adapter_from_chan(chan);
 	struct stv090x_config *fe_conf;
 	u8 buf[3];
 	u8 xo2_type, xo2_id, xo2_demodtype;
@@ -628,12 +623,6 @@  static int cineS2_probe(struct ngene_channel *chan)
 	struct i2c_msg i2c_msg = { .flags = 0, .buf = buf };
 	int rc;
 
-	/* tuner 1+2: i2c adapter #0, tuner 3+4: i2c adapter #1 */
-	if (chan->number < 2)
-		i2c = &chan->dev->channel[0].i2c_adapter;
-	else
-		i2c = &chan->dev->channel[1].i2c_adapter;
-
 	if (port_has_xo2(i2c, &xo2_type, &xo2_id)) {
 		xo2_id >>= 2;
 		dev_dbg(pdev, "XO2 on channel %d (type %d, id %d)\n",