2020-06-15 08:00:49

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 0/6] remove deprecated i2c_new_device API

I want to remove the above API this cycle, and just a few patches have
not made it into 5.8-rc1. They have been reviewed and most had been
promised to get into linux-next, but well, things happen. So, I hope it
is okay for everyone to collect them like this and push them via I2C for
5.8-rc2.

One minor exception is the media documentation patch which I simply have
missed so far, but it is trivial.

And then, finally, there is the removal of the old API as the final
patch. Phew, that's been a long ride.

I am open for comments, of course.

Happy hacking,

Wolfram


Wolfram Sang (6):
drm: encoder_slave: fix refcouting error for modules
drm: encoder_slave: use new I2C API
x86/platform/intel-mid: convert to use i2c_new_client_device()
video: backlight: tosa_lcd: convert to use i2c_new_client_device()
Documentation: media: convert to use i2c_new_client_device()
i2c: remove deprecated i2c_new_device API

.../driver-api/media/v4l2-subdev.rst | 2 +-
.../userspace-api/media/conf_nitpick.py | 2 +-
arch/x86/platform/intel-mid/sfi.c | 4 +--
drivers/gpu/drm/drm_encoder_slave.c | 15 ++++-------
drivers/i2c/i2c-core-base.c | 25 -------------------
drivers/video/backlight/tosa_lcd.c | 4 +--
include/linux/i2c.h | 8 +++---
7 files changed, 14 insertions(+), 46 deletions(-)

--
2.27.0


2020-06-15 08:00:52

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 3/6] x86/platform/intel-mid: convert to use i2c_new_client_device()

Move away from the deprecated API and return the shiny new ERRPTR where
useful.

Signed-off-by: Wolfram Sang <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

arch/x86/platform/intel-mid/sfi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/platform/intel-mid/sfi.c b/arch/x86/platform/intel-mid/sfi.c
index b8f7f193f383..30bd5714a3d4 100644
--- a/arch/x86/platform/intel-mid/sfi.c
+++ b/arch/x86/platform/intel-mid/sfi.c
@@ -287,8 +287,8 @@ void intel_scu_devices_create(void)

adapter = i2c_get_adapter(i2c_bus[i]);
if (adapter) {
- client = i2c_new_device(adapter, i2c_devs[i]);
- if (!client)
+ client = i2c_new_client_device(adapter, i2c_devs[i]);
+ if (IS_ERR(client))
pr_err("can't create i2c device %s\n",
i2c_devs[i]->type);
} else
--
2.27.0

2020-06-15 08:00:55

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 6/6] i2c: remove deprecated i2c_new_device API

All in-tree users have been converted to the new i2c_new_client_device
function, so remove this deprecated one.

Signed-off-by: Wolfram Sang <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

drivers/i2c/i2c-core-base.c | 25 -------------------------
include/linux/i2c.h | 8 +++-----
2 files changed, 3 insertions(+), 30 deletions(-)

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index d1f278f73011..26f03a14a478 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -815,31 +815,6 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf
}
EXPORT_SYMBOL_GPL(i2c_new_client_device);

-/**
- * i2c_new_device - instantiate an i2c device
- * @adap: the adapter managing the device
- * @info: describes one I2C device; bus_num is ignored
- * Context: can sleep
- *
- * This deprecated function has the same functionality as
- * @i2c_new_client_device, it just returns NULL instead of an ERR_PTR in case of
- * an error for compatibility with current I2C API. It will be removed once all
- * users are converted.
- *
- * This returns the new i2c client, which may be saved for later use with
- * i2c_unregister_device(); or NULL to indicate an error.
- */
-struct i2c_client *
-i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
-{
- struct i2c_client *ret;
-
- ret = i2c_new_client_device(adap, info);
- return IS_ERR(ret) ? NULL : ret;
-}
-EXPORT_SYMBOL_GPL(i2c_new_device);
-
-
/**
* i2c_unregister_device - reverse effect of i2c_new_*_device()
* @client: value returned from i2c_new_*_device()
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index c10617bb980a..b8b8963f8bb9 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -408,7 +408,7 @@ static inline bool i2c_detect_slave_mode(struct device *dev) { return false; }
* that are present. This information is used to grow the driver model tree.
* For mainboards this is done statically using i2c_register_board_info();
* bus numbers identify adapters that aren't yet available. For add-on boards,
- * i2c_new_device() does this dynamically with the adapter already known.
+ * i2c_new_client_device() does this dynamically with the adapter already known.
*/
struct i2c_board_info {
char type[I2C_NAME_SIZE];
@@ -439,13 +439,11 @@ struct i2c_board_info {


#if IS_ENABLED(CONFIG_I2C)
-/* Add-on boards should register/unregister their devices; e.g. a board
+/*
+ * Add-on boards should register/unregister their devices; e.g. a board
* with integrated I2C, a config eeprom, sensors, and a codec that's
* used in conjunction with the primary hardware.
*/
-struct i2c_client *
-i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
-
struct i2c_client *
i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info);

--
2.27.0

2020-06-15 08:01:01

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 4/6] video: backlight: tosa_lcd: convert to use i2c_new_client_device()

