Loading include/sound/soc-dapm.h +0 −2 Original line number Diff line number Diff line Loading @@ -221,8 +221,6 @@ int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, int num); /* dapm path setup */ int __deprecated snd_soc_dapm_connect_input(struct snd_soc_codec *codec, const char *sink_name, const char *control_name, const char *src_name); int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec); void snd_soc_dapm_free(struct snd_soc_device *socdev); int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, Loading sound/soc/codecs/wm8580.c +53 −55 Original line number Diff line number Diff line Loading @@ -900,85 +900,85 @@ static struct snd_soc_device *wm8580_socdev; * low = 0x1a * high = 0x1b */ static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END }; /* Magic definition of all other variables and things */ I2C_CLIENT_INSMOD; static struct i2c_driver wm8580_i2c_driver; static struct i2c_client client_template; static int wm8580_codec_probe(struct i2c_adapter *adap, int addr, int kind) static int wm8580_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { struct snd_soc_device *socdev = wm8580_socdev; struct wm8580_setup_data *setup = socdev->codec_data; struct snd_soc_codec *codec = socdev->codec; struct i2c_client *i2c; int ret; if (addr != setup->i2c_address) return -ENODEV; client_template.adapter = adap; client_template.addr = addr; i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); if (i2c == NULL) { kfree(codec); return -ENOMEM; } i2c_set_clientdata(i2c, codec); codec->control_data = i2c; ret = i2c_attach_client(i2c); if (ret < 0) { dev_err(&i2c->dev, "failed to attach codec at addr %x\n", addr); goto err; } ret = wm8580_init(socdev); if (ret < 0) { if (ret < 0) dev_err(&i2c->dev, "failed to initialise WM8580\n"); goto err; } return ret; err: kfree(codec); kfree(i2c); return ret; } static int wm8580_i2c_detach(struct i2c_client *client) static int wm8580_i2c_remove(struct i2c_client *client) { struct snd_soc_codec *codec = i2c_get_clientdata(client); i2c_detach_client(client); kfree(codec->reg_cache); kfree(client); return 0; } static int wm8580_i2c_attach(struct i2c_adapter *adap) { return i2c_probe(adap, &addr_data, wm8580_codec_probe); } static const struct i2c_device_id wm8580_i2c_id[] = { { "wm8580", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, wm8580_i2c_id); /* corgi i2c codec control layer */ static struct i2c_driver wm8580_i2c_driver = { .driver = { .name = "WM8580 I2C Codec", .owner = THIS_MODULE, }, .attach_adapter = wm8580_i2c_attach, .detach_client = wm8580_i2c_detach, .command = NULL, .probe = wm8580_i2c_probe, .remove = wm8580_i2c_remove, .id_table = wm8580_i2c_id, }; static struct i2c_client client_template = { .name = "WM8580", .driver = &wm8580_i2c_driver, }; static int wm8580_add_i2c_device(struct platform_device *pdev, const struct wm8580_setup_data *setup) { struct i2c_board_info info; struct i2c_adapter *adapter; struct i2c_client *client; int ret; ret = i2c_add_driver(&wm8580_i2c_driver); if (ret != 0) { dev_err(&pdev->dev, "can't add i2c driver\n"); return ret; } memset(&info, 0, sizeof(struct i2c_board_info)); info.addr = setup->i2c_address; strlcpy(info.type, "wm8580", I2C_NAME_SIZE); adapter = i2c_get_adapter(setup->i2c_bus); if (!adapter) { dev_err(&pdev->dev, "can't get i2c adapter %d\n", setup->i2c_bus); goto err_driver; } client = i2c_new_device(adapter, &info); i2c_put_adapter(adapter); if (!client) { dev_err(&pdev->dev, "can't add i2c device at 0x%x\n", (unsigned int)info.addr); goto err_driver; } return 0; err_driver: i2c_del_driver(&wm8580_i2c_driver); return -ENODEV; } #endif static int wm8580_probe(struct platform_device *pdev) Loading Loading @@ -1011,11 +1011,8 @@ static int wm8580_probe(struct platform_device *pdev) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) if (setup->i2c_address) { normal_i2c[0] = setup->i2c_address; codec->hw_write = (hw_write_t)i2c_master_send; ret = i2c_add_driver(&wm8580_i2c_driver); if (ret != 0) printk(KERN_ERR "can't add i2c driver"); ret = wm8580_add_i2c_device(pdev, setup); } #else /* Add other interfaces here */ Loading @@ -1034,6 +1031,7 @@ static int wm8580_remove(struct platform_device *pdev) snd_soc_free_pcms(socdev); snd_soc_dapm_free(socdev); #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) i2c_unregister_device(codec->control_data); i2c_del_driver(&wm8580_i2c_driver); #endif kfree(codec->private_data); Loading sound/soc/codecs/wm8580.h +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #define WM8580_CLKSRC_NONE 5 struct wm8580_setup_data { int i2c_bus; unsigned short i2c_address; }; Loading sound/soc/codecs/wm8900.c +54 −59 Original line number Diff line number Diff line Loading @@ -1387,89 +1387,86 @@ static struct snd_soc_device *wm8900_socdev; #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END }; /* Magic definition of all other variables and things */ I2C_CLIENT_INSMOD; static struct i2c_driver wm8900_i2c_driver; static struct i2c_client client_template; /* If the i2c layer weren't so broken, we could pass this kind of data around */ static int wm8900_codec_probe(struct i2c_adapter *adap, int addr, int kind) static int wm8900_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { struct snd_soc_device *socdev = wm8900_socdev; struct wm8900_setup_data *setup = socdev->codec_data; struct snd_soc_codec *codec = socdev->codec; struct i2c_client *i2c; int ret; if (addr != setup->i2c_address) return -ENODEV; dev_err(&adap->dev, "Probe on %x\n", addr); client_template.adapter = adap; client_template.addr = addr; i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); if (i2c == NULL) { kfree(codec); return -ENOMEM; } i2c_set_clientdata(i2c, codec); codec->control_data = i2c; ret = i2c_attach_client(i2c); if (ret < 0) { dev_err(&adap->dev, "failed to attach codec at addr %x\n", addr); goto err; } ret = wm8900_init(socdev); if (ret < 0) { dev_err(&adap->dev, "failed to initialise WM8900\n"); goto err; } return ret; err: kfree(codec); kfree(i2c); if (ret < 0) dev_err(&i2c->dev, "failed to initialise WM8900\n"); return ret; } static int wm8900_i2c_detach(struct i2c_client *client) static int wm8900_i2c_remove(struct i2c_client *client) { struct snd_soc_codec *codec = i2c_get_clientdata(client); i2c_detach_client(client); kfree(codec->reg_cache); kfree(client); return 0; } static int wm8900_i2c_attach(struct i2c_adapter *adap) { return i2c_probe(adap, &addr_data, wm8900_codec_probe); } static const struct i2c_device_id wm8900_i2c_id[] = { { "wm8900", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, wm8900_i2c_id); /* corgi i2c codec control layer */ static struct i2c_driver wm8900_i2c_driver = { .driver = { .name = "WM8900 I2C codec", .owner = THIS_MODULE, }, .attach_adapter = wm8900_i2c_attach, .detach_client = wm8900_i2c_detach, .command = NULL, .probe = wm8900_i2c_probe, .remove = wm8900_i2c_remove, .id_table = wm8900_i2c_id, }; static struct i2c_client client_template = { .name = "WM8900", .driver = &wm8900_i2c_driver, }; static int wm8900_add_i2c_device(struct platform_device *pdev, const struct wm8900_setup_data *setup) { struct i2c_board_info info; struct i2c_adapter *adapter; struct i2c_client *client; int ret; ret = i2c_add_driver(&wm8900_i2c_driver); if (ret != 0) { dev_err(&pdev->dev, "can't add i2c driver\n"); return ret; } memset(&info, 0, sizeof(struct i2c_board_info)); info.addr = setup->i2c_address; strlcpy(info.type, "wm8900", I2C_NAME_SIZE); adapter = i2c_get_adapter(setup->i2c_bus); if (!adapter) { dev_err(&pdev->dev, "can't get i2c adapter %d\n", setup->i2c_bus); goto err_driver; } client = i2c_new_device(adapter, &info); i2c_put_adapter(adapter); if (!client) { dev_err(&pdev->dev, "can't add i2c device at 0x%x\n", (unsigned int)info.addr); goto err_driver; } return 0; err_driver: i2c_del_driver(&wm8900_i2c_driver); return -ENODEV; } #endif static int wm8900_probe(struct platform_device *pdev) Loading Loading @@ -1497,11 +1494,8 @@ static int wm8900_probe(struct platform_device *pdev) wm8900_socdev = socdev; #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) if (setup->i2c_address) { normal_i2c[0] = setup->i2c_address; codec->hw_write = (hw_write_t)i2c_master_send; ret = i2c_add_driver(&wm8900_i2c_driver); if (ret != 0) printk(KERN_ERR "can't add i2c driver"); ret = wm8900_add_i2c_device(pdev, setup); } #else #error Non-I2C interfaces not yet supported Loading @@ -1521,6 +1515,7 @@ static int wm8900_remove(struct platform_device *pdev) snd_soc_free_pcms(socdev); snd_soc_dapm_free(socdev); #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) i2c_unregister_device(codec->control_data); i2c_del_driver(&wm8900_i2c_driver); #endif kfree(codec); Loading sound/soc/codecs/wm8900.h +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ #define WM8900_ struct wm8900_setup_data { int i2c_bus; unsigned short i2c_address; }; Loading Loading
include/sound/soc-dapm.h +0 −2 Original line number Diff line number Diff line Loading @@ -221,8 +221,6 @@ int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, int num); /* dapm path setup */ int __deprecated snd_soc_dapm_connect_input(struct snd_soc_codec *codec, const char *sink_name, const char *control_name, const char *src_name); int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec); void snd_soc_dapm_free(struct snd_soc_device *socdev); int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, Loading
sound/soc/codecs/wm8580.c +53 −55 Original line number Diff line number Diff line Loading @@ -900,85 +900,85 @@ static struct snd_soc_device *wm8580_socdev; * low = 0x1a * high = 0x1b */ static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END }; /* Magic definition of all other variables and things */ I2C_CLIENT_INSMOD; static struct i2c_driver wm8580_i2c_driver; static struct i2c_client client_template; static int wm8580_codec_probe(struct i2c_adapter *adap, int addr, int kind) static int wm8580_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { struct snd_soc_device *socdev = wm8580_socdev; struct wm8580_setup_data *setup = socdev->codec_data; struct snd_soc_codec *codec = socdev->codec; struct i2c_client *i2c; int ret; if (addr != setup->i2c_address) return -ENODEV; client_template.adapter = adap; client_template.addr = addr; i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); if (i2c == NULL) { kfree(codec); return -ENOMEM; } i2c_set_clientdata(i2c, codec); codec->control_data = i2c; ret = i2c_attach_client(i2c); if (ret < 0) { dev_err(&i2c->dev, "failed to attach codec at addr %x\n", addr); goto err; } ret = wm8580_init(socdev); if (ret < 0) { if (ret < 0) dev_err(&i2c->dev, "failed to initialise WM8580\n"); goto err; } return ret; err: kfree(codec); kfree(i2c); return ret; } static int wm8580_i2c_detach(struct i2c_client *client) static int wm8580_i2c_remove(struct i2c_client *client) { struct snd_soc_codec *codec = i2c_get_clientdata(client); i2c_detach_client(client); kfree(codec->reg_cache); kfree(client); return 0; } static int wm8580_i2c_attach(struct i2c_adapter *adap) { return i2c_probe(adap, &addr_data, wm8580_codec_probe); } static const struct i2c_device_id wm8580_i2c_id[] = { { "wm8580", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, wm8580_i2c_id); /* corgi i2c codec control layer */ static struct i2c_driver wm8580_i2c_driver = { .driver = { .name = "WM8580 I2C Codec", .owner = THIS_MODULE, }, .attach_adapter = wm8580_i2c_attach, .detach_client = wm8580_i2c_detach, .command = NULL, .probe = wm8580_i2c_probe, .remove = wm8580_i2c_remove, .id_table = wm8580_i2c_id, }; static struct i2c_client client_template = { .name = "WM8580", .driver = &wm8580_i2c_driver, }; static int wm8580_add_i2c_device(struct platform_device *pdev, const struct wm8580_setup_data *setup) { struct i2c_board_info info; struct i2c_adapter *adapter; struct i2c_client *client; int ret; ret = i2c_add_driver(&wm8580_i2c_driver); if (ret != 0) { dev_err(&pdev->dev, "can't add i2c driver\n"); return ret; } memset(&info, 0, sizeof(struct i2c_board_info)); info.addr = setup->i2c_address; strlcpy(info.type, "wm8580", I2C_NAME_SIZE); adapter = i2c_get_adapter(setup->i2c_bus); if (!adapter) { dev_err(&pdev->dev, "can't get i2c adapter %d\n", setup->i2c_bus); goto err_driver; } client = i2c_new_device(adapter, &info); i2c_put_adapter(adapter); if (!client) { dev_err(&pdev->dev, "can't add i2c device at 0x%x\n", (unsigned int)info.addr); goto err_driver; } return 0; err_driver: i2c_del_driver(&wm8580_i2c_driver); return -ENODEV; } #endif static int wm8580_probe(struct platform_device *pdev) Loading Loading @@ -1011,11 +1011,8 @@ static int wm8580_probe(struct platform_device *pdev) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) if (setup->i2c_address) { normal_i2c[0] = setup->i2c_address; codec->hw_write = (hw_write_t)i2c_master_send; ret = i2c_add_driver(&wm8580_i2c_driver); if (ret != 0) printk(KERN_ERR "can't add i2c driver"); ret = wm8580_add_i2c_device(pdev, setup); } #else /* Add other interfaces here */ Loading @@ -1034,6 +1031,7 @@ static int wm8580_remove(struct platform_device *pdev) snd_soc_free_pcms(socdev); snd_soc_dapm_free(socdev); #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) i2c_unregister_device(codec->control_data); i2c_del_driver(&wm8580_i2c_driver); #endif kfree(codec->private_data); Loading
sound/soc/codecs/wm8580.h +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #define WM8580_CLKSRC_NONE 5 struct wm8580_setup_data { int i2c_bus; unsigned short i2c_address; }; Loading
sound/soc/codecs/wm8900.c +54 −59 Original line number Diff line number Diff line Loading @@ -1387,89 +1387,86 @@ static struct snd_soc_device *wm8900_socdev; #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END }; /* Magic definition of all other variables and things */ I2C_CLIENT_INSMOD; static struct i2c_driver wm8900_i2c_driver; static struct i2c_client client_template; /* If the i2c layer weren't so broken, we could pass this kind of data around */ static int wm8900_codec_probe(struct i2c_adapter *adap, int addr, int kind) static int wm8900_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { struct snd_soc_device *socdev = wm8900_socdev; struct wm8900_setup_data *setup = socdev->codec_data; struct snd_soc_codec *codec = socdev->codec; struct i2c_client *i2c; int ret; if (addr != setup->i2c_address) return -ENODEV; dev_err(&adap->dev, "Probe on %x\n", addr); client_template.adapter = adap; client_template.addr = addr; i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); if (i2c == NULL) { kfree(codec); return -ENOMEM; } i2c_set_clientdata(i2c, codec); codec->control_data = i2c; ret = i2c_attach_client(i2c); if (ret < 0) { dev_err(&adap->dev, "failed to attach codec at addr %x\n", addr); goto err; } ret = wm8900_init(socdev); if (ret < 0) { dev_err(&adap->dev, "failed to initialise WM8900\n"); goto err; } return ret; err: kfree(codec); kfree(i2c); if (ret < 0) dev_err(&i2c->dev, "failed to initialise WM8900\n"); return ret; } static int wm8900_i2c_detach(struct i2c_client *client) static int wm8900_i2c_remove(struct i2c_client *client) { struct snd_soc_codec *codec = i2c_get_clientdata(client); i2c_detach_client(client); kfree(codec->reg_cache); kfree(client); return 0; } static int wm8900_i2c_attach(struct i2c_adapter *adap) { return i2c_probe(adap, &addr_data, wm8900_codec_probe); } static const struct i2c_device_id wm8900_i2c_id[] = { { "wm8900", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, wm8900_i2c_id); /* corgi i2c codec control layer */ static struct i2c_driver wm8900_i2c_driver = { .driver = { .name = "WM8900 I2C codec", .owner = THIS_MODULE, }, .attach_adapter = wm8900_i2c_attach, .detach_client = wm8900_i2c_detach, .command = NULL, .probe = wm8900_i2c_probe, .remove = wm8900_i2c_remove, .id_table = wm8900_i2c_id, }; static struct i2c_client client_template = { .name = "WM8900", .driver = &wm8900_i2c_driver, }; static int wm8900_add_i2c_device(struct platform_device *pdev, const struct wm8900_setup_data *setup) { struct i2c_board_info info; struct i2c_adapter *adapter; struct i2c_client *client; int ret; ret = i2c_add_driver(&wm8900_i2c_driver); if (ret != 0) { dev_err(&pdev->dev, "can't add i2c driver\n"); return ret; } memset(&info, 0, sizeof(struct i2c_board_info)); info.addr = setup->i2c_address; strlcpy(info.type, "wm8900", I2C_NAME_SIZE); adapter = i2c_get_adapter(setup->i2c_bus); if (!adapter) { dev_err(&pdev->dev, "can't get i2c adapter %d\n", setup->i2c_bus); goto err_driver; } client = i2c_new_device(adapter, &info); i2c_put_adapter(adapter); if (!client) { dev_err(&pdev->dev, "can't add i2c device at 0x%x\n", (unsigned int)info.addr); goto err_driver; } return 0; err_driver: i2c_del_driver(&wm8900_i2c_driver); return -ENODEV; } #endif static int wm8900_probe(struct platform_device *pdev) Loading Loading @@ -1497,11 +1494,8 @@ static int wm8900_probe(struct platform_device *pdev) wm8900_socdev = socdev; #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) if (setup->i2c_address) { normal_i2c[0] = setup->i2c_address; codec->hw_write = (hw_write_t)i2c_master_send; ret = i2c_add_driver(&wm8900_i2c_driver); if (ret != 0) printk(KERN_ERR "can't add i2c driver"); ret = wm8900_add_i2c_device(pdev, setup); } #else #error Non-I2C interfaces not yet supported Loading @@ -1521,6 +1515,7 @@ static int wm8900_remove(struct platform_device *pdev) snd_soc_free_pcms(socdev); snd_soc_dapm_free(socdev); #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) i2c_unregister_device(codec->control_data); i2c_del_driver(&wm8900_i2c_driver); #endif kfree(codec); Loading
sound/soc/codecs/wm8900.h +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ #define WM8900_ struct wm8900_setup_data { int i2c_bus; unsigned short i2c_address; }; Loading