kernel: usb 1-2: rtl2832u_tuner_attach: kernel: e4000 5-0064: e4000_probe: kernel: usb 1-2: rtl2832u_tuner_attach: client ptr ffff88030a849000 See attached patch. Is there any way to return error to caller? Abuse platform data ptr from struct i2c_board_info and call i2c_unregister_device() ? regards Antti --- drivers/media/tuners/e4000.c | 31 +++++++++++++++++++++++++++++++ drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 18 ++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/drivers/media/tuners/e4000.c b/drivers/media/tuners/e4000.c index 54e2d8a..f4e0567 100644 --- a/drivers/media/tuners/e4000.c +++ b/drivers/media/tuners/e4000.c @@ -442,6 +442,37 @@ err: } EXPORT_SYMBOL(e4000_attach); +static int e4000_probe(struct i2c_client *client, const struct i2c_device_id *did) +{ + dev_info(&client->dev, "%s:\n", __func__); + return -ENODEV; +} + +static int e4000_remove(struct i2c_client *client) +{ + dev_info(&client->dev, "%s:\n", __func__); + return 0; +} + +static const struct i2c_device_id e4000_id[] = { + {"e4000", 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, e4000_id); + +static struct i2c_driver e4000_driver = { + .driver = { + .owner = THIS_MODULE, + .name = "e4000", + }, + .probe = e4000_probe, + .remove = e4000_remove, + .id_table = e4000_id, +}; + +module_i2c_driver(e4000_driver); + MODULE_DESCRIPTION("Elonics E4000 silicon tuner driver"); MODULE_AUTHOR("Antti Palosaari <crope@xxxxxx>"); MODULE_LICENSE("GPL"); diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c index defc491..fbbe867 100644 --- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c +++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c @@ -898,8 +898,22 @@ static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap) adap->fe[0]->ops.tuner_ops.get_rf_strength; return 0; case TUNER_RTL2832_E4000: - fe = dvb_attach(e4000_attach, adap->fe[0], &d->i2c_adap, - &rtl2832u_e4000_config); +// fe = dvb_attach(e4000_attach, adap->fe[0], &d->i2c_adap, +// &rtl2832u_e4000_config); + { + static const struct i2c_board_info info = { + .type = "e4000", + .addr = 0x64, + }; + struct i2c_client *client; + + fe = NULL; + client = i2c_new_device(&d->i2c_adap, &info); + if (IS_ERR_OR_NULL(client)) + dev_err(&d->udev->dev, "e4000 probe failed\n"); + + dev_dbg(&d->udev->dev, "%s: client ptr %p\n", __func__, client); + } break; case TUNER_RTL2832_FC2580: fe = dvb_attach(fc2580_attach, adap->fe[0], &d->i2c_adap, -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html