All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] cx231xx: House cleaning
@ 2018-04-17 16:39 Brad Love
  2018-04-17 16:39 ` [PATCH 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
                   ` (8 more replies)
  0 siblings, 9 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Included in this patch set is:
- Bugfix for a device not working
- Some clean up and value corrections
- Conversion to new dvb i2c helpers
- Update of device from old dvb attach to i2c device
- Dependency fixes
- Style fixes


Brad Love (9):
  cx231xx: Fix several incorrect demod addresses
  cx231xx: Use board profile values for addresses
  cx231xx: Style fix for struct zero init
  cx231xx: [bug] Ignore an i2c mux adapter
  cx231xx: Switch to using new dvb i2c helpers
  cx231xx: Update 955Q from dvb attach to i2c device
  cx231xx: Remove unnecessary parameter clear
  cx231xx: Remove RC_CORE dependency
  cx231xx: Add I2C_MUX dependency

 drivers/media/usb/cx231xx/Kconfig         |   1 -
 drivers/media/usb/cx231xx/cx231xx-cards.c |   6 +-
 drivers/media/usb/cx231xx/cx231xx-dvb.c   | 365 ++++++++----------------------
 3 files changed, 94 insertions(+), 278 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/9] cx231xx: Fix several incorrect demod addresses
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 2/9] cx231xx: Use board profile values for addresses Brad Love
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Now the board values match the hard coded
constants used in the dvb initialization.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-cards.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
index c76b210..5b54e73 100644
--- a/drivers/media/usb/cx231xx/cx231xx-cards.c
+++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
@@ -715,7 +715,7 @@ struct cx231xx_board cx231xx_boards[] = {
 		.tuner_i2c_master = I2C_1_MUX_3,
 		.demod_i2c_master = I2C_1_MUX_3,
 		.has_dvb = 1,
-		.demod_addr = 0x0e,
+		.demod_addr = 0x64, /* 0xc8 >> 1 */
 		.norm = V4L2_STD_PAL,
 
 		.input = {{
@@ -754,7 +754,7 @@ struct cx231xx_board cx231xx_boards[] = {
 		.tuner_i2c_master = I2C_1_MUX_3,
 		.demod_i2c_master = I2C_1_MUX_3,
 		.has_dvb = 1,
-		.demod_addr = 0x0e,
+		.demod_addr = 0x64, /* 0xc8 >> 1 */
 		.norm = V4L2_STD_PAL,
 
 		.input = {{
@@ -793,7 +793,7 @@ struct cx231xx_board cx231xx_boards[] = {
 		.tuner_i2c_master = I2C_1_MUX_3,
 		.demod_i2c_master = I2C_1_MUX_3,
 		.has_dvb = 1,
-		.demod_addr = 0x0e,
+		.demod_addr = 0x59, /* 0xb2 >> 1 */
 		.norm = V4L2_STD_NTSC,
 
 		.input = {{
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/9] cx231xx: Use board profile values for addresses
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
  2018-04-17 16:39 ` [PATCH 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-19 18:10   ` Matthias Schwarzott
  2018-04-17 16:39 ` [PATCH 3/9] cx231xx: Style fix for struct zero init Brad Love
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Replace all usage of hard coded values with
the proper field from the board profile.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 67ed667..99f1a77 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -728,7 +728,7 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
-			       0x60, tuner_i2c,
+			       dev->board.tuner_addr, tuner_i2c,
 			       &cnxt_rde253s_tunerconfig)) {
 			result = -EINVAL;
 			goto out_free;
@@ -752,7 +752,7 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
-			       0x60, tuner_i2c,
+			       dev->board.tuner_addr, tuner_i2c,
 			       &cnxt_rde253s_tunerconfig)) {
 			result = -EINVAL;
 			goto out_free;
@@ -779,7 +779,7 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
-			   0x60, tuner_i2c,
+			   dev->board.tuner_addr, tuner_i2c,
 			   &hcw_tda18271_config);
 		break;
 
@@ -797,7 +797,7 @@ static int dvb_init(struct cx231xx *dev)
 
 		memset(&info, 0, sizeof(struct i2c_board_info));
 		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
-		info.addr = 0x64;
+		info.addr = dev->board.demod_addr;
 		info.platform_data = &si2165_pdata;
 		request_module(info.type);
 		client = i2c_new_device(demod_i2c, &info);
@@ -822,8 +822,7 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
-			0x60,
-			tuner_i2c,
+			dev->board.tuner_addr, tuner_i2c,
 			&hcw_tda18271_config);
 
 		dev->cx231xx_reset_analog_tuner = NULL;
@@ -844,7 +843,7 @@ static int dvb_init(struct cx231xx *dev)
 
 		memset(&info, 0, sizeof(struct i2c_board_info));
 		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
-		info.addr = 0x64;
+		info.addr = dev->board.demod_addr;
 		info.platform_data = &si2165_pdata;
 		request_module(info.type);
 		client = i2c_new_device(demod_i2c, &info);
@@ -879,7 +878,7 @@ static int dvb_init(struct cx231xx *dev)
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
 		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = 0x60;
+		info.addr = dev->board.tuner_addr;
 		info.platform_data = &si2157_config;
 		request_module("si2157");
 
@@ -938,7 +937,7 @@ static int dvb_init(struct cx231xx *dev)
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
 		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = 0x60;
+		info.addr = dev->board.tuner_addr;
 		info.platform_data = &si2157_config;
 		request_module("si2157");
 
@@ -985,7 +984,7 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
-			   0x60, tuner_i2c,
+			   dev->board.tuner_addr, tuner_i2c,
 			   &pv_tda18271_config);
 		break;
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/9] cx231xx: Style fix for struct zero init
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
  2018-04-17 16:39 ` [PATCH 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
  2018-04-17 16:39 ` [PATCH 2/9] cx231xx: Use board profile values for addresses Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Replace zero fill memset inits with
equivalent {} in declaration

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 99f1a77..12f2dcc 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -787,10 +787,9 @@ static int dvb_init(struct cx231xx *dev)
 	{
 		struct i2c_client *client;
 		struct i2c_board_info info;
-		struct si2165_platform_data si2165_pdata;
+		struct si2165_platform_data si2165_pdata = {};
 
 		/* attach demod */
-		memset(&si2165_pdata, 0, sizeof(si2165_pdata));
 		si2165_pdata.fe = &dev->dvb->frontend[0];
 		si2165_pdata.chip_mode = SI2165_MODE_PLL_XTAL;
 		si2165_pdata.ref_freq_hz = 16000000;
@@ -832,11 +831,10 @@ static int dvb_init(struct cx231xx *dev)
 	{
 		struct i2c_client *client;
 		struct i2c_board_info info;
-		struct si2165_platform_data si2165_pdata;
-		struct si2157_config si2157_config;
+		struct si2165_platform_data si2165_pdata = {};
+		struct si2157_config si2157_config = {};
 
 		/* attach demod */
-		memset(&si2165_pdata, 0, sizeof(si2165_pdata));
 		si2165_pdata.fe = &dev->dvb->frontend[0];
 		si2165_pdata.chip_mode = SI2165_MODE_PLL_EXT;
 		si2165_pdata.ref_freq_hz = 24000000;
@@ -870,7 +868,6 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		/* attach tuner */
-		memset(&si2157_config, 0, sizeof(si2157_config));
 		si2157_config.fe = dev->dvb->frontend[0];
 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
 		si2157_config.mdev = dev->media_dev;
@@ -907,7 +904,7 @@ static int dvb_init(struct cx231xx *dev)
 	{
 		struct i2c_client *client;
 		struct i2c_board_info info;
-		struct si2157_config si2157_config;
+		struct si2157_config si2157_config = {};
 
 		memset(&info, 0, sizeof(struct i2c_board_info));
 
@@ -929,7 +926,6 @@ static int dvb_init(struct cx231xx *dev)
 		dvb->frontend[0]->callback = cx231xx_tuner_callback;
 
 		/* attach tuner */
-		memset(&si2157_config, 0, sizeof(si2157_config));
 		si2157_config.fe = dev->dvb->frontend[0];
 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
 		si2157_config.mdev = dev->media_dev;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/9] [bug] cx231xx: Ignore an i2c mux adapter
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (2 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 3/9] cx231xx: Style fix for struct zero init Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Hauppauge 935C cannot communicate with the si2157
when using the mux adapter returned by the si2168,
so disable it to fix the device.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 12f2dcc..681610f 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -1146,7 +1146,7 @@ static int dvb_init(struct cx231xx *dev)
 		info.platform_data = &si2157_config;
 		request_module("si2157");
 
-		client = i2c_new_device(adapter, &info);
+		client = i2c_new_device(tuner_i2c, &info);
 		if (client == NULL || client->dev.driver == NULL) {
 			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
 			i2c_unregister_device(dvb->i2c_client_demod[0]);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (3 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-19 18:09   ` Matthias Schwarzott
  2018-04-17 16:39 ` [PATCH 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Mostly very straight forward replace of blocks with equivalent code.

Cleanup added at end of dvb_init in case of failure.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 331 ++++++++------------------------
 1 file changed, 82 insertions(+), 249 deletions(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 681610f..318a6cd 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -613,23 +613,18 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
 		dvb_frontend_detach(dvb->frontend[1]);
 	dvb_frontend_detach(dvb->frontend[0]);
 	dvb_unregister_adapter(&dvb->adapter);
+
 	/* remove I2C tuner */
 	client = dvb->i2c_client_tuner;
-	if (client) {
-		module_put(client->dev.driver->owner);
-		i2c_unregister_device(client);
-	}
-	/* remove I2C demod */
+	if (client)
+		dvb_module_release(client);
+	/* remove I2C demod(s) */
 	client = dvb->i2c_client_demod[1];
-	if (client) {
-		module_put(client->dev.driver->owner);
-		i2c_unregister_device(client);
-	}
+	if (client)
+		dvb_module_release(client);
 	client = dvb->i2c_client_demod[0];
-	if (client) {
-		module_put(client->dev.driver->owner);
-		i2c_unregister_device(client);
-	}
+	if (client)
+		dvb_module_release(client);
 }
 
 static int dvb_init(struct cx231xx *dev)
@@ -638,6 +633,8 @@ static int dvb_init(struct cx231xx *dev)
 	struct cx231xx_dvb *dvb;
 	struct i2c_adapter *tuner_i2c;
 	struct i2c_adapter *demod_i2c;
+	struct i2c_client *client;
+	struct i2c_adapter *adapter;
 
 	if (!dev->board.has_dvb) {
 		/* This device does not support the extension */
@@ -785,8 +782,6 @@ static int dvb_init(struct cx231xx *dev)
 
 	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx:
 	{
-		struct i2c_client *client;
-		struct i2c_board_info info;
 		struct si2165_platform_data si2165_pdata = {};
 
 		/* attach demod */
@@ -794,25 +789,14 @@ static int dvb_init(struct cx231xx *dev)
 		si2165_pdata.chip_mode = SI2165_MODE_PLL_XTAL;
 		si2165_pdata.ref_freq_hz = 16000000;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &si2165_pdata;
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
-			dev_err(dev->dev,
-				"Failed to attach SI2165 front end\n");
-			result = -EINVAL;
-			goto out_free;
-		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2165", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&si2165_pdata);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dvb->i2c_client_demod[0] = client;
 
 		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
@@ -829,8 +813,6 @@ static int dvb_init(struct cx231xx *dev)
 	}
 	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx:
 	{
-		struct i2c_client *client;
-		struct i2c_board_info info;
 		struct si2165_platform_data si2165_pdata = {};
 		struct si2157_config si2157_config = {};
 
@@ -839,29 +821,16 @@ static int dvb_init(struct cx231xx *dev)
 		si2165_pdata.chip_mode = SI2165_MODE_PLL_EXT;
 		si2165_pdata.ref_freq_hz = 24000000;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &si2165_pdata;
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
-			dev_err(dev->dev,
-				"Failed to attach SI2165 front end\n");
-			result = -EINVAL;
-			goto out_free;
-		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2165", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&si2165_pdata);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dvb->i2c_client_demod[0] = client;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-
 		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
 
 		/* define general-purpose callback pointer */
@@ -874,27 +843,15 @@ static int dvb_init(struct cx231xx *dev)
 #endif
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
-		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = dev->board.tuner_addr;
-		info.platform_data = &si2157_config;
-		request_module("si2157");
-
-		client = i2c_new_device(
-			tuner_i2c,
-			&info);
-		if (client == NULL || client->dev.driver == NULL) {
-			dvb_frontend_detach(dev->dvb->frontend[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
 
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
-			dvb_frontend_detach(dev->dvb->frontend[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2157", NULL, tuner_i2c,
+						dev->board.tuner_addr,
+						&si2157_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dev->cx231xx_reset_analog_tuner = NULL;
 
 		dev->dvb->i2c_client_tuner = client;
@@ -902,12 +859,8 @@ static int dvb_init(struct cx231xx *dev)
 	}
 	case CX231XX_BOARD_HAUPPAUGE_955Q:
 	{
-		struct i2c_client *client;
-		struct i2c_board_info info;
 		struct si2157_config si2157_config = {};
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-
 		dev->dvb->frontend[0] = dvb_attach(lgdt3306a_attach,
 			&hauppauge_955q_lgdt3306a_config,
 			demod_i2c
@@ -932,27 +885,15 @@ static int dvb_init(struct cx231xx *dev)
 #endif
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
-		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = dev->board.tuner_addr;
-		info.platform_data = &si2157_config;
-		request_module("si2157");
-
-		client = i2c_new_device(
-			tuner_i2c,
-			&info);
-		if (client == NULL || client->dev.driver == NULL) {
-			dvb_frontend_detach(dev->dvb->frontend[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
 
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
-			dvb_frontend_detach(dev->dvb->frontend[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2157", NULL, tuner_i2c,
+						dev->board.tuner_addr,
+						&si2157_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dev->cx231xx_reset_analog_tuner = NULL;
 
 		dev->dvb->i2c_client_tuner = client;
@@ -988,9 +929,6 @@ static int dvb_init(struct cx231xx *dev)
 	{
 		struct si2157_config si2157_config = {};
 		struct si2168_config si2168_config = {};
-		struct i2c_board_info info = {};
-		struct i2c_client *client;
-		struct i2c_adapter *adapter;
 
 		/* attach demodulator chip */
 		si2168_config.ts_mode = SI2168_TS_SERIAL; /* from *.inf file */
@@ -998,24 +936,14 @@ static int dvb_init(struct cx231xx *dev)
 		si2168_config.i2c_adapter = &adapter;
 		si2168_config.ts_clock_inv = true;
 
-		strlcpy(info.type, "si2168", sizeof(info.type));
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &si2168_config;
-
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-
-		if (client == NULL || client->dev.driver == NULL) {
-			result = -ENODEV;
-			goto out_free;
-		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2168", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&si2168_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dvb->i2c_client_demod[0] = client;
 
 		/* attach tuner chip */
@@ -1026,37 +954,20 @@ static int dvb_init(struct cx231xx *dev)
 		si2157_config.if_port = 1;
 		si2157_config.inversion = false;
 
-		memset(&info, 0, sizeof(info));
-		strlcpy(info.type, "si2157", sizeof(info.type));
-		info.addr = dev->board.tuner_addr;
-		info.platform_data = &si2157_config;
-
-		request_module(info.type);
-		client = i2c_new_device(tuner_i2c, &info);
-
-		if (client == NULL || client->dev.driver == NULL) {
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2157", NULL, tuner_i2c,
+						dev->board.tuner_addr,
+						&si2157_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dev->cx231xx_reset_analog_tuner = NULL;
 		dev->dvb->i2c_client_tuner = client;
 		break;
 	}
 	case CX231XX_BOARD_ASTROMETA_T2HYBRID:
 	{
-		struct i2c_client *client;
-		struct i2c_board_info info = {};
 		struct mn88473_config mn88473_config = {};
 
 		/* attach demodulator chip */
@@ -1064,24 +975,14 @@ static int dvb_init(struct cx231xx *dev)
 		mn88473_config.xtal = 25000000;
 		mn88473_config.fe = &dev->dvb->frontend[0];
 
-		strlcpy(info.type, "mn88473", sizeof(info.type));
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &mn88473_config;
-
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-
-		if (client == NULL || client->dev.driver == NULL) {
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("mn88473", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&mn88473_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dvb->i2c_client_demod[0] = client;
 
 		/* define general-purpose callback pointer */
@@ -1095,9 +996,6 @@ static int dvb_init(struct cx231xx *dev)
 	}
 	case CX231XX_BOARD_HAUPPAUGE_935C:
 	{
-		struct i2c_client *client;
-		struct i2c_adapter *adapter;
-		struct i2c_board_info info = {};
 		struct si2157_config si2157_config = {};
 		struct si2168_config si2168_config = {};
 
@@ -1107,25 +1005,14 @@ static int dvb_init(struct cx231xx *dev)
 		si2168_config.i2c_adapter = &adapter;
 		si2168_config.ts_clock_inv = true;
 
-		strlcpy(info.type, "si2168", sizeof(info.type));
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &si2168_config;
-
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-		if (client == NULL || client->dev.driver == NULL) {
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2168", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&si2168_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			dev_err(dev->dev,
-				"Failed to attach %s frontend.\n", info.type);
-			i2c_unregister_device(client);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dvb->i2c_client_demod[0] = client;
 		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
 
@@ -1140,40 +1027,21 @@ static int dvb_init(struct cx231xx *dev)
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = dev->board.tuner_addr;
-		info.platform_data = &si2157_config;
-		request_module("si2157");
-
-		client = i2c_new_device(tuner_i2c, &info);
-		if (client == NULL || client->dev.driver == NULL) {
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			dev_err(dev->dev,
-				"Failed to obtain %s tuner.\n",	info.type);
-			i2c_unregister_device(client);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2157", NULL, tuner_i2c,
+						dev->board.tuner_addr,
+						&si2157_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
 		dev->cx231xx_reset_analog_tuner = NULL;
 		dev->dvb->i2c_client_tuner = client;
 		break;
 	}
 	case CX231XX_BOARD_HAUPPAUGE_975:
 	{
-		struct i2c_client *client;
-		struct i2c_adapter *adapter;
 		struct i2c_adapter *adapter2;
-		struct i2c_board_info info = {};
 		struct si2157_config si2157_config = {};
 		struct lgdt3306a_config lgdt3306a_config = {};
 		struct si2168_config si2168_config = {};
@@ -1184,25 +1052,14 @@ static int dvb_init(struct cx231xx *dev)
 		lgdt3306a_config.i2c_adapter = &adapter;
 		lgdt3306a_config.deny_i2c_rptr = 0;
 
-		strlcpy(info.type, "lgdt3306a", sizeof(info.type));
-		info.addr = dev->board.demod_addr;
-		info.platform_data = &lgdt3306a_config;
-
-		request_module(info.type);
-		client = i2c_new_device(demod_i2c, &info);
-		if (client == NULL || client->dev.driver == NULL) {
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&lgdt3306a_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			dev_err(dev->dev,
-				"Failed to attach %s frontend.\n", info.type);
-			i2c_unregister_device(client);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dvb->i2c_client_demod[0] = client;
 
 		/* attach second demodulator chip */
@@ -1211,30 +1068,14 @@ static int dvb_init(struct cx231xx *dev)
 		si2168_config.i2c_adapter = &adapter2;
 		si2168_config.ts_clock_inv = true;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-		strlcpy(info.type, "si2168", sizeof(info.type));
-		info.addr = dev->board.demod_addr2;
-		info.platform_data = &si2168_config;
-
-		request_module(info.type);
-		client = i2c_new_device(adapter, &info);
-		if (client == NULL || client->dev.driver == NULL) {
-			dev_err(dev->dev,
-				"Failed to attach %s frontend.\n", info.type);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2168", NULL, adapter,
+						dev->board.demod_addr2,
+						&si2168_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			i2c_unregister_device(client);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dvb->i2c_client_demod[1] = client;
 		dvb->frontend[1]->id = 1;
 
@@ -1250,34 +1091,14 @@ static int dvb_init(struct cx231xx *dev)
 		si2157_config.if_port = 1;
 		si2157_config.inversion = true;
 
-		memset(&info, 0, sizeof(struct i2c_board_info));
-		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
-		info.addr = dev->board.tuner_addr;
-		info.platform_data = &si2157_config;
-		request_module("si2157");
-
-		client = i2c_new_device(adapter, &info);
-		if (client == NULL || client->dev.driver == NULL) {
-			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[1]);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("si2157", NULL, adapter,
+						dev->board.tuner_addr,
+						&si2157_config);
+		if (!client) {
 			result = -ENODEV;
 			goto out_free;
 		}
-
-		if (!try_module_get(client->dev.driver->owner)) {
-			dev_err(dev->dev,
-				"Failed to obtain %s tuner.\n",	info.type);
-			i2c_unregister_device(client);
-			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[1]);
-			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
-			i2c_unregister_device(dvb->i2c_client_demod[0]);
-			result = -ENODEV;
-			goto out_free;
-		}
-
 		dev->cx231xx_reset_analog_tuner = NULL;
 		dvb->i2c_client_tuner = client;
 
@@ -1316,6 +1137,18 @@ static int dvb_init(struct cx231xx *dev)
 	return result;
 
 out_free:
+	/* remove I2C tuner */
+	client = dvb->i2c_client_tuner;
+	if (client)
+		dvb_module_release(client);
+	/* remove I2C demod(s) */
+	client = dvb->i2c_client_demod[1];
+	if (client)
+		dvb_module_release(client);
+	client = dvb->i2c_client_demod[0];
+	if (client)
+		dvb_module_release(client);
+
 	kfree(dvb);
 	dev->dvb = NULL;
 	goto ret;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 6/9] cx231xx: Update 955Q from dvb attach to i2c device
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (4 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 7/8] cx231xx: Remove unnecessary parameter clear Brad Love
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

Trim out some unused config params. Use the i2c mux
adapter returned by frontend with the tuner.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index f5903e6..ac1d8e6 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -156,10 +156,8 @@ static struct tda18271_config pv_tda18271_config = {
 };
 
 static struct lgdt3306a_config hauppauge_955q_lgdt3306a_config = {
-	.i2c_addr           = 0x59,
 	.qam_if_khz         = 4000,
 	.vsb_if_khz         = 3250,
-	.deny_i2c_rptr      = 1,
 	.spectral_inversion = 1,
 	.mpeg_mode          = LGDT3306A_MPEG_SERIAL,
 	.tpclk_edge         = LGDT3306A_TPCLK_RISING_EDGE,
@@ -860,18 +858,22 @@ static int dvb_init(struct cx231xx *dev)
 	case CX231XX_BOARD_HAUPPAUGE_955Q:
 	{
 		struct si2157_config si2157_config = {};
+		struct lgdt3306a_config lgdt3306a_config = {};
 
-		dev->dvb->frontend[0] = dvb_attach(lgdt3306a_attach,
-			&hauppauge_955q_lgdt3306a_config,
-			demod_i2c
-			);
+		/* attach first demodulator chip */
+		lgdt3306a_config = hauppauge_955q_lgdt3306a_config;
+		lgdt3306a_config.fe = &dev->dvb->frontend[0];
+		lgdt3306a_config.i2c_adapter = &adapter;
 
-		if (!dev->dvb->frontend[0]) {
-			dev_err(dev->dev,
-				"Failed to attach LGDT3306A frontend.\n");
-			result = -EINVAL;
+		/* perform tuner probe/init/attach */
+		client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
+						dev->board.demod_addr,
+						&lgdt3306a_config);
+		if (!client) {
+			result = -ENODEV;
 			goto out_free;
 		}
+		dvb->i2c_client_demod[0] = client;
 
 		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 7/8] cx231xx: Remove unnecessary parameter clear
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (5 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 8/9] cx231xx: Remove RC_CORE dependency Brad Love
  2018-04-17 16:39 ` [PATCH 9/9] cx231xx: Add I2C_MUX dependency Brad Love
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

The default is now 0, no need to override

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/cx231xx-dvb.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index ac1d8e6..7fd096b 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -1052,7 +1052,6 @@ static int dvb_init(struct cx231xx *dev)
 		lgdt3306a_config = hauppauge_955q_lgdt3306a_config;
 		lgdt3306a_config.fe = &dev->dvb->frontend[0];
 		lgdt3306a_config.i2c_adapter = &adapter;
-		lgdt3306a_config.deny_i2c_rptr = 0;
 
 		/* perform tuner probe/init/attach */
 		client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 8/9] cx231xx: Remove RC_CORE dependency
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (6 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 7/8] cx231xx: Remove unnecessary parameter clear Brad Love
@ 2018-04-17 16:39 ` Brad Love
  2018-04-17 16:39 ` [PATCH 9/9] cx231xx: Add I2C_MUX dependency Brad Love
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

VIDEO_CX231XX_RC requires RC_CORE, but VIDEO_CX231XX
does not require RC to compile or function.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig
index 6276d9b..8a6acc2 100644
--- a/drivers/media/usb/cx231xx/Kconfig
+++ b/drivers/media/usb/cx231xx/Kconfig
@@ -3,7 +3,6 @@ config VIDEO_CX231XX
 	depends on VIDEO_DEV && I2C
 	select VIDEO_TUNER
 	select VIDEO_TVEEPROM
-	depends on RC_CORE
 	select VIDEOBUF_VMALLOC
 	select VIDEO_CX25840
 	select VIDEO_CX2341X
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 9/9] cx231xx: Add I2C_MUX dependency
  2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
                   ` (7 preceding siblings ...)
  2018-04-17 16:39 ` [PATCH 8/9] cx231xx: Remove RC_CORE dependency Brad Love
@ 2018-04-17 16:39 ` Brad Love
  8 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-17 16:39 UTC (permalink / raw)
  To: linux-media, mchehab; +Cc: Brad Love

cx231xx requires i2c mux adapter capability.

Signed-off-by: Brad Love <brad@nextdimension.cc>
---
 drivers/media/usb/cx231xx/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig
index 8a6acc2..98890a3 100644
--- a/drivers/media/usb/cx231xx/Kconfig
+++ b/drivers/media/usb/cx231xx/Kconfig
@@ -1,6 +1,6 @@
 config VIDEO_CX231XX
 	tristate "Conexant cx231xx USB video capture support"
-	depends on VIDEO_DEV && I2C
+	depends on VIDEO_DEV && I2C && I2C_MUX
 	select VIDEO_TUNER
 	select VIDEO_TVEEPROM
 	select VIDEOBUF_VMALLOC
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers
  2018-04-17 16:39 ` [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
@ 2018-04-19 18:09   ` Matthias Schwarzott
  2018-04-23 17:26     ` Brad Love
  0 siblings, 1 reply; 15+ messages in thread
From: Matthias Schwarzott @ 2018-04-19 18:09 UTC (permalink / raw)
  To: Brad Love, linux-media, mchehab

Am 17.04.2018 um 18:39 schrieb Brad Love:
> Mostly very straight forward replace of blocks with equivalent code.
> 
> Cleanup added at end of dvb_init in case of failure.
> 
Hi Brad,

I have some suggestions. See below.

Matthias

> Signed-off-by: Brad Love <brad@nextdimension.cc>
> ---
>  drivers/media/usb/cx231xx/cx231xx-dvb.c | 331 ++++++++------------------------
>  1 file changed, 82 insertions(+), 249 deletions(-)
> 
> diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
> index 681610f..318a6cd 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
> @@ -613,23 +613,18 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
>  		dvb_frontend_detach(dvb->frontend[1]);
>  	dvb_frontend_detach(dvb->frontend[0]);
>  	dvb_unregister_adapter(&dvb->adapter);
> +
>  	/* remove I2C tuner */
>  	client = dvb->i2c_client_tuner;
> -	if (client) {
> -		module_put(client->dev.driver->owner);
> -		i2c_unregister_device(client);
> -	}
> -	/* remove I2C demod */
> +	if (client)
> +		dvb_module_release(client);
The pointer check is not needed, dvb_module_release does check itself
for NULL.

Other drivers added code to set the client-pointers to NULL after
releasing it.

I suggest to do it like this:
/* remove I2C tuner */
dvb_module_release(dvb->i2c_client_tuner);
dvb->i2c_client_tuner = NULL;


> +	/* remove I2C demod(s) */
>  	client = dvb->i2c_client_demod[1];
> -	if (client) {
> -		module_put(client->dev.driver->owner);
> -		i2c_unregister_device(client);
> -	}
> +	if (client)
> +		dvb_module_release(client);
>  	client = dvb->i2c_client_demod[0];
> -	if (client) {
> -		module_put(client->dev.driver->owner);
> -		i2c_unregister_device(client);
> -	}
> +	if (client)
> +		dvb_module_release(client);

>  }
>  
>  static int dvb_init(struct cx231xx *dev)
> @@ -638,6 +633,8 @@ static int dvb_init(struct cx231xx *dev)
>  	struct cx231xx_dvb *dvb;
>  	struct i2c_adapter *tuner_i2c;
>  	struct i2c_adapter *demod_i2c;
> +	struct i2c_client *client;
> +	struct i2c_adapter *adapter;
>  
>  	if (!dev->board.has_dvb) {
>  		/* This device does not support the extension */
> @@ -785,8 +782,6 @@ static int dvb_init(struct cx231xx *dev)
>  
>  	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_board_info info;
>  		struct si2165_platform_data si2165_pdata = {};
>  
>  		/* attach demod */
> @@ -794,25 +789,14 @@ static int dvb_init(struct cx231xx *dev)
>  		si2165_pdata.chip_mode = SI2165_MODE_PLL_XTAL;
>  		si2165_pdata.ref_freq_hz = 16000000;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &si2165_pdata;
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
> -			dev_err(dev->dev,
> -				"Failed to attach SI2165 front end\n");
> -			result = -EINVAL;
> -			goto out_free;
> -		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2165", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&si2165_pdata);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  
>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
> @@ -829,8 +813,6 @@ static int dvb_init(struct cx231xx *dev)
>  	}
>  	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_board_info info;
>  		struct si2165_platform_data si2165_pdata = {};
>  		struct si2157_config si2157_config = {};
>  
> @@ -839,29 +821,16 @@ static int dvb_init(struct cx231xx *dev)
>  		si2165_pdata.chip_mode = SI2165_MODE_PLL_EXT;
>  		si2165_pdata.ref_freq_hz = 24000000;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &si2165_pdata;
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
> -			dev_err(dev->dev,
> -				"Failed to attach SI2165 front end\n");
> -			result = -EINVAL;
> -			goto out_free;
> -		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2165", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&si2165_pdata);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -
>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
>  
>  		/* define general-purpose callback pointer */
> @@ -874,27 +843,15 @@ static int dvb_init(struct cx231xx *dev)
>  #endif
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = dev->board.tuner_addr;
> -		info.platform_data = &si2157_config;
> -		request_module("si2157");
> -
> -		client = i2c_new_device(
> -			tuner_i2c,
> -			&info);
> -		if (client == NULL || client->dev.driver == NULL) {
> -			dvb_frontend_detach(dev->dvb->frontend[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
>  
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> -			dvb_frontend_detach(dev->dvb->frontend[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
> +						dev->board.tuner_addr,
> +						&si2157_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dev->cx231xx_reset_analog_tuner = NULL;
>  
>  		dev->dvb->i2c_client_tuner = client;
> @@ -902,12 +859,8 @@ static int dvb_init(struct cx231xx *dev)
>  	}
>  	case CX231XX_BOARD_HAUPPAUGE_955Q:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_board_info info;
>  		struct si2157_config si2157_config = {};
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -
>  		dev->dvb->frontend[0] = dvb_attach(lgdt3306a_attach,
>  			&hauppauge_955q_lgdt3306a_config,
>  			demod_i2c
> @@ -932,27 +885,15 @@ static int dvb_init(struct cx231xx *dev)
>  #endif
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = dev->board.tuner_addr;
> -		info.platform_data = &si2157_config;
> -		request_module("si2157");
> -
> -		client = i2c_new_device(
> -			tuner_i2c,
> -			&info);
> -		if (client == NULL || client->dev.driver == NULL) {
> -			dvb_frontend_detach(dev->dvb->frontend[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
>  
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> -			dvb_frontend_detach(dev->dvb->frontend[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
> +						dev->board.tuner_addr,
> +						&si2157_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dev->cx231xx_reset_analog_tuner = NULL;
>  
>  		dev->dvb->i2c_client_tuner = client;
> @@ -988,9 +929,6 @@ static int dvb_init(struct cx231xx *dev)
>  	{
>  		struct si2157_config si2157_config = {};
>  		struct si2168_config si2168_config = {};
> -		struct i2c_board_info info = {};
> -		struct i2c_client *client;
> -		struct i2c_adapter *adapter;
>  
>  		/* attach demodulator chip */
>  		si2168_config.ts_mode = SI2168_TS_SERIAL; /* from *.inf file */
> @@ -998,24 +936,14 @@ static int dvb_init(struct cx231xx *dev)
>  		si2168_config.i2c_adapter = &adapter;
>  		si2168_config.ts_clock_inv = true;
>  
> -		strlcpy(info.type, "si2168", sizeof(info.type));
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &si2168_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -
> -		if (client == NULL || client->dev.driver == NULL) {
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2168", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&si2168_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  
>  		/* attach tuner chip */
> @@ -1026,37 +954,20 @@ static int dvb_init(struct cx231xx *dev)
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = false;
>  
> -		memset(&info, 0, sizeof(info));
> -		strlcpy(info.type, "si2157", sizeof(info.type));
> -		info.addr = dev->board.tuner_addr;
> -		info.platform_data = &si2157_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(tuner_i2c, &info);
> -
> -		if (client == NULL || client->dev.driver == NULL) {
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
> +						dev->board.tuner_addr,
> +						&si2157_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dev->cx231xx_reset_analog_tuner = NULL;
>  		dev->dvb->i2c_client_tuner = client;
>  		break;
>  	}
>  	case CX231XX_BOARD_ASTROMETA_T2HYBRID:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_board_info info = {};
>  		struct mn88473_config mn88473_config = {};
>  
>  		/* attach demodulator chip */
> @@ -1064,24 +975,14 @@ static int dvb_init(struct cx231xx *dev)
>  		mn88473_config.xtal = 25000000;
>  		mn88473_config.fe = &dev->dvb->frontend[0];
>  
> -		strlcpy(info.type, "mn88473", sizeof(info.type));
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &mn88473_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -
> -		if (client == NULL || client->dev.driver == NULL) {
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("mn88473", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&mn88473_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  
>  		/* define general-purpose callback pointer */
> @@ -1095,9 +996,6 @@ static int dvb_init(struct cx231xx *dev)
>  	}
>  	case CX231XX_BOARD_HAUPPAUGE_935C:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_adapter *adapter;
> -		struct i2c_board_info info = {};
>  		struct si2157_config si2157_config = {};
>  		struct si2168_config si2168_config = {};
>  
> @@ -1107,25 +1005,14 @@ static int dvb_init(struct cx231xx *dev)
>  		si2168_config.i2c_adapter = &adapter;
>  		si2168_config.ts_clock_inv = true;
>  
> -		strlcpy(info.type, "si2168", sizeof(info.type));
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &si2168_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -		if (client == NULL || client->dev.driver == NULL) {
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2168", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&si2168_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			dev_err(dev->dev,
> -				"Failed to attach %s frontend.\n", info.type);
> -			i2c_unregister_device(client);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
>  
> @@ -1140,40 +1027,21 @@ static int dvb_init(struct cx231xx *dev)
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = dev->board.tuner_addr;
> -		info.platform_data = &si2157_config;
> -		request_module("si2157");
> -
> -		client = i2c_new_device(tuner_i2c, &info);
> -		if (client == NULL || client->dev.driver == NULL) {
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			dev_err(dev->dev,
> -				"Failed to obtain %s tuner.\n",	info.type);
> -			i2c_unregister_device(client);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
> +						dev->board.tuner_addr,
> +						&si2157_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
>  		dev->cx231xx_reset_analog_tuner = NULL;
>  		dev->dvb->i2c_client_tuner = client;
>  		break;
>  	}
>  	case CX231XX_BOARD_HAUPPAUGE_975:
>  	{
> -		struct i2c_client *client;
> -		struct i2c_adapter *adapter;
>  		struct i2c_adapter *adapter2;
> -		struct i2c_board_info info = {};
>  		struct si2157_config si2157_config = {};
>  		struct lgdt3306a_config lgdt3306a_config = {};
>  		struct si2168_config si2168_config = {};
> @@ -1184,25 +1052,14 @@ static int dvb_init(struct cx231xx *dev)
>  		lgdt3306a_config.i2c_adapter = &adapter;
>  		lgdt3306a_config.deny_i2c_rptr = 0;
>  
> -		strlcpy(info.type, "lgdt3306a", sizeof(info.type));
> -		info.addr = dev->board.demod_addr;
> -		info.platform_data = &lgdt3306a_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(demod_i2c, &info);
> -		if (client == NULL || client->dev.driver == NULL) {
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
> +						dev->board.demod_addr,
> +						&lgdt3306a_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			dev_err(dev->dev,
> -				"Failed to attach %s frontend.\n", info.type);
> -			i2c_unregister_device(client);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dvb->i2c_client_demod[0] = client;
>  
>  		/* attach second demodulator chip */
> @@ -1211,30 +1068,14 @@ static int dvb_init(struct cx231xx *dev)
>  		si2168_config.i2c_adapter = &adapter2;
>  		si2168_config.ts_clock_inv = true;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -		strlcpy(info.type, "si2168", sizeof(info.type));
> -		info.addr = dev->board.demod_addr2;
> -		info.platform_data = &si2168_config;
> -
> -		request_module(info.type);
> -		client = i2c_new_device(adapter, &info);
> -		if (client == NULL || client->dev.driver == NULL) {
> -			dev_err(dev->dev,
> -				"Failed to attach %s frontend.\n", info.type);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2168", NULL, adapter,
> +						dev->board.demod_addr2,
> +						&si2168_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			i2c_unregister_device(client);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dvb->i2c_client_demod[1] = client;
>  		dvb->frontend[1]->id = 1;
>  
> @@ -1250,34 +1091,14 @@ static int dvb_init(struct cx231xx *dev)
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
>  
> -		memset(&info, 0, sizeof(struct i2c_board_info));
> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = dev->board.tuner_addr;
> -		info.platform_data = &si2157_config;
> -		request_module("si2157");
> -
> -		client = i2c_new_device(adapter, &info);
> -		if (client == NULL || client->dev.driver == NULL) {
> -			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[1]);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> +		/* perform tuner probe/init/attach */
> +		client = dvb_module_probe("si2157", NULL, adapter,
> +						dev->board.tuner_addr,
> +						&si2157_config);
> +		if (!client) {
>  			result = -ENODEV;
>  			goto out_free;
>  		}
> -
> -		if (!try_module_get(client->dev.driver->owner)) {
> -			dev_err(dev->dev,
> -				"Failed to obtain %s tuner.\n",	info.type);
> -			i2c_unregister_device(client);
> -			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[1]);
> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
> -			result = -ENODEV;
> -			goto out_free;
> -		}
> -
>  		dev->cx231xx_reset_analog_tuner = NULL;
>  		dvb->i2c_client_tuner = client;
>  
> @@ -1316,6 +1137,18 @@ static int dvb_init(struct cx231xx *dev)
>  	return result;
>  
>  out_free:
> +	/* remove I2C tuner */
> +	client = dvb->i2c_client_tuner;
> +	if (client)
> +		dvb_module_release(client);
> +	/* remove I2C demod(s) */
> +	client = dvb->i2c_client_demod[1];
> +	if (client)
> +		dvb_module_release(client);
> +	client = dvb->i2c_client_demod[0];
> +	if (client)
> +		dvb_module_release(client);
> +
Same as above, no need to check pointer.
Maybe set pointers to NULL afterwards.

>  	kfree(dvb);
>  	dev->dvb = NULL;
>  	goto ret;
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/9] cx231xx: Use board profile values for addresses
  2018-04-17 16:39 ` [PATCH 2/9] cx231xx: Use board profile values for addresses Brad Love
@ 2018-04-19 18:10   ` Matthias Schwarzott
  2018-04-23 17:50     ` Brad Love
  0 siblings, 1 reply; 15+ messages in thread
From: Matthias Schwarzott @ 2018-04-19 18:10 UTC (permalink / raw)
  To: Brad Love, linux-media, mchehab

Am 17.04.2018 um 18:39 schrieb Brad Love:
> Replace all usage of hard coded values with
> the proper field from the board profile.
> 

Hi Brad,

will there be any interference with the usage to configure the analog
tuner via the fields tuner_addr and tuner_type?

Regards
Matthias

> Signed-off-by: Brad Love <brad@nextdimension.cc>
> ---
>  drivers/media/usb/cx231xx/cx231xx-dvb.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
> index 67ed667..99f1a77 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
> @@ -728,7 +728,7 @@ static int dvb_init(struct cx231xx *dev)
>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>  
>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
> -			       0x60, tuner_i2c,
> +			       dev->board.tuner_addr, tuner_i2c,
>  			       &cnxt_rde253s_tunerconfig)) {
>  			result = -EINVAL;
>  			goto out_free;
> @@ -752,7 +752,7 @@ static int dvb_init(struct cx231xx *dev)
>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>  
>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
> -			       0x60, tuner_i2c,
> +			       dev->board.tuner_addr, tuner_i2c,
>  			       &cnxt_rde253s_tunerconfig)) {
>  			result = -EINVAL;
>  			goto out_free;
> @@ -779,7 +779,7 @@ static int dvb_init(struct cx231xx *dev)
>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>  
>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
> -			   0x60, tuner_i2c,
> +			   dev->board.tuner_addr, tuner_i2c,
>  			   &hcw_tda18271_config);
>  		break;
>  
> @@ -797,7 +797,7 @@ static int dvb_init(struct cx231xx *dev)
>  
>  		memset(&info, 0, sizeof(struct i2c_board_info));
>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
> -		info.addr = 0x64;
> +		info.addr = dev->board.demod_addr;
>  		info.platform_data = &si2165_pdata;
>  		request_module(info.type);
>  		client = i2c_new_device(demod_i2c, &info);
> @@ -822,8 +822,7 @@ static int dvb_init(struct cx231xx *dev)
>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>  
>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
> -			0x60,
> -			tuner_i2c,
> +			dev->board.tuner_addr, tuner_i2c,
>  			&hcw_tda18271_config);
>  
>  		dev->cx231xx_reset_analog_tuner = NULL;
> @@ -844,7 +843,7 @@ static int dvb_init(struct cx231xx *dev)
>  
>  		memset(&info, 0, sizeof(struct i2c_board_info));
>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
> -		info.addr = 0x64;
> +		info.addr = dev->board.demod_addr;
>  		info.platform_data = &si2165_pdata;
>  		request_module(info.type);
>  		client = i2c_new_device(demod_i2c, &info);
> @@ -879,7 +878,7 @@ static int dvb_init(struct cx231xx *dev)
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = 0x60;
> +		info.addr = dev->board.tuner_addr;
>  		info.platform_data = &si2157_config;
>  		request_module("si2157");
>  
> @@ -938,7 +937,7 @@ static int dvb_init(struct cx231xx *dev)
>  		si2157_config.if_port = 1;
>  		si2157_config.inversion = true;
>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
> -		info.addr = 0x60;
> +		info.addr = dev->board.tuner_addr;
>  		info.platform_data = &si2157_config;
>  		request_module("si2157");
>  
> @@ -985,7 +984,7 @@ static int dvb_init(struct cx231xx *dev)
>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>  
>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
> -			   0x60, tuner_i2c,
> +			   dev->board.tuner_addr, tuner_i2c,
>  			   &pv_tda18271_config);
>  		break;
>  
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers
  2018-04-19 18:09   ` Matthias Schwarzott
@ 2018-04-23 17:26     ` Brad Love
  0 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-04-23 17:26 UTC (permalink / raw)
  To: Matthias Schwarzott, Brad Love, linux-media, mchehab

Hi Matthias,


On 2018-04-19 12:09, Matthias Schwarzott wrote:
> Am 17.04.2018 um 18:39 schrieb Brad Love:
>> Mostly very straight forward replace of blocks with equivalent code.
>>
>> Cleanup added at end of dvb_init in case of failure.
>>
> Hi Brad,
>
> I have some suggestions. See below.
>
> Matthias


Thanks for the review, I'll work your suggestions into a v2 set soon.




>
>> Signed-off-by: Brad Love <brad@nextdimension.cc>
>> ---
>>  drivers/media/usb/cx231xx/cx231xx-dvb.c | 331 ++++++++------------------------
>>  1 file changed, 82 insertions(+), 249 deletions(-)
>>
>> diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> index 681610f..318a6cd 100644
>> --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> @@ -613,23 +613,18 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
>>  		dvb_frontend_detach(dvb->frontend[1]);
>>  	dvb_frontend_detach(dvb->frontend[0]);
>>  	dvb_unregister_adapter(&dvb->adapter);
>> +
>>  	/* remove I2C tuner */
>>  	client = dvb->i2c_client_tuner;
>> -	if (client) {
>> -		module_put(client->dev.driver->owner);
>> -		i2c_unregister_device(client);
>> -	}
>> -	/* remove I2C demod */
>> +	if (client)
>> +		dvb_module_release(client);
> The pointer check is not needed, dvb_module_release does check itself
> for NULL.
>
> Other drivers added code to set the client-pointers to NULL after
> releasing it.
>
> I suggest to do it like this:
> /* remove I2C tuner */
> dvb_module_release(dvb->i2c_client_tuner);
> dvb->i2c_client_tuner = NULL;
>
>
>> +	/* remove I2C demod(s) */
>>  	client = dvb->i2c_client_demod[1];
>> -	if (client) {
>> -		module_put(client->dev.driver->owner);
>> -		i2c_unregister_device(client);
>> -	}
>> +	if (client)
>> +		dvb_module_release(client);
>>  	client = dvb->i2c_client_demod[0];
>> -	if (client) {
>> -		module_put(client->dev.driver->owner);
>> -		i2c_unregister_device(client);
>> -	}
>> +	if (client)
>> +		dvb_module_release(client);
>>  }
>>  
>>  static int dvb_init(struct cx231xx *dev)
>> @@ -638,6 +633,8 @@ static int dvb_init(struct cx231xx *dev)
>>  	struct cx231xx_dvb *dvb;
>>  	struct i2c_adapter *tuner_i2c;
>>  	struct i2c_adapter *demod_i2c;
>> +	struct i2c_client *client;
>> +	struct i2c_adapter *adapter;
>>  
>>  	if (!dev->board.has_dvb) {
>>  		/* This device does not support the extension */
>> @@ -785,8 +782,6 @@ static int dvb_init(struct cx231xx *dev)
>>  
>>  	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_board_info info;
>>  		struct si2165_platform_data si2165_pdata = {};
>>  
>>  		/* attach demod */
>> @@ -794,25 +789,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2165_pdata.chip_mode = SI2165_MODE_PLL_XTAL;
>>  		si2165_pdata.ref_freq_hz = 16000000;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &si2165_pdata;
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
>> -			dev_err(dev->dev,
>> -				"Failed to attach SI2165 front end\n");
>> -			result = -EINVAL;
>> -			goto out_free;
>> -		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2165", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&si2165_pdata);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  
>>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
>> @@ -829,8 +813,6 @@ static int dvb_init(struct cx231xx *dev)
>>  	}
>>  	case CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_board_info info;
>>  		struct si2165_platform_data si2165_pdata = {};
>>  		struct si2157_config si2157_config = {};
>>  
>> @@ -839,29 +821,16 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2165_pdata.chip_mode = SI2165_MODE_PLL_EXT;
>>  		si2165_pdata.ref_freq_hz = 24000000;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &si2165_pdata;
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -		if (!client || !client->dev.driver || !dev->dvb->frontend[0]) {
>> -			dev_err(dev->dev,
>> -				"Failed to attach SI2165 front end\n");
>> -			result = -EINVAL;
>> -			goto out_free;
>> -		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2165", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&si2165_pdata);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -
>>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
>>  
>>  		/* define general-purpose callback pointer */
>> @@ -874,27 +843,15 @@ static int dvb_init(struct cx231xx *dev)
>>  #endif
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = dev->board.tuner_addr;
>> -		info.platform_data = &si2157_config;
>> -		request_module("si2157");
>> -
>> -		client = i2c_new_device(
>> -			tuner_i2c,
>> -			&info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			dvb_frontend_detach(dev->dvb->frontend[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>>  
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> -			dvb_frontend_detach(dev->dvb->frontend[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
>> +						dev->board.tuner_addr,
>> +						&si2157_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>  
>>  		dev->dvb->i2c_client_tuner = client;
>> @@ -902,12 +859,8 @@ static int dvb_init(struct cx231xx *dev)
>>  	}
>>  	case CX231XX_BOARD_HAUPPAUGE_955Q:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_board_info info;
>>  		struct si2157_config si2157_config = {};
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -
>>  		dev->dvb->frontend[0] = dvb_attach(lgdt3306a_attach,
>>  			&hauppauge_955q_lgdt3306a_config,
>>  			demod_i2c
>> @@ -932,27 +885,15 @@ static int dvb_init(struct cx231xx *dev)
>>  #endif
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = dev->board.tuner_addr;
>> -		info.platform_data = &si2157_config;
>> -		request_module("si2157");
>> -
>> -		client = i2c_new_device(
>> -			tuner_i2c,
>> -			&info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			dvb_frontend_detach(dev->dvb->frontend[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>>  
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> -			dvb_frontend_detach(dev->dvb->frontend[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
>> +						dev->board.tuner_addr,
>> +						&si2157_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>  
>>  		dev->dvb->i2c_client_tuner = client;
>> @@ -988,9 +929,6 @@ static int dvb_init(struct cx231xx *dev)
>>  	{
>>  		struct si2157_config si2157_config = {};
>>  		struct si2168_config si2168_config = {};
>> -		struct i2c_board_info info = {};
>> -		struct i2c_client *client;
>> -		struct i2c_adapter *adapter;
>>  
>>  		/* attach demodulator chip */
>>  		si2168_config.ts_mode = SI2168_TS_SERIAL; /* from *.inf file */
>> @@ -998,24 +936,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2168_config.i2c_adapter = &adapter;
>>  		si2168_config.ts_clock_inv = true;
>>  
>> -		strlcpy(info.type, "si2168", sizeof(info.type));
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &si2168_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2168", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&si2168_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  
>>  		/* attach tuner chip */
>> @@ -1026,37 +954,20 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = false;
>>  
>> -		memset(&info, 0, sizeof(info));
>> -		strlcpy(info.type, "si2157", sizeof(info.type));
>> -		info.addr = dev->board.tuner_addr;
>> -		info.platform_data = &si2157_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(tuner_i2c, &info);
>> -
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
>> +						dev->board.tuner_addr,
>> +						&si2157_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>  		dev->dvb->i2c_client_tuner = client;
>>  		break;
>>  	}
>>  	case CX231XX_BOARD_ASTROMETA_T2HYBRID:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_board_info info = {};
>>  		struct mn88473_config mn88473_config = {};
>>  
>>  		/* attach demodulator chip */
>> @@ -1064,24 +975,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		mn88473_config.xtal = 25000000;
>>  		mn88473_config.fe = &dev->dvb->frontend[0];
>>  
>> -		strlcpy(info.type, "mn88473", sizeof(info.type));
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &mn88473_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -
>> -		if (client == NULL || client->dev.driver == NULL) {
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("mn88473", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&mn88473_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  
>>  		/* define general-purpose callback pointer */
>> @@ -1095,9 +996,6 @@ static int dvb_init(struct cx231xx *dev)
>>  	}
>>  	case CX231XX_BOARD_HAUPPAUGE_935C:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_adapter *adapter;
>> -		struct i2c_board_info info = {};
>>  		struct si2157_config si2157_config = {};
>>  		struct si2168_config si2168_config = {};
>>  
>> @@ -1107,25 +1005,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2168_config.i2c_adapter = &adapter;
>>  		si2168_config.ts_clock_inv = true;
>>  
>> -		strlcpy(info.type, "si2168", sizeof(info.type));
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &si2168_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2168", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&si2168_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			dev_err(dev->dev,
>> -				"Failed to attach %s frontend.\n", info.type);
>> -			i2c_unregister_device(client);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  		dev->dvb->frontend[0]->ops.i2c_gate_ctrl = NULL;
>>  
>> @@ -1140,40 +1027,21 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = dev->board.tuner_addr;
>> -		info.platform_data = &si2157_config;
>> -		request_module("si2157");
>> -
>> -		client = i2c_new_device(tuner_i2c, &info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			dev_err(dev->dev,
>> -				"Failed to obtain %s tuner.\n",	info.type);
>> -			i2c_unregister_device(client);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2157", NULL, tuner_i2c,
>> +						dev->board.tuner_addr,
>> +						&si2157_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>  		dev->dvb->i2c_client_tuner = client;
>>  		break;
>>  	}
>>  	case CX231XX_BOARD_HAUPPAUGE_975:
>>  	{
>> -		struct i2c_client *client;
>> -		struct i2c_adapter *adapter;
>>  		struct i2c_adapter *adapter2;
>> -		struct i2c_board_info info = {};
>>  		struct si2157_config si2157_config = {};
>>  		struct lgdt3306a_config lgdt3306a_config = {};
>>  		struct si2168_config si2168_config = {};
>> @@ -1184,25 +1052,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		lgdt3306a_config.i2c_adapter = &adapter;
>>  		lgdt3306a_config.deny_i2c_rptr = 0;
>>  
>> -		strlcpy(info.type, "lgdt3306a", sizeof(info.type));
>> -		info.addr = dev->board.demod_addr;
>> -		info.platform_data = &lgdt3306a_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(demod_i2c, &info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
>> +						dev->board.demod_addr,
>> +						&lgdt3306a_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			dev_err(dev->dev,
>> -				"Failed to attach %s frontend.\n", info.type);
>> -			i2c_unregister_device(client);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dvb->i2c_client_demod[0] = client;
>>  
>>  		/* attach second demodulator chip */
>> @@ -1211,30 +1068,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2168_config.i2c_adapter = &adapter2;
>>  		si2168_config.ts_clock_inv = true;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -		strlcpy(info.type, "si2168", sizeof(info.type));
>> -		info.addr = dev->board.demod_addr2;
>> -		info.platform_data = &si2168_config;
>> -
>> -		request_module(info.type);
>> -		client = i2c_new_device(adapter, &info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			dev_err(dev->dev,
>> -				"Failed to attach %s frontend.\n", info.type);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2168", NULL, adapter,
>> +						dev->board.demod_addr2,
>> +						&si2168_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			i2c_unregister_device(client);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dvb->i2c_client_demod[1] = client;
>>  		dvb->frontend[1]->id = 1;
>>  
>> @@ -1250,34 +1091,14 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>>  
>> -		memset(&info, 0, sizeof(struct i2c_board_info));
>> -		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = dev->board.tuner_addr;
>> -		info.platform_data = &si2157_config;
>> -		request_module("si2157");
>> -
>> -		client = i2c_new_device(adapter, &info);
>> -		if (client == NULL || client->dev.driver == NULL) {
>> -			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[1]);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> +		/* perform tuner probe/init/attach */
>> +		client = dvb_module_probe("si2157", NULL, adapter,
>> +						dev->board.tuner_addr,
>> +						&si2157_config);
>> +		if (!client) {
>>  			result = -ENODEV;
>>  			goto out_free;
>>  		}
>> -
>> -		if (!try_module_get(client->dev.driver->owner)) {
>> -			dev_err(dev->dev,
>> -				"Failed to obtain %s tuner.\n",	info.type);
>> -			i2c_unregister_device(client);
>> -			module_put(dvb->i2c_client_demod[1]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[1]);
>> -			module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
>> -			i2c_unregister_device(dvb->i2c_client_demod[0]);
>> -			result = -ENODEV;
>> -			goto out_free;
>> -		}
>> -
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>  		dvb->i2c_client_tuner = client;
>>  
>> @@ -1316,6 +1137,18 @@ static int dvb_init(struct cx231xx *dev)
>>  	return result;
>>  
>>  out_free:
>> +	/* remove I2C tuner */
>> +	client = dvb->i2c_client_tuner;
>> +	if (client)
>> +		dvb_module_release(client);
>> +	/* remove I2C demod(s) */
>> +	client = dvb->i2c_client_demod[1];
>> +	if (client)
>> +		dvb_module_release(client);
>> +	client = dvb->i2c_client_demod[0];
>> +	if (client)
>> +		dvb_module_release(client);
>> +
> Same as above, no need to check pointer.
> Maybe set pointers to NULL afterwards.
>
>>  	kfree(dvb);
>>  	dev->dvb = NULL;
>>  	goto ret;
>>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/9] cx231xx: Use board profile values for addresses
  2018-04-19 18:10   ` Matthias Schwarzott
@ 2018-04-23 17:50     ` Brad Love
  2018-05-03 16:24       ` Brad Love
  0 siblings, 1 reply; 15+ messages in thread
From: Brad Love @ 2018-04-23 17:50 UTC (permalink / raw)
  To: Matthias Schwarzott, Brad Love, linux-media, mchehab

Hi Matthias,



On 2018-04-19 12:10, Matthias Schwarzott wrote:
> Am 17.04.2018 um 18:39 schrieb Brad Love:
>> Replace all usage of hard coded values with
>> the proper field from the board profile.
>>
> Hi Brad,
>
> will there be any interference with the usage to configure the analog
> tuner via the fields tuner_addr and tuner_type?
>
> Regards
> Matthias


I expanded the patch and reviewed each change.

- CX231XX_BOARD_CNXT_RDE_253S : constant equals tuner_addr
- CX231XX_BOARD_CNXT_RDU_253S : constant equals tuner_addr
- CX231XX_BOARD_KWORLD_UB445_USB_HYBRID : constant equals tuner_addr
- CX231XX_BOARD_HAUPPAUGE_EXETER : constant equals tuner_addr
- CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx : constant equals tuner_addr
- CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx : constant equals tuner_addr
- CX231XX_BOARD_HAUPPAUGE_955Q : constant equals tuner_addr
- CX231XX_BOARD_PV_PLAYTV_USB_HYBRID : constant equals tuner_addr
- CX231XX_BOARD_KWORLD_UB430_USB_HYBRID : constant equals tuner_addr


In all cases above I believe there should be no change in value used or
behaviour, since the values are equal.

I have tested the 955Q (no tuner_type analog though) well with this set.
I will ask if someone in the main office can test one of these two:
- CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx
- CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx

to verify everything is still fine with the analog tuner_type setup on
them after these changes.

Cheers,

Brad


>> Signed-off-by: Brad Love <brad@nextdimension.cc>
>> ---
>>  drivers/media/usb/cx231xx/cx231xx-dvb.c | 19 +++++++++----------
>>  1 file changed, 9 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> index 67ed667..99f1a77 100644
>> --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>> @@ -728,7 +728,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>  
>>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>> -			       0x60, tuner_i2c,
>> +			       dev->board.tuner_addr, tuner_i2c,
>>  			       &cnxt_rde253s_tunerconfig)) {
>>  			result = -EINVAL;
>>  			goto out_free;
>> @@ -752,7 +752,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>  
>>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>> -			       0x60, tuner_i2c,
>> +			       dev->board.tuner_addr, tuner_i2c,
>>  			       &cnxt_rde253s_tunerconfig)) {
>>  			result = -EINVAL;
>>  			goto out_free;
>> @@ -779,7 +779,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>  
>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>> -			   0x60, tuner_i2c,
>> +			   dev->board.tuner_addr, tuner_i2c,
>>  			   &hcw_tda18271_config);
>>  		break;
>>  
>> @@ -797,7 +797,7 @@ static int dvb_init(struct cx231xx *dev)
>>  
>>  		memset(&info, 0, sizeof(struct i2c_board_info));
>>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>> -		info.addr = 0x64;
>> +		info.addr = dev->board.demod_addr;
>>  		info.platform_data = &si2165_pdata;
>>  		request_module(info.type);
>>  		client = i2c_new_device(demod_i2c, &info);
>> @@ -822,8 +822,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>  
>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>> -			0x60,
>> -			tuner_i2c,
>> +			dev->board.tuner_addr, tuner_i2c,
>>  			&hcw_tda18271_config);
>>  
>>  		dev->cx231xx_reset_analog_tuner = NULL;
>> @@ -844,7 +843,7 @@ static int dvb_init(struct cx231xx *dev)
>>  
>>  		memset(&info, 0, sizeof(struct i2c_board_info));
>>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>> -		info.addr = 0x64;
>> +		info.addr = dev->board.demod_addr;
>>  		info.platform_data = &si2165_pdata;
>>  		request_module(info.type);
>>  		client = i2c_new_device(demod_i2c, &info);
>> @@ -879,7 +878,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = 0x60;
>> +		info.addr = dev->board.tuner_addr;
>>  		info.platform_data = &si2157_config;
>>  		request_module("si2157");
>>  
>> @@ -938,7 +937,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		si2157_config.if_port = 1;
>>  		si2157_config.inversion = true;
>>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>> -		info.addr = 0x60;
>> +		info.addr = dev->board.tuner_addr;
>>  		info.platform_data = &si2157_config;
>>  		request_module("si2157");
>>  
>> @@ -985,7 +984,7 @@ static int dvb_init(struct cx231xx *dev)
>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>  
>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>> -			   0x60, tuner_i2c,
>> +			   dev->board.tuner_addr, tuner_i2c,
>>  			   &pv_tda18271_config);
>>  		break;
>>  
>>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/9] cx231xx: Use board profile values for addresses
  2018-04-23 17:50     ` Brad Love
@ 2018-05-03 16:24       ` Brad Love
  0 siblings, 0 replies; 15+ messages in thread
From: Brad Love @ 2018-05-03 16:24 UTC (permalink / raw)
  To: Brad Love, Matthias Schwarzott, linux-media, mchehab

Hi Matthias,


On 2018-04-23 12:50, Brad Love wrote:
> Hi Matthias,
>
>
>
> On 2018-04-19 12:10, Matthias Schwarzott wrote:
>> Am 17.04.2018 um 18:39 schrieb Brad Love:
>>> Replace all usage of hard coded values with
>>> the proper field from the board profile.
>>>
>> Hi Brad,
>>
>> will there be any interference with the usage to configure the analog
>> tuner via the fields tuner_addr and tuner_type?
>>
>> Regards
>> Matthias
>
> I expanded the patch and reviewed each change.
>
> - CX231XX_BOARD_CNXT_RDE_253S : constant equals tuner_addr
> - CX231XX_BOARD_CNXT_RDU_253S : constant equals tuner_addr
> - CX231XX_BOARD_KWORLD_UB445_USB_HYBRID : constant equals tuner_addr
> - CX231XX_BOARD_HAUPPAUGE_EXETER : constant equals tuner_addr
> - CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx : constant equals tuner_addr
> - CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx : constant equals tuner_addr
> - CX231XX_BOARD_HAUPPAUGE_955Q : constant equals tuner_addr
> - CX231XX_BOARD_PV_PLAYTV_USB_HYBRID : constant equals tuner_addr
> - CX231XX_BOARD_KWORLD_UB430_USB_HYBRID : constant equals tuner_addr
>
>
> In all cases above I believe there should be no change in value used or
> behaviour, since the values are equal.
>
> I have tested the 955Q (no tuner_type analog though) well with this set.
> I will ask if someone in the main office can test one of these two:
> - CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx
> - CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx
>
> to verify everything is still fine with the analog tuner_type setup on
> them after these changes.
>
> Cheers,
>
> Brad


A CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx was found and anlaog ch3/4 PAL
was tested. The TDA18271 still worked correctly and had no problem
finding the signal. I think this patch is quite benign and just removes
constants. I'm pushing up a v2 in a bit with this patch left as is, and
the i2c helper set updated.

Cheers,

Brad



>
>
>>> Signed-off-by: Brad Love <brad@nextdimension.cc>
>>> ---
>>>  drivers/media/usb/cx231xx/cx231xx-dvb.c | 19 +++++++++----------
>>>  1 file changed, 9 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>>> index 67ed667..99f1a77 100644
>>> --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
>>> +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
>>> @@ -728,7 +728,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>>  
>>>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>>> -			       0x60, tuner_i2c,
>>> +			       dev->board.tuner_addr, tuner_i2c,
>>>  			       &cnxt_rde253s_tunerconfig)) {
>>>  			result = -EINVAL;
>>>  			goto out_free;
>>> @@ -752,7 +752,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>>  
>>>  		if (!dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>>> -			       0x60, tuner_i2c,
>>> +			       dev->board.tuner_addr, tuner_i2c,
>>>  			       &cnxt_rde253s_tunerconfig)) {
>>>  			result = -EINVAL;
>>>  			goto out_free;
>>> @@ -779,7 +779,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>>  
>>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>>> -			   0x60, tuner_i2c,
>>> +			   dev->board.tuner_addr, tuner_i2c,
>>>  			   &hcw_tda18271_config);
>>>  		break;
>>>  
>>> @@ -797,7 +797,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  
>>>  		memset(&info, 0, sizeof(struct i2c_board_info));
>>>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>>> -		info.addr = 0x64;
>>> +		info.addr = dev->board.demod_addr;
>>>  		info.platform_data = &si2165_pdata;
>>>  		request_module(info.type);
>>>  		client = i2c_new_device(demod_i2c, &info);
>>> @@ -822,8 +822,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>>  
>>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>>> -			0x60,
>>> -			tuner_i2c,
>>> +			dev->board.tuner_addr, tuner_i2c,
>>>  			&hcw_tda18271_config);
>>>  
>>>  		dev->cx231xx_reset_analog_tuner = NULL;
>>> @@ -844,7 +843,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  
>>>  		memset(&info, 0, sizeof(struct i2c_board_info));
>>>  		strlcpy(info.type, "si2165", I2C_NAME_SIZE);
>>> -		info.addr = 0x64;
>>> +		info.addr = dev->board.demod_addr;
>>>  		info.platform_data = &si2165_pdata;
>>>  		request_module(info.type);
>>>  		client = i2c_new_device(demod_i2c, &info);
>>> @@ -879,7 +878,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		si2157_config.if_port = 1;
>>>  		si2157_config.inversion = true;
>>>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>>> -		info.addr = 0x60;
>>> +		info.addr = dev->board.tuner_addr;
>>>  		info.platform_data = &si2157_config;
>>>  		request_module("si2157");
>>>  
>>> @@ -938,7 +937,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		si2157_config.if_port = 1;
>>>  		si2157_config.inversion = true;
>>>  		strlcpy(info.type, "si2157", I2C_NAME_SIZE);
>>> -		info.addr = 0x60;
>>> +		info.addr = dev->board.tuner_addr;
>>>  		info.platform_data = &si2157_config;
>>>  		request_module("si2157");
>>>  
>>> @@ -985,7 +984,7 @@ static int dvb_init(struct cx231xx *dev)
>>>  		dvb->frontend[0]->callback = cx231xx_tuner_callback;
>>>  
>>>  		dvb_attach(tda18271_attach, dev->dvb->frontend[0],
>>> -			   0x60, tuner_i2c,
>>> +			   dev->board.tuner_addr, tuner_i2c,
>>>  			   &pv_tda18271_config);
>>>  		break;
>>>  
>>>
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2018-05-03 16:24 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-17 16:39 [PATCH 0/9] cx231xx: House cleaning Brad Love
2018-04-17 16:39 ` [PATCH 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
2018-04-17 16:39 ` [PATCH 2/9] cx231xx: Use board profile values for addresses Brad Love
2018-04-19 18:10   ` Matthias Schwarzott
2018-04-23 17:50     ` Brad Love
2018-05-03 16:24       ` Brad Love
2018-04-17 16:39 ` [PATCH 3/9] cx231xx: Style fix for struct zero init Brad Love
2018-04-17 16:39 ` [PATCH 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
2018-04-17 16:39 ` [PATCH 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
2018-04-19 18:09   ` Matthias Schwarzott
2018-04-23 17:26     ` Brad Love
2018-04-17 16:39 ` [PATCH 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
2018-04-17 16:39 ` [PATCH 7/8] cx231xx: Remove unnecessary parameter clear Brad Love
2018-04-17 16:39 ` [PATCH 8/9] cx231xx: Remove RC_CORE dependency Brad Love
2018-04-17 16:39 ` [PATCH 9/9] cx231xx: Add I2C_MUX dependency Brad Love

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.