diff options
Diffstat (limited to 'sound/aoa/codecs/tas.c')
| -rw-r--r-- | sound/aoa/codecs/tas.c | 95 | 
1 files changed, 5 insertions, 90 deletions
diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c index fd2188c3df2..cf3c6303b7e 100644 --- a/sound/aoa/codecs/tas.c +++ b/sound/aoa/codecs/tas.c @@ -826,7 +826,7 @@ static int tas_init_codec(struct aoa_codec *codec)  		return -ENODEV;  	} -	if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, tas, &ops)) { +	if (aoa_snd_device_new(SNDRV_DEV_CODEC, tas, &ops)) {  		printk(KERN_ERR PFX "failed to create tas snd device!\n");  		return -ENODEV;  	} @@ -883,43 +883,10 @@ static void tas_exit_codec(struct aoa_codec *codec)  } -static int tas_create(struct i2c_adapter *adapter, -		       struct device_node *node, -		       int addr) -{ -	struct i2c_board_info info; -	struct i2c_client *client; - -	memset(&info, 0, sizeof(struct i2c_board_info)); -	strlcpy(info.type, "aoa_codec_tas", I2C_NAME_SIZE); -	info.addr = addr; -	info.platform_data = node; - -	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. -	 * This is safe because i2c-core holds the core_lock mutex for us. -	 */ -	list_add_tail(&client->detected, &client->driver->clients); -	return 0; -} -  static int tas_i2c_probe(struct i2c_client *client,  			 const struct i2c_device_id *id)  { -	struct device_node *node = client->dev.platform_data; +	struct device_node *node = client->dev.of_node;  	struct tas *tas;  	tas = kzalloc(sizeof(struct tas), GFP_KERNEL); @@ -953,47 +920,6 @@ static int tas_i2c_probe(struct i2c_client *client,  	return -EINVAL;  } -static int tas_i2c_attach(struct i2c_adapter *adapter) -{ -	struct device_node *busnode, *dev = NULL; -	struct pmac_i2c_bus *bus; - -	bus = pmac_i2c_adapter_to_bus(adapter); -	if (bus == NULL) -		return -ENODEV; -	busnode = pmac_i2c_get_bus_node(bus); - -	while ((dev = of_get_next_child(busnode, dev)) != NULL) { -		if (of_device_is_compatible(dev, "tas3004")) { -			const u32 *addr; -			printk(KERN_DEBUG PFX "found tas3004\n"); -			addr = of_get_property(dev, "reg", NULL); -			if (!addr) -				continue; -			return tas_create(adapter, dev, ((*addr) >> 1) & 0x7f); -		} -		/* older machines have no 'codec' node with a 'compatible' -		 * property that says 'tas3004', they just have a 'deq' -		 * node without any such property... */ -		if (strcmp(dev->name, "deq") == 0) { -			const u32 *_addr; -			u32 addr; -			printk(KERN_DEBUG PFX "found 'deq' node\n"); -			_addr = of_get_property(dev, "i2c-address", NULL); -			if (!_addr) -				continue; -			addr = ((*_addr) >> 1) & 0x7f; -			/* now, if the address doesn't match any of the two -			 * that a tas3004 can have, we cannot handle this. -			 * I doubt it ever happens but hey. */ -			if (addr != 0x34 && addr != 0x35) -				continue; -			return tas_create(adapter, dev, addr); -		} -	} -	return -ENODEV; -} -  static int tas_i2c_remove(struct i2c_client *client)  {  	struct tas *tas = i2c_get_clientdata(client); @@ -1011,30 +937,19 @@ static int tas_i2c_remove(struct i2c_client *client)  }  static const struct i2c_device_id tas_i2c_id[] = { -	{ "aoa_codec_tas", 0 }, +	{ "MAC,tas3004", 0 },  	{ }  }; +MODULE_DEVICE_TABLE(i2c,tas_i2c_id);  static struct i2c_driver tas_driver = {  	.driver = {  		.name = "aoa_codec_tas",  		.owner = THIS_MODULE,  	}, -	.attach_adapter = tas_i2c_attach,  	.probe = tas_i2c_probe,  	.remove = tas_i2c_remove,  	.id_table = tas_i2c_id,  }; -static int __init tas_init(void) -{ -	return i2c_add_driver(&tas_driver); -} - -static void __exit tas_exit(void) -{ -	i2c_del_driver(&tas_driver); -} - -module_init(tas_init); -module_exit(tas_exit); +module_i2c_driver(tas_driver);  | 
