* [PATCH v2 0/9] cx231xx: House cleaning
@ 2018-05-03 21:20 Brad Love
2018-05-03 21:20 ` [PATCH v2 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
` (9 more replies)
0 siblings, 10 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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
Changes since v1:
- Style fixes in i2c helper patch
- Some comment cleanup
- Hardware validation of analog tuning
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] 13+ messages in thread
* [PATCH v2 1/9] cx231xx: Fix several incorrect demod addresses
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 2/9] cx231xx: Use board profile values for addresses Brad Love
` (8 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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 89795d4..a431a99 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] 13+ messages in thread
* [PATCH v2 2/9] cx231xx: Use board profile values for addresses
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
2018-05-03 21:20 ` [PATCH v2 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 3/9] cx231xx: Style fix for struct zero init Brad Love
` (7 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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] 13+ messages in thread
* [PATCH v2 3/9] cx231xx: Style fix for struct zero init
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
2018-05-03 21:20 ` [PATCH v2 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
2018-05-03 21:20 ` [PATCH v2 2/9] cx231xx: Use board profile values for addresses Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
` (6 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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] 13+ messages in thread
* [PATCH v2 4/9] [bug] cx231xx: Ignore an i2c mux adapter
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (2 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 3/9] cx231xx: Style fix for struct zero init Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
` (5 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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] 13+ messages in thread
* [PATCH v2 5/9] cx231xx: Switch to using new dvb i2c helpers
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (3 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
` (4 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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>
---
Changes since v1:
- Un-necessary NULL checks removed
- Pointers NULL'd after release
- 'tuner' removed from probe/init/attach comments
drivers/media/usb/cx231xx/cx231xx-dvb.c | 330 ++++++++------------------------
1 file changed, 78 insertions(+), 252 deletions(-)
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 681610f..b03d180 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -613,23 +613,15 @@ 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 */
- client = dvb->i2c_client_demod[1];
- if (client) {
- module_put(client->dev.driver->owner);
- i2c_unregister_device(client);
- }
- client = dvb->i2c_client_demod[0];
- if (client) {
- module_put(client->dev.driver->owner);
- i2c_unregister_device(client);
- }
+ dvb_module_release(dvb->i2c_client_tuner);
+ dvb->i2c_client_tuner = NULL;
+ /* remove I2C demod(s) */
+ dvb_module_release(dvb->i2c_client_demod[1]);
+ dvb->i2c_client_demod[1] = NULL;
+ dvb_module_release(dvb->i2c_client_demod[0]);
+ dvb->i2c_client_demod[0] = NULL;
}
static int dvb_init(struct cx231xx *dev)
@@ -638,6 +630,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 +779,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 +786,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 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 +810,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 +818,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 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 +840,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 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 +856,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 +882,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 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 +926,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 +933,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 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)) {
- i2c_unregister_device(client);
- result = -ENODEV;
- goto out_free;
- }
-
dvb->i2c_client_demod[0] = client;
/* attach tuner chip */
@@ -1026,37 +951,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]);
- 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]);
+ /* perform 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_ASTROMETA_T2HYBRID:
{
- struct i2c_client *client;
- struct i2c_board_info info = {};
struct mn88473_config mn88473_config = {};
/* attach demodulator chip */
@@ -1064,24 +972,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) {
- result = -ENODEV;
- goto out_free;
- }
-
- if (!try_module_get(client->dev.driver->owner)) {
- i2c_unregister_device(client);
+ /* perform probe/init/attach */
+ client = dvb_module_probe("mn88473", NULL, demod_i2c,
+ dev->board.demod_addr,
+ &mn88473_config);
+ if (!client) {
result = -ENODEV;
goto out_free;
}
-
dvb->i2c_client_demod[0] = client;
/* define general-purpose callback pointer */
@@ -1095,9 +993,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 +1002,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 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 +1024,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 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 +1049,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 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 +1065,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]);
- 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]);
+ /* perform probe/init/attach */
+ client = dvb_module_probe("si2168", NULL, adapter,
+ dev->board.demod_addr2,
+ &si2168_config);
+ if (!client) {
result = -ENODEV;
goto out_free;
}
-
dvb->i2c_client_demod[1] = client;
dvb->frontend[1]->id = 1;
@@ -1250,34 +1088,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]);
- 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]);
+ /* perform probe/init/attach */
+ client = dvb_module_probe("si2157", NULL, adapter,
+ dev->board.tuner_addr,
+ &si2157_config);
+ if (!client) {
result = -ENODEV;
goto out_free;
}
-
dev->cx231xx_reset_analog_tuner = NULL;
dvb->i2c_client_tuner = client;
@@ -1316,6 +1134,14 @@ static int dvb_init(struct cx231xx *dev)
return result;
out_free:
+ /* remove I2C tuner */
+ dvb_module_release(dvb->i2c_client_tuner);
+ dvb->i2c_client_tuner = NULL;
+ /* remove I2C demod(s) */
+ dvb_module_release(dvb->i2c_client_demod[1]);
+ dvb->i2c_client_demod[1] = NULL;
+ dvb_module_release(dvb->i2c_client_demod[0]);
+ dvb->i2c_client_demod[0] = NULL;
kfree(dvb);
dev->dvb = NULL;
goto ret;
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 6/9] cx231xx: Update 955Q from dvb attach to i2c device
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (4 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 7/9] cx231xx: Remove unnecessary parameter clear Brad Love
` (3 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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>
---
Changes since v1:
- Deleted one comment and removed 'tuner' from other
drivers/media/usb/cx231xx/cx231xx-dvb.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index b03d180..669c154 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,
@@ -857,18 +855,21 @@ 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
- );
+ 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 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] 13+ messages in thread
* [PATCH v2 7/9] cx231xx: Remove unnecessary parameter clear
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (5 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 8/9] cx231xx: Remove RC_CORE dependency Brad Love
` (2 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +Cc: Brad Love
The default is now 0, no need to override
Signed-off-by: Brad Love <brad@nextdimension.cc>
---
Changes since v1:
- regen
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 669c154..2d27e96 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -1048,7 +1048,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 probe/init/attach */
client = dvb_module_probe("lgdt3306a", NULL, demod_i2c,
--
2.7.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 8/9] cx231xx: Remove RC_CORE dependency
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (6 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 7/9] cx231xx: Remove unnecessary parameter clear Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-03 21:20 ` [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency Brad Love
2018-05-04 6:27 ` [PATCH v2 0/9] cx231xx: House cleaning Hans Verkuil
9 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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] 13+ messages in thread
* [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (7 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 8/9] cx231xx: Remove RC_CORE dependency Brad Love
@ 2018-05-03 21:20 ` Brad Love
2018-05-05 3:36 ` kbuild test robot
2018-05-04 6:27 ` [PATCH v2 0/9] cx231xx: House cleaning Hans Verkuil
9 siblings, 1 reply; 13+ messages in thread
From: Brad Love @ 2018-05-03 21:20 UTC (permalink / raw)
To: linux-media; +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] 13+ messages in thread
* Re: [PATCH v2 0/9] cx231xx: House cleaning
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
` (8 preceding siblings ...)
2018-05-03 21:20 ` [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency Brad Love
@ 2018-05-04 6:27 ` Hans Verkuil
2018-05-04 13:38 ` Brad Love
9 siblings, 1 reply; 13+ messages in thread
From: Hans Verkuil @ 2018-05-04 6:27 UTC (permalink / raw)
To: Brad Love, linux-media
Hi Brad,
On 03/05/18 23:20, Brad Love wrote:
> 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
>
> Changes since v1:
> - Style fixes in i2c helper patch
> - Some comment cleanup
> - Hardware validation of analog tuning
>
> 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(-)
>
In case you are ever interested in converting this driver to vb2,
I made an attempt back in 2015:
https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=cx231xx
I never got it to work (I think it was mainly the DVB part that
didn't work, but I'm not certain anymore as it is such a long time
ago). I ran out of time and haven't continued with it, but it would
be really nice if someone could finish this vb2 conversion.
Regards,
Hans
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 0/9] cx231xx: House cleaning
2018-05-04 6:27 ` [PATCH v2 0/9] cx231xx: House cleaning Hans Verkuil
@ 2018-05-04 13:38 ` Brad Love
0 siblings, 0 replies; 13+ messages in thread
From: Brad Love @ 2018-05-04 13:38 UTC (permalink / raw)
To: Hans Verkuil, Brad Love, linux-media
Hi Hans,
On 2018-05-04 01:27, Hans Verkuil wrote:
> Hi Brad,
>
> On 03/05/18 23:20, Brad Love wrote:
>> 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
>>
>> Changes since v1:
>> - Style fixes in i2c helper patch
>> - Some comment cleanup
>> - Hardware validation of analog tuning
>>
>> 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(-)
>>
> In case you are ever interested in converting this driver to vb2,
> I made an attempt back in 2015:
>
> https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=cx231xx
>
> I never got it to work (I think it was mainly the DVB part that
> didn't work, but I'm not certain anymore as it is such a long time
> ago). I ran out of time and haven't continued with it, but it would
> be really nice if someone could finish this vb2 conversion.
>
> Regards,
>
> Hans
I'll check this out and add it to my queue.
Cheers,
Brad
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency
2018-05-03 21:20 ` [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency Brad Love
@ 2018-05-05 3:36 ` kbuild test robot
0 siblings, 0 replies; 13+ messages in thread
From: kbuild test robot @ 2018-05-05 3:36 UTC (permalink / raw)
To: Brad Love; +Cc: kbuild-all, linux-media, Brad Love
[-- Attachment #1: Type: text/plain, Size: 3868 bytes --]
Hi Brad,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v4.17-rc3 next-20180504]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Brad-Love/cx231xx-House-cleaning/20180505-040333
base: git://linuxtv.org/media_tree.git master
config: x86_64-lkp (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
>> drivers/i2c/Kconfig:61:error: recursive dependency detected!
>> drivers/i2c/Kconfig:61: symbol I2C_MUX is selected by VIDEO_CX231XX
>> drivers/media/usb/cx231xx/Kconfig:1: symbol VIDEO_CX231XX depends on I2C_MUX
For a resolution refer to Documentation/kbuild/kconfig-language.txt
subsection "Kconfig recursive dependency limitations"
vim +61 drivers/i2c/Kconfig
16538e6b Jan Engelhardt 2007-05-01 37
9c1600ed David Brownell 2007-05-01 38 config I2C_BOARDINFO
6341e62b Christoph Jaeger 2014-12-20 39 bool
9c1600ed David Brownell 2007-05-01 40 default y
9c1600ed David Brownell 2007-05-01 41
2bb5095a Jean Delvare 2009-09-18 42 config I2C_COMPAT
6341e62b Christoph Jaeger 2014-12-20 43 bool "Enable compatibility bits for old user-space"
2bb5095a Jean Delvare 2009-09-18 44 default y
2bb5095a Jean Delvare 2009-09-18 45 help
2bb5095a Jean Delvare 2009-09-18 46 Say Y here if you intend to run lm-sensors 3.1.1 or older, or any
2bb5095a Jean Delvare 2009-09-18 47 other user-space package which expects i2c adapters to be class
2bb5095a Jean Delvare 2009-09-18 48 devices. If you don't know, say Y.
2bb5095a Jean Delvare 2009-09-18 49
^1da177e Linus Torvalds 2005-04-16 50 config I2C_CHARDEV
^1da177e Linus Torvalds 2005-04-16 51 tristate "I2C device interface"
^1da177e Linus Torvalds 2005-04-16 52 help
^1da177e Linus Torvalds 2005-04-16 53 Say Y here to use i2c-* device files, usually found in the /dev
^1da177e Linus Torvalds 2005-04-16 54 directory on your system. They make it possible to have user-space
^1da177e Linus Torvalds 2005-04-16 55 programs use the I2C bus. Information on how to do this is
^1da177e Linus Torvalds 2005-04-16 56 contained in the file <file:Documentation/i2c/dev-interface>.
^1da177e Linus Torvalds 2005-04-16 57
^1da177e Linus Torvalds 2005-04-16 58 This support is also available as a module. If so, the module
^1da177e Linus Torvalds 2005-04-16 59 will be called i2c-dev.
^1da177e Linus Torvalds 2005-04-16 60
0826374b Michael Lawnick 2010-08-11 @61 config I2C_MUX
0826374b Michael Lawnick 2010-08-11 62 tristate "I2C bus multiplexing support"
0826374b Michael Lawnick 2010-08-11 63 help
0826374b Michael Lawnick 2010-08-11 64 Say Y here if you want the I2C core to support the ability to
0826374b Michael Lawnick 2010-08-11 65 handle multiplexed I2C bus topologies, by presenting each
0826374b Michael Lawnick 2010-08-11 66 multiplexed segment as a I2C adapter.
0826374b Michael Lawnick 2010-08-11 67
0826374b Michael Lawnick 2010-08-11 68 This support is also available as a module. If so, the module
0826374b Michael Lawnick 2010-08-11 69 will be called i2c-mux.
0826374b Michael Lawnick 2010-08-11 70
:::::: The code at line 61 was first introduced by commit
:::::: 0826374bff57411d239f2fcb15da3c35af0a93cd i2c: Multiplexed I2C bus core support
:::::: TO: Michael Lawnick <ml.lawnick@gmx.de>
:::::: CC: Jean Delvare <khali@linux-fr.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26147 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-05-05 3:37 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-03 21:20 [PATCH v2 0/9] cx231xx: House cleaning Brad Love
2018-05-03 21:20 ` [PATCH v2 1/9] cx231xx: Fix several incorrect demod addresses Brad Love
2018-05-03 21:20 ` [PATCH v2 2/9] cx231xx: Use board profile values for addresses Brad Love
2018-05-03 21:20 ` [PATCH v2 3/9] cx231xx: Style fix for struct zero init Brad Love
2018-05-03 21:20 ` [PATCH v2 4/9] [bug] cx231xx: Ignore an i2c mux adapter Brad Love
2018-05-03 21:20 ` [PATCH v2 5/9] cx231xx: Switch to using new dvb i2c helpers Brad Love
2018-05-03 21:20 ` [PATCH v2 6/9] cx231xx: Update 955Q from dvb attach to i2c device Brad Love
2018-05-03 21:20 ` [PATCH v2 7/9] cx231xx: Remove unnecessary parameter clear Brad Love
2018-05-03 21:20 ` [PATCH v2 8/9] cx231xx: Remove RC_CORE dependency Brad Love
2018-05-03 21:20 ` [PATCH v2 9/9] cx231xx: Add I2C_MUX dependency Brad Love
2018-05-05 3:36 ` kbuild test robot
2018-05-04 6:27 ` [PATCH v2 0/9] cx231xx: House cleaning Hans Verkuil
2018-05-04 13:38 ` 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.