* [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; 3+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev; +Cc: alsa-devel, Wolfram Sang, linux-kernel, linux-i2c
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] 3+ 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; 3+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev; +Cc: alsa-devel, Wolfram Sang, linux-kernel, linux-i2c
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] 3+ 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; 3+ messages in thread
From: Wolfram Sang @ 2015-04-16 13:23 UTC (permalink / raw)
To: linuxppc-dev; +Cc: alsa-devel, Wolfram Sang, linux-kernel, linux-i2c
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] 3+ messages in thread
end of thread, other threads:[~2015-04-16 13:22 UTC | newest]
Thread overview: 3+ 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
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).