* [PATCH 0/2] i2c: rework last users of 2.4 style attach_adapter
@ 2015-04-16 13:23 Wolfram Sang
2015-04-16 13:23 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach adapter Wolfram Sang
2015-04-16 13:23 ` [PATCH 2/2] sound: ppc: keywest: " Wolfram Sang
0 siblings, 2 replies; 6+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev
Cc: linux-kernel, alsa-devel, Benjamin Herrenschmidt,
Michael Ellerman, linux-i2c, Wolfram Sang
The attach_adapter mechanism of the I2C framework is deprecated for years.
There are two users left; drivers for old Macintosh computers. I got the idea
of replacing this mechanism with a custom one with the help of deferred
probing. Because I don't have the hardware, I modified the windtunnel driver to
be runnable on my Renesas Lager board (ARM). This patch is not in this series
but in the branch mentioned below.
I first verified that the attach_adapter method was in deed used for bus
scanning. When scanning, the driver rightfully failed on detecting the actual
i2c clients because there is no such hardware on my board. However, the actual
scanning happened.
Using my custom mechanism, the same happens: all busses get scanned, then the
clients cannot be detected. Since I didn't change the actual detection code, I
assume that it should be working on those Macintosh devices as well. The
keywest driver is only compile-tested. That being said, I'd be more than happy,
if we could find someone willing to test these patches. Top-of-tree kernel
would be nice, but these patches can easily be backported to probably the
beginning of deferred probing. I will also notify some ppc lists of
distributions of this thread for further help.
If this works out, we can _finally_ get rid of this stone-age mechanism and
clean up the i2c core.
Changes since RFC: return -ENODEV instead of 0 when exiting the while loop
(= nothing found on all busses)
The branch I used for ARM compilation is here:
git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/attach_adapter_removal_with_arm_compile-experimental
Thanks,
Wolfram
Wolfram Sang (2):
macintosh: therm_windtunnel: drop using attach adapter
sound: ppc: keywest: drop using attach adapter
drivers/macintosh/therm_windtunnel.c | 25 +++++++++++++++++++++++--
sound/ppc/keywest.c | 23 +++++++++++++++++++----
2 files changed, 42 insertions(+), 6 deletions(-)
--
2.1.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] macintosh: therm_windtunnel: drop using attach adapter
2015-04-16 13:23 [PATCH 0/2] i2c: rework last users of 2.4 style attach_adapter Wolfram Sang
@ 2015-04-16 13:23 ` Wolfram Sang
2015-04-16 13:23 ` [PATCH 2/2] sound: ppc: keywest: " Wolfram Sang
1 sibling, 0 replies; 6+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev
Cc: linux-kernel, alsa-devel, Benjamin Herrenschmidt,
Michael Ellerman, linux-i2c, Wolfram Sang
As we now have deferred probing, we can use a custom mechanism and
finally get rid of the legacy interface from the i2c core.
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
---
drivers/macintosh/therm_windtunnel.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/macintosh/therm_windtunnel.c b/drivers/macintosh/therm_windtunnel.c
index 835ca8be4c1632..57909a3ce67bf2 100644
--- a/drivers/macintosh/therm_windtunnel.c
+++ b/drivers/macintosh/therm_windtunnel.c
@@ -422,7 +422,6 @@ static struct i2c_driver g4fan_driver = {
.driver = {
.name = "therm_windtunnel",
},
- .attach_adapter = do_attach,
.probe = do_probe,
.remove = do_remove,
.id_table = therm_windtunnel_id,
@@ -435,7 +434,29 @@ static struct i2c_driver g4fan_driver = {
static int therm_of_probe(struct platform_device *dev)
{
- return i2c_add_driver( &g4fan_driver );
+ struct i2c_adapter *adap;
+ int ret, i = 0;
+
+ adap = i2c_get_adapter(0);
+ if (!adap)
+ return -EPROBE_DEFER;
+
+ ret = i2c_add_driver(&g4fan_driver);
+ if (ret) {
+ i2c_put_adapter(adap);
+ return ret;
+ }
+
+ /* We assume Macs have consecutive I2C bus numbers starting at 0 */
+ while (adap) {
+ do_attach(adap);
+ if (x.running)
+ return 0;
+ i2c_put_adapter(adap);
+ adap = i2c_get_adapter(++i);
+ }
+
+ return -ENODEV;
}
static int
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] sound: ppc: keywest: drop using attach adapter
2015-04-16 13:23 [PATCH 0/2] i2c: rework last users of 2.4 style attach_adapter Wolfram Sang
2015-04-16 13:23 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach adapter Wolfram Sang
@ 2015-04-16 13:23 ` Wolfram Sang
1 sibling, 0 replies; 6+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev
Cc: linux-kernel, alsa-devel, Benjamin Herrenschmidt,
Michael Ellerman, linux-i2c, Wolfram Sang
As we now have deferred probing, we can use a custom mechanism and
finally get rid of the legacy interface from the i2c core.
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
---
sound/ppc/keywest.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/sound/ppc/keywest.c b/sound/ppc/keywest.c
index 0d1c27e911b8dd..d7627bae08362e 100644
--- a/sound/ppc/keywest.c
+++ b/sound/ppc/keywest.c
@@ -52,7 +52,7 @@ static int keywest_attach_adapter(struct i2c_adapter *adapter)
return -EINVAL;
if (strncmp(adapter->name, "mac-io", 6))
- return 0; /* ignored */
+ return -EINVAL; /* ignored */
memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "keywest", I2C_NAME_SIZE);
@@ -100,7 +100,6 @@ static struct i2c_driver keywest_driver = {
.driver = {
.name = "PMac Keywest Audio",
},
- .attach_adapter = keywest_attach_adapter,
.probe = keywest_probe,
.remove = keywest_remove,
.id_table = keywest_i2c_id,
@@ -132,16 +131,32 @@ int snd_pmac_tumbler_post_init(void)
/* exported */
int snd_pmac_keywest_init(struct pmac_keywest *i2c)
{
- int err;
+ struct i2c_adapter *adap;
+ int err, i = 0;
if (keywest_ctx)
return -EBUSY;
+ adap = i2c_get_adapter(0);
+ if (!adap)
+ return -EPROBE_DEFER;
+
keywest_ctx = i2c;
if ((err = i2c_add_driver(&keywest_driver))) {
snd_printk(KERN_ERR "cannot register keywest i2c driver\n");
+ i2c_put_adapter(adap);
return err;
}
- return 0;
+
+ /* We assume Macs have consecutive I2C bus numbers starting at 0 */
+ while (adap) {
+ err = keywest_attach_adapter(adap);
+ if (!err)
+ return 0;
+ i2c_put_adapter(adap);
+ adap = i2c_get_adapter(++i);
+ }
+
+ return -ENODEV;
}
--
2.1.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 0/2] i2c: remove deprecated attach_adapter callback
@ 2018-08-21 15:02 Wolfram Sang
2018-08-21 15:02 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter Wolfram Sang
0 siblings, 1 reply; 6+ messages in thread
From: Wolfram Sang @ 2018-08-21 15:02 UTC (permalink / raw)
To: linux-i2c
Cc: linuxppc-dev, Benjamin Herrenschmidt, Michael Ellerman,
linux-kernel, Wolfram Sang
So, I wanted to do this in the next cycle, but Linus seems to want it this
cycle already [1], so here it is:
Remove the attach_adapter callback from the 2.4 times by converting
the last user to a custom probing mechanism based on deferred probing. We used
this already in commit ac397c80de89 ("ALSA: ppc: keywest: drop using attach
adapter") successfully on HW, so we agreed to use it on the windtunnel driver
as well.
With the last user gone, we can then remove the callback \o/ I think this
allows for more cleanup in the core, but let's do this later and focus on the
removal for now.
Tested on a Renesas R-Car Salvator-XS board (M3N) by using and rebinding
various I2C busses. Build bot and checkpatch are happy, too.
I'd like to send a pull request to Linus this merge window, so looking forward
to super fast comments, acks, etc...
Thanks,
Wolfram
[1] http://patchwork.ozlabs.org/patch/959322/#1976742
Wolfram Sang (2):
macintosh: therm_windtunnel: drop using attach_adapter
i2c: remove deprecated attach_adapter callback
drivers/i2c/i2c-core-base.c | 11 +----------
drivers/macintosh/therm_windtunnel.c | 25 +++++++++++++++++++++++--
include/linux/i2c.h | 6 ------
3 files changed, 24 insertions(+), 18 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter
2018-08-21 15:02 [PATCH 0/2] i2c: remove deprecated attach_adapter callback Wolfram Sang
@ 2018-08-21 15:02 ` Wolfram Sang
2018-08-23 3:31 ` Michael Ellerman
2018-08-24 12:47 ` Wolfram Sang
0 siblings, 2 replies; 6+ messages in thread
From: Wolfram Sang @ 2018-08-21 15:02 UTC (permalink / raw)
To: linux-i2c
Cc: linuxppc-dev, Benjamin Herrenschmidt, Michael Ellerman,
linux-kernel, Wolfram Sang
As we now have deferred probing, we can use a custom mechanism and
finally get rid of the legacy interface from the i2c core.
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
---
drivers/macintosh/therm_windtunnel.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/macintosh/therm_windtunnel.c b/drivers/macintosh/therm_windtunnel.c
index 68dcbcb4fc5b..8c744578122a 100644
--- a/drivers/macintosh/therm_windtunnel.c
+++ b/drivers/macintosh/therm_windtunnel.c
@@ -432,7 +432,6 @@ static struct i2c_driver g4fan_driver = {
.driver = {
.name = "therm_windtunnel",
},
- .attach_adapter = do_attach,
.probe = do_probe,
.remove = do_remove,
.id_table = therm_windtunnel_id,
@@ -445,7 +444,29 @@ static struct i2c_driver g4fan_driver = {
static int therm_of_probe(struct platform_device *dev)
{
- return i2c_add_driver( &g4fan_driver );
+ struct i2c_adapter *adap;
+ int ret, i = 0;
+
+ adap = i2c_get_adapter(0);
+ if (!adap)
+ return -EPROBE_DEFER;
+
+ ret = i2c_add_driver(&g4fan_driver);
+ if (ret) {
+ i2c_put_adapter(adap);
+ return ret;
+ }
+
+ /* We assume Macs have consecutive I2C bus numbers starting at 0 */
+ while (adap) {
+ do_attach(adap);
+ if (x.running)
+ return 0;
+ i2c_put_adapter(adap);
+ adap = i2c_get_adapter(++i);
+ }
+
+ return -ENODEV;
}
static int
--
2.11.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter
2018-08-21 15:02 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter Wolfram Sang
@ 2018-08-23 3:31 ` Michael Ellerman
2018-08-24 12:47 ` Wolfram Sang
1 sibling, 0 replies; 6+ messages in thread
From: Michael Ellerman @ 2018-08-23 3:31 UTC (permalink / raw)
To: Wolfram Sang, linux-i2c
Cc: linuxppc-dev, Benjamin Herrenschmidt, linux-kernel, Wolfram Sang
Wolfram Sang <wsa@the-dreams.de> writes:
> As we now have deferred probing, we can use a custom mechanism and
> finally get rid of the legacy interface from the i2c core.
>
> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
> ---
> drivers/macintosh/therm_windtunnel.c | 25 +++++++++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
I don't have a G4 to test this on, so merge it and if it breaks we can
fix it up later.
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
cheers
> diff --git a/drivers/macintosh/therm_windtunnel.c b/drivers/macintosh/therm_windtunnel.c
> index 68dcbcb4fc5b..8c744578122a 100644
> --- a/drivers/macintosh/therm_windtunnel.c
> +++ b/drivers/macintosh/therm_windtunnel.c
> @@ -432,7 +432,6 @@ static struct i2c_driver g4fan_driver = {
> .driver = {
> .name = "therm_windtunnel",
> },
> - .attach_adapter = do_attach,
> .probe = do_probe,
> .remove = do_remove,
> .id_table = therm_windtunnel_id,
> @@ -445,7 +444,29 @@ static struct i2c_driver g4fan_driver = {
>
> static int therm_of_probe(struct platform_device *dev)
> {
> - return i2c_add_driver( &g4fan_driver );
> + struct i2c_adapter *adap;
> + int ret, i = 0;
> +
> + adap = i2c_get_adapter(0);
> + if (!adap)
> + return -EPROBE_DEFER;
> +
> + ret = i2c_add_driver(&g4fan_driver);
> + if (ret) {
> + i2c_put_adapter(adap);
> + return ret;
> + }
> +
> + /* We assume Macs have consecutive I2C bus numbers starting at 0 */
> + while (adap) {
> + do_attach(adap);
> + if (x.running)
> + return 0;
> + i2c_put_adapter(adap);
> + adap = i2c_get_adapter(++i);
> + }
> +
> + return -ENODEV;
> }
>
> static int
> --
> 2.11.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter
2018-08-21 15:02 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter Wolfram Sang
2018-08-23 3:31 ` Michael Ellerman
@ 2018-08-24 12:47 ` Wolfram Sang
1 sibling, 0 replies; 6+ messages in thread
From: Wolfram Sang @ 2018-08-24 12:47 UTC (permalink / raw)
To: linux-i2c
Cc: linuxppc-dev, Benjamin Herrenschmidt, Michael Ellerman, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 284 bytes --]
On Tue, Aug 21, 2018 at 05:02:39PM +0200, Wolfram Sang wrote:
> As we now have deferred probing, we can use a custom mechanism and
> finally get rid of the legacy interface from the i2c core.
>
> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Applied to for-next, thanks!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-08-24 12:47 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-16 13:23 [PATCH 0/2] i2c: rework last users of 2.4 style attach_adapter Wolfram Sang
2015-04-16 13:23 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach adapter Wolfram Sang
2015-04-16 13:23 ` [PATCH 2/2] sound: ppc: keywest: " Wolfram Sang
2018-08-21 15:02 [PATCH 0/2] i2c: remove deprecated attach_adapter callback Wolfram Sang
2018-08-21 15:02 ` [PATCH 1/2] macintosh: therm_windtunnel: drop using attach_adapter Wolfram Sang
2018-08-23 3:31 ` Michael Ellerman
2018-08-24 12:47 ` Wolfram Sang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).