summaryrefslogtreecommitdiffstats
path: root/sound/ppc/keywest.c
diff options
context:
space:
mode:
authorWolfram Sang <wsa@the-dreams.de>2015-05-23 18:15:11 +0200
committerTakashi Iwai <tiwai@suse.de>2015-05-29 12:54:10 +0200
commit28760c195e22856aedbacad5eb7b46ac1d76bb90 (patch)
tree53db2d817de8feaab9c7b7867360d83a51bc799d /sound/ppc/keywest.c
parent225068ab274dbd5c3a43fd80a6d553ccdf7b2c6f (diff)
downloadlinux-stable-28760c195e22856aedbacad5eb7b46ac1d76bb90.tar.gz
linux-stable-28760c195e22856aedbacad5eb7b46ac1d76bb90.tar.bz2
linux-stable-28760c195e22856aedbacad5eb7b46ac1d76bb90.zip
ALSA: ppc: keywest: check if DEQ was already instantiated
Due to changes in i2c-powermac, for some Macs the DEQ is instantiated now in i2c-powermac while some need the instantiation here in the keywest sound driver. The proper fix is to convert this driver to AOA. Until then support both ways of instantiation. Before this patch, some Macs lost sound because the sound driver failed when instantiating the DEQ for the second time. Signed-off-by: Wolfram Sang <wsa@the-dreams.de> Tested-by: Dan DeVoto <dand1972@yahoo.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/ppc/keywest.c')
-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;