summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/ppc/keywest.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/sound/ppc/keywest.c b/sound/ppc/keywest.c
index d7627bae0836..6120a067494a 100644
--- a/sound/ppc/keywest.c
+++ b/sound/ppc/keywest.c
@@ -31,10 +31,15 @@
*/
static struct pmac_keywest *keywest_ctx;
+static bool keywest_probed;
static int keywest_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
+ keywest_probed = true;
+ /* If instantiated via i2c-powermac, we still need to set the client */
+ if (!keywest_ctx->client)
+ keywest_ctx->client = client;
i2c_set_clientdata(client, keywest_ctx);
return 0;
}
@@ -92,7 +97,8 @@ static int keywest_remove(struct i2c_client *client)
static const struct i2c_device_id keywest_i2c_id[] = {
- { "keywest", 0 },
+ { "MAC,tas3004", 0 }, /* instantiated by i2c-powermac */
+ { "keywest", 0 }, /* instantiated by us if needed */
{ }
};
@@ -149,8 +155,13 @@ int snd_pmac_keywest_init(struct pmac_keywest *i2c)
return err;
}
+ /* There was already a device from i2c-powermac. Great, let's return */
+ if (keywest_probed)
+ return 0;
+
/* We assume Macs have consecutive I2C bus numbers starting at 0 */
while (adap) {
+ /* Scan for devices to be bound to */
err = keywest_attach_adapter(adap);
if (!err)
return 0;