aboutsummaryrefslogtreecommitdiff
path: root/sound/aoa/codecs/tas.c
diff options
context:
space:
mode:
authorTakashi Iwai2009-10-01 07:46:33 +0200
committerTakashi Iwai2009-10-01 07:46:33 +0200
commit18c4078489fe064cc0ed08be3381cf2f26657f5f (patch)
tree72d5534c800da85393209a39d335af2d5606c695 /sound/aoa/codecs/tas.c
parent5da5b6f9e967e8c62486444f97e66252c3768d7d (diff)
ALSA: Don't assume i2c device probing always succeeds
The client->driver pointer can be NULL when i2c-device probing fails in i2c_new_device(). This patch adds the NULL checks for client->driver and return the error instead of blind assumption of driver availability. Reported-by: Tim Shepard <shep@alum.mit.edu> Cc: Jean Delvare <khali@linux-fr.org> Cc: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/aoa/codecs/tas.c')
-rw-r--r--sound/aoa/codecs/tas.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c
index f0ebc971c686..1dd66ddffcaf 100644
--- a/sound/aoa/codecs/tas.c
+++ b/sound/aoa/codecs/tas.c
@@ -897,6 +897,15 @@ static int tas_create(struct i2c_adapter *adapter,
client = i2c_new_device(adapter, &info);
if (!client)
return -ENODEV;
+ /*
+ * We know the driver is already loaded, so the device should be
+ * already bound. If not it means binding failed, and then there
+ * is no point in keeping the device instantiated.
+ */
+ if (!client->driver) {
+ i2c_unregister_device(client);
+ return -ENODEV;
+ }
/*
* Let i2c-core delete that device on driver removal.