Move away from the deprecated API and return the shiny new ERRPTR where
useful.

Signed-off-by: Wolfram Sang <[email protected]>
Reviewed-by: Daniel Thompson <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

drivers/video/backlight/tosa_lcd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c
index e8ab583e5098..113116d3585c 100644
--- a/drivers/video/backlight/tosa_lcd.c
+++ b/drivers/video/backlight/tosa_lcd.c
@@ -107,7 +107,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data)
/* TG LCD GVSS */
tosa_tg_send(spi, TG_PINICTL, 0x0);

- if (!data->i2c) {
+ if (IS_ERR_OR_NULL(data->i2c)) {
/*
* after the pannel is powered up the first time,
* we can access the i2c bus so probe for the DAC
@@ -119,7 +119,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data)
.addr = DAC_BASE,
.platform_data = data->spi,
};
- data->i2c = i2c_new_device(adap, &info);
+ data->i2c = i2c_new_client_device(adap, &info);
}
}

--
2.27.0

2020-06-15 08:01:08

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 5/6] Documentation: media: convert to use i2c_new_client_device()

Move away from the deprecated API and advertise the new one.

Signed-off-by: Wolfram Sang <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

Documentation/driver-api/media/v4l2-subdev.rst | 2 +-
Documentation/userspace-api/media/conf_nitpick.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst
index 6e71f67455bb..bc7e1fc40a9d 100644
--- a/Documentation/driver-api/media/v4l2-subdev.rst
+++ b/Documentation/driver-api/media/v4l2-subdev.rst
@@ -451,7 +451,7 @@ The bridge driver also has some helper functions it can use:
"module_foo", "chipid", 0x36, NULL);

This loads the given module (can be ``NULL`` if no module needs to be loaded)
-and calls :c:func:`i2c_new_device` with the given ``i2c_adapter`` and
+and calls :c:func:`i2c_new_client_device` with the given ``i2c_adapter`` and
chip/address arguments. If all goes well, then it registers the subdev with
the v4l2_device.

diff --git a/Documentation/userspace-api/media/conf_nitpick.py b/Documentation/userspace-api/media/conf_nitpick.py
index d0c50d75f518..0a8e236d07ab 100644
--- a/Documentation/userspace-api/media/conf_nitpick.py
+++ b/Documentation/userspace-api/media/conf_nitpick.py
@@ -27,7 +27,7 @@ nitpick_ignore = [
("c:func", "copy_to_user"),
("c:func", "determine_valid_ioctls"),
("c:func", "ERR_PTR"),
- ("c:func", "i2c_new_device"),
+ ("c:func", "i2c_new_client_device"),
("c:func", "ioctl"),
("c:func", "IS_ERR"),
("c:func", "KERNEL_VERSION"),
--
2.27.0

2020-06-15 08:03:17

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 2/6] drm: encoder_slave: use new I2C API

i2c_new_client() is deprecated, use the replacement
i2c_new_client_device(). Also, we have a helper to check if a driver is
bound. Use it to simplify the code. Note that this changes the errno for
a failed device creation from ENOMEM to ENODEV. No callers currently
interpret this errno, though, so we use this condensed error check.

Signed-off-by: Wolfram Sang <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

drivers/gpu/drm/drm_encoder_slave.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
index d50a7884e69e..e464429d32df 100644
--- a/drivers/gpu/drm/drm_encoder_slave.c
+++ b/drivers/gpu/drm/drm_encoder_slave.c
@@ -61,13 +61,8 @@ int drm_i2c_encoder_init(struct drm_device *dev,

request_module("%s%s", I2C_MODULE_PREFIX, info->type);

- client = i2c_new_device(adap, info);
- if (!client) {
- err = -ENOMEM;
- goto fail;
- }
-
- if (!client->dev.driver) {
+ client = i2c_new_client_device(adap, info);
+ if (!i2c_client_has_driver(client)) {
err = -ENODEV;
goto fail_unregister;
}
@@ -96,7 +91,6 @@ int drm_i2c_encoder_init(struct drm_device *dev,
module_put(module);
fail_unregister:
i2c_unregister_device(client);
-fail:
return err;
}
EXPORT_SYMBOL(drm_i2c_encoder_init);
--
2.27.0

2020-06-15 08:04:16

by Wolfram Sang

[permalink] [raw]
Subject: [PATCH 1/6] drm: encoder_slave: fix refcouting error for modules

module_put() balances try_module_get(), not request_module(). Fix the
error path to match that.

Fixes: 2066facca4c7 ("drm/kms: slave encoder interface.")
Signed-off-by: Wolfram Sang <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
---

I'd like to push it via I2C for 5.8-rc2.

drivers/gpu/drm/drm_encoder_slave.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
index cf804389f5ec..d50a7884e69e 100644
--- a/drivers/gpu/drm/drm_encoder_slave.c
+++ b/drivers/gpu/drm/drm_encoder_slave.c
@@ -84,7 +84,7 @@ int drm_i2c_encoder_init(struct drm_device *dev,

err = encoder_drv->encoder_init(client, dev, encoder);
if (err)
- goto fail_unregister;
+ goto fail_module_put;

if (info->platform_data)
encoder->slave_funcs->set_config(&encoder->base,
@@ -92,9 +92,10 @@ int drm_i2c_encoder_init(struct drm_device *dev,

return 0;

+fail_module_put:
+ module_put(module);
fail_unregister:
i2c_unregister_device(client);
- module_put(module);
fail:
return err;
}
--
2.27.0

2020-06-15 08:41:15

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: Re: [PATCH 5/6] Documentation: media: convert to use i2c_new_client_device()

Em Mon, 15 Jun 2020 09:58:14 +0200
Wolfram Sang <[email protected]> escreveu:

> Move away from the deprecated API and advertise the new one.
>
> Signed-off-by: Wolfram Sang <[email protected]>
> Cc: Mauro Carvalho Chehab <[email protected]>
> ---
>
> I'd like to push it via I2C for 5.8-rc2.

OK!

Reviewed-by: Mauro Carvalho Chehab <[email protected]>

>
> Documentation/driver-api/media/v4l2-subdev.rst | 2 +-
> Documentation/userspace-api/media/conf_nitpick.py | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/driver-api/media/v4l2-subdev.rst b/Documentation/driver-api/media/v4l2-subdev.rst
> index 6e71f67455bb..bc7e1fc40a9d 100644
> --- a/Documentation/driver-api/media/v4l2-subdev.rst
> +++ b/Documentation/driver-api/media/v4l2-subdev.rst
> @@ -451,7 +451,7 @@ The bridge driver also has some helper functions it can use:
> "module_foo", "chipid", 0x36, NULL);
>
> This loads the given module (can be ``NULL`` if no module needs to be loaded)
> -and calls :c:func:`i2c_new_device` with the given ``i2c_adapter`` and
> +and calls :c:func:`i2c_new_client_device` with the given ``i2c_adapter`` and
> chip/address arguments. If all goes well, then it registers the subdev with
> the v4l2_device.
>
> diff --git a/Documentation/userspace-api/media/conf_nitpick.py b/Documentation/userspace-api/media/conf_nitpick.py
> index d0c50d75f518..0a8e236d07ab 100644
> --- a/Documentation/userspace-api/media/conf_nitpick.py
> +++ b/Documentation/userspace-api/media/conf_nitpick.py
> @@ -27,7 +27,7 @@ nitpick_ignore = [
> ("c:func", "copy_to_user"),
> ("c:func", "determine_valid_ioctls"),
> ("c:func", "ERR_PTR"),
> - ("c:func", "i2c_new_device"),
> + ("c:func", "i2c_new_client_device"),
> ("c:func", "ioctl"),
> ("c:func", "IS_ERR"),
> ("c:func", "KERNEL_VERSION"),



Thanks,
Mauro

2020-06-16 12:15:09

by Daniel Vetter

[permalink] [raw]
Subject: Re: [PATCH 0/6] remove deprecated i2c_new_device API

On Mon, Jun 15, 2020 at 09:58:09AM +0200, Wolfram Sang wrote:
> I want to remove the above API this cycle, and just a few patches have
> not made it into 5.8-rc1. They have been reviewed and most had been
> promised to get into linux-next, but well, things happen. So, I hope it
> is okay for everyone to collect them like this and push them via I2C for
> 5.8-rc2.

for the drm side of things:

Acked-by: Daniel Vetter <[email protected]>
>
> One minor exception is the media documentation patch which I simply have
> missed so far, but it is trivial.
>
> And then, finally, there is the removal of the old API as the final
> patch. Phew, that's been a long ride.
>
> I am open for comments, of course.
>
> Happy hacking,
>
> Wolfram
>
>
> Wolfram Sang (6):
> drm: encoder_slave: fix refcouting error for modules
> drm: encoder_slave: use new I2C API
> x86/platform/intel-mid: convert to use i2c_new_client_device()
> video: backlight: tosa_lcd: convert to use i2c_new_client_device()
> Documentation: media: convert to use i2c_new_client_device()
> i2c: remove deprecated i2c_new_device API
>
> .../driver-api/media/v4l2-subdev.rst | 2 +-
> .../userspace-api/media/conf_nitpick.py | 2 +-
> arch/x86/platform/intel-mid/sfi.c | 4 +--
> drivers/gpu/drm/drm_encoder_slave.c | 15 ++++-------
> drivers/i2c/i2c-core-base.c | 25 -------------------
> drivers/video/backlight/tosa_lcd.c | 4 +--
> include/linux/i2c.h | 8 +++---
> 7 files changed, 14 insertions(+), 46 deletions(-)
>
> --
> 2.27.0
>
> _______________________________________________
> dri-devel mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

2020-06-16 14:12:18

by Emil Velikov

[permalink] [raw]
Subject: Re: [PATCH 0/6] remove deprecated i2c_new_device API

Hi all,

On Tue, 16 Jun 2020 at 13:12, Daniel Vetter <[email protected]> wrote:
>
> On Mon, Jun 15, 2020 at 09:58:09AM +0200, Wolfram Sang wrote:
> > I want to remove the above API this cycle, and just a few patches have
> > not made it into 5.8-rc1. They have been reviewed and most had been
> > promised to get into linux-next, but well, things happen. So, I hope it
> > is okay for everyone to collect them like this and push them via I2C for
> > 5.8-rc2.
>
> for the drm side of things:
>
> Acked-by: Daniel Vetter <[email protected]>
> >
> > One minor exception is the media documentation patch which I simply have
> > missed so far, but it is trivial.
> >
> > And then, finally, there is the removal of the old API as the final
> > patch. Phew, that's been a long ride.
> >
> > I am open for comments, of course.
> >
> > Happy hacking,
> >
> > Wolfram
> >
> >
> > Wolfram Sang (6):
> > drm: encoder_slave: fix refcouting error for modules
> > drm: encoder_slave: use new I2C API

The first two are in drm-misc-next and are to be expected with the 5.9
merge window. As long as that doesn't cause major nuisance proceed as
you prefer.

-Emil

2020-06-18 08:45:56

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH 4/6] video: backlight: tosa_lcd: convert to use i2c_new_client_device()

On Mon, 15 Jun 2020, Wolfram Sang wrote:

> Move away from the deprecated API and return the shiny new ERRPTR where
> useful.
>
> Signed-off-by: Wolfram Sang <[email protected]>
> Reviewed-by: Daniel Thompson <[email protected]>
> ---
>
> I'd like to push it via I2C for 5.8-rc2.

Go for it:

Acked-by: Lee Jones <[email protected]>

--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

2020-06-19 08:55:05

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH 0/6] remove deprecated i2c_new_device API

On Mon, Jun 15, 2020 at 09:58:09AM +0200, Wolfram Sang wrote:
> I want to remove the above API this cycle, and just a few patches have
> not made it into 5.8-rc1. They have been reviewed and most had been
> promised to get into linux-next, but well, things happen. So, I hope it
> is okay for everyone to collect them like this and push them via I2C for
> 5.8-rc2.
>
> One minor exception is the media documentation patch which I simply have
> missed so far, but it is trivial.
>
> And then, finally, there is the removal of the old API as the final
> patch. Phew, that's been a long ride.
>
> I am open for comments, of course.

Applied to for-current, thanks!


Attachments:
(No filename) (683.00 B)
signature.asc (849.00 B)
Download all attachments