Merge remote-tracking branches 'asoc/topic/max98090', 'asoc/topic/max98095', 'asoc...
[linux-drm-fsl-dcu.git] / sound / soc / codecs / max9768.c
index e1c196a4193033c2cb033c6116076c4269b7dd33..bd41128c6f0b2280a94ec9fccc40f53455ad6784 100644 (file)
@@ -35,7 +35,7 @@ struct max9768 {
        u32 flags;
 };
 
-static struct reg_default max9768_default_regs[] = {
+static const struct reg_default max9768_default_regs[] = {
        { 0, 0 },
        { 3,  MAX9768_CTRL_FILTERLESS},
 };
@@ -43,8 +43,8 @@ static struct reg_default max9768_default_regs[] = {
 static int max9768_get_gpio(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_value *ucontrol)
 {
-       struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
-       struct max9768 *max9768 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
+       struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
        int val = gpio_get_value_cansleep(max9768->mute_gpio);
 
        ucontrol->value.integer.value[0] = !val;
@@ -55,8 +55,8 @@ static int max9768_get_gpio(struct snd_kcontrol *kcontrol,
 static int max9768_set_gpio(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_value *ucontrol)
 {
-       struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
-       struct max9768 *max9768 = snd_soc_codec_get_drvdata(codec);
+       struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
+       struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
 
        gpio_set_value_cansleep(max9768->mute_gpio, !ucontrol->value.integer.value[0]);
 
@@ -130,19 +130,20 @@ static const struct snd_soc_dapm_route max9768_dapm_routes[] = {
        { "OUT-", NULL, "IN" },
 };
 
-static int max9768_probe(struct snd_soc_codec *codec)
+static int max9768_probe(struct snd_soc_component *component)
 {
-       struct max9768 *max9768 = snd_soc_codec_get_drvdata(codec);
+       struct max9768 *max9768 = snd_soc_component_get_drvdata(component);
        int ret;
 
        if (max9768->flags & MAX9768_FLAG_CLASSIC_PWM) {
-               ret = snd_soc_write(codec, MAX9768_CTRL, MAX9768_CTRL_PWM);
+               ret = regmap_write(max9768->regmap, MAX9768_CTRL,
+                       MAX9768_CTRL_PWM);
                if (ret)
                        return ret;
        }
 
        if (gpio_is_valid(max9768->mute_gpio)) {
-               ret = snd_soc_add_codec_controls(codec, max9768_mute,
+               ret = snd_soc_add_component_controls(component, max9768_mute,
                                ARRAY_SIZE(max9768_mute));
                if (ret)
                        return ret;
@@ -151,7 +152,7 @@ static int max9768_probe(struct snd_soc_codec *codec)
        return 0;
 }
 
-static struct snd_soc_codec_driver max9768_codec_driver = {
+static struct snd_soc_component_driver max9768_component_driver = {
        .probe = max9768_probe,
        .controls = max9768_volume,
        .num_controls = ARRAY_SIZE(max9768_volume),
@@ -183,11 +184,13 @@ static int max9768_i2c_probe(struct i2c_client *client,
 
        if (pdata) {
                /* Mute on powerup to avoid clicks */
-               err = gpio_request_one(pdata->mute_gpio, GPIOF_INIT_HIGH, "MAX9768 Mute");
+               err = devm_gpio_request_one(&client->dev, pdata->mute_gpio,
+                               GPIOF_INIT_HIGH, "MAX9768 Mute");
                max9768->mute_gpio = err ?: pdata->mute_gpio;
 
                /* Activate chip by releasing shutdown, enables I2C */
-               err = gpio_request_one(pdata->shdn_gpio, GPIOF_INIT_HIGH, "MAX9768 Shutdown");
+               err = devm_gpio_request_one(&client->dev, pdata->shdn_gpio,
+                               GPIOF_INIT_HIGH, "MAX9768 Shutdown");
                max9768->shdn_gpio = err ?: pdata->shdn_gpio;
 
                max9768->flags = pdata->flags;
@@ -199,38 +202,11 @@ static int max9768_i2c_probe(struct i2c_client *client,
        i2c_set_clientdata(client, max9768);
 
        max9768->regmap = devm_regmap_init_i2c(client, &max9768_i2c_regmap_config);
-       if (IS_ERR(max9768->regmap)) {
-               err = PTR_ERR(max9768->regmap);
-               goto err_gpio_free;
-       }
-
-       err = snd_soc_register_codec(&client->dev, &max9768_codec_driver, NULL, 0);
-       if (err)
-               goto err_gpio_free;
-
-       return 0;
-
- err_gpio_free:
-       if (gpio_is_valid(max9768->shdn_gpio))
-               gpio_free(max9768->shdn_gpio);
-       if (gpio_is_valid(max9768->mute_gpio))
-               gpio_free(max9768->mute_gpio);
-
-       return err;
-}
-
-static int max9768_i2c_remove(struct i2c_client *client)
-{
-       struct max9768 *max9768 = i2c_get_clientdata(client);
+       if (IS_ERR(max9768->regmap))
+               return PTR_ERR(max9768->regmap);
 
-       snd_soc_unregister_codec(&client->dev);
-
-       if (gpio_is_valid(max9768->shdn_gpio))
-               gpio_free(max9768->shdn_gpio);
-       if (gpio_is_valid(max9768->mute_gpio))
-               gpio_free(max9768->mute_gpio);
-
-       return 0;
+       return devm_snd_soc_register_component(&client->dev,
+               &max9768_component_driver, NULL, 0);
 }
 
 static const struct i2c_device_id max9768_i2c_id[] = {
@@ -242,10 +218,8 @@ MODULE_DEVICE_TABLE(i2c, max9768_i2c_id);
 static struct i2c_driver max9768_i2c_driver = {
        .driver = {
                .name = "max9768",
-               .owner = THIS_MODULE,
        },
        .probe = max9768_i2c_probe,
-       .remove = max9768_i2c_remove,
        .id_table = max9768_i2c_id,
 };
 module_i2c_driver(max9768_i2c_driver);