Loading sound/soc/codecs/cx20442.c +46 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/tty.h> #include <linux/tty.h> #include <linux/slab.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/module.h> #include <linux/regulator/consumer.h> #include <sound/core.h> #include <sound/core.h> #include <sound/initval.h> #include <sound/initval.h> Loading @@ -25,8 +26,8 @@ struct cx20442_priv { struct cx20442_priv { enum snd_soc_control_type control_type; void *control_data; void *control_data; struct regulator *por; }; }; #define CX20442_PM 0x0 #define CX20442_PM 0x0 Loading Loading @@ -324,6 +325,38 @@ static struct snd_soc_dai_driver cx20442_dai = { }, }, }; }; static int cx20442_set_bias_level(struct snd_soc_codec *codec, enum snd_soc_bias_level level) { struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec); int err = 0; switch (level) { case SND_SOC_BIAS_PREPARE: if (codec->dapm.bias_level != SND_SOC_BIAS_STANDBY) break; if (IS_ERR(cx20442->por)) err = PTR_ERR(cx20442->por); else err = regulator_enable(cx20442->por); break; case SND_SOC_BIAS_STANDBY: if (codec->dapm.bias_level != SND_SOC_BIAS_PREPARE) break; if (IS_ERR(cx20442->por)) err = PTR_ERR(cx20442->por); else err = regulator_disable(cx20442->por); break; default: break; } if (!err) codec->dapm.bias_level = level; return err; } static int cx20442_codec_probe(struct snd_soc_codec *codec) static int cx20442_codec_probe(struct snd_soc_codec *codec) { { struct cx20442_priv *cx20442; struct cx20442_priv *cx20442; Loading @@ -331,9 +364,13 @@ static int cx20442_codec_probe(struct snd_soc_codec *codec) cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL); cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL); if (cx20442 == NULL) if (cx20442 == NULL) return -ENOMEM; return -ENOMEM; snd_soc_codec_set_drvdata(codec, cx20442); cx20442->por = regulator_get(codec->dev, "POR"); if (IS_ERR(cx20442->por)) dev_warn(codec->dev, "failed to get the regulator"); cx20442->control_data = NULL; cx20442->control_data = NULL; snd_soc_codec_set_drvdata(codec, cx20442); codec->hw_write = NULL; codec->hw_write = NULL; codec->card->pop_time = 0; codec->card->pop_time = 0; Loading @@ -350,6 +387,12 @@ static int cx20442_codec_remove(struct snd_soc_codec *codec) tty_hangup(tty); tty_hangup(tty); } } if (!IS_ERR(cx20442->por)) { /* should be already in STANDBY, hence disabled */ regulator_put(cx20442->por); } snd_soc_codec_set_drvdata(codec, NULL); kfree(cx20442); kfree(cx20442); return 0; return 0; } } Loading @@ -359,6 +402,7 @@ static const u8 cx20442_reg; static struct snd_soc_codec_driver cx20442_codec_dev = { static struct snd_soc_codec_driver cx20442_codec_dev = { .probe = cx20442_codec_probe, .probe = cx20442_codec_probe, .remove = cx20442_codec_remove, .remove = cx20442_codec_remove, .set_bias_level = cx20442_set_bias_level, .reg_cache_default = &cx20442_reg, .reg_cache_default = &cx20442_reg, .reg_cache_size = 1, .reg_cache_size = 1, .reg_word_size = sizeof(u8), .reg_word_size = sizeof(u8), Loading sound/soc/codecs/twl6040.c +23 −0 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <sound/pcm.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc.h> #include <sound/soc-dapm.h> #include <sound/initval.h> #include <sound/initval.h> #include <sound/tlv.h> #include <sound/tlv.h> Loading Loading @@ -1012,6 +1013,28 @@ static int twl6040_pll_put_enum(struct snd_kcontrol *kcontrol, return 0; return 0; } } int twl6040_get_dl1_gain(struct snd_soc_codec *codec) { struct snd_soc_dapm_context *dapm = &codec->dapm; if (snd_soc_dapm_get_pin_status(dapm, "EP")) return -1; /* -1dB */ if (snd_soc_dapm_get_pin_status(dapm, "HSOR") || snd_soc_dapm_get_pin_status(dapm, "HSOL")) { u8 val = snd_soc_read(codec, TWL6040_REG_HSLCTL); if (val & TWL6040_HSDACMODE) /* HSDACL in LP mode */ return -8; /* -8dB */ else /* HSDACL in HP mode */ return -1; /* -1dB */ } return 0; /* 0dB */ } EXPORT_SYMBOL_GPL(twl6040_get_dl1_gain); int twl6040_get_clk_id(struct snd_soc_codec *codec) int twl6040_get_clk_id(struct snd_soc_codec *codec) { { struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); Loading sound/soc/codecs/twl6040.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -34,6 +34,7 @@ enum twl6040_trim { #define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f) #define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f) #define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f) #define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f) int twl6040_get_dl1_gain(struct snd_soc_codec *codec); void twl6040_hs_jack_detect(struct snd_soc_codec *codec, void twl6040_hs_jack_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack, int report); struct snd_soc_jack *jack, int report); int twl6040_get_clk_id(struct snd_soc_codec *codec); int twl6040_get_clk_id(struct snd_soc_codec *codec); Loading sound/soc/omap/am3517evm.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -107,6 +107,7 @@ static struct snd_soc_dai_link am3517evm_dai = { /* Audio machine driver */ /* Audio machine driver */ static struct snd_soc_card snd_soc_am3517evm = { static struct snd_soc_card snd_soc_am3517evm = { .name = "am3517evm", .name = "am3517evm", .owner = THIS_MODULE, .dai_link = &am3517evm_dai, .dai_link = &am3517evm_dai, .num_links = 1, .num_links = 1, Loading sound/soc/omap/ams-delta.c +4 −5 Original line number Original line Diff line number Diff line Loading @@ -431,22 +431,20 @@ static int ams_delta_set_bias_level(struct snd_soc_card *card, struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level) enum snd_soc_bias_level level) { { struct snd_soc_codec *codec = card->rtd->codec; switch (level) { switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY: if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) if (card->dapm.bias_level == SND_SOC_BIAS_OFF) ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, AMS_DELTA_LATCH2_MODEM_NRESET); AMS_DELTA_LATCH2_MODEM_NRESET); break; break; case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_OFF: if (codec->dapm.bias_level != SND_SOC_BIAS_OFF) if (card->dapm.bias_level != SND_SOC_BIAS_OFF) ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, 0); 0); } } codec->dapm.bias_level = level; card->dapm.bias_level = level; return 0; return 0; } } Loading Loading @@ -597,6 +595,7 @@ static struct snd_soc_dai_link ams_delta_dai_link = { /* Audio card driver */ /* Audio card driver */ static struct snd_soc_card ams_delta_audio_card = { static struct snd_soc_card ams_delta_audio_card = { .name = "AMS_DELTA", .name = "AMS_DELTA", .owner = THIS_MODULE, .dai_link = &ams_delta_dai_link, .dai_link = &ams_delta_dai_link, .num_links = 1, .num_links = 1, .set_bias_level = ams_delta_set_bias_level, .set_bias_level = ams_delta_set_bias_level, Loading Loading
sound/soc/codecs/cx20442.c +46 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/tty.h> #include <linux/tty.h> #include <linux/slab.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/module.h> #include <linux/regulator/consumer.h> #include <sound/core.h> #include <sound/core.h> #include <sound/initval.h> #include <sound/initval.h> Loading @@ -25,8 +26,8 @@ struct cx20442_priv { struct cx20442_priv { enum snd_soc_control_type control_type; void *control_data; void *control_data; struct regulator *por; }; }; #define CX20442_PM 0x0 #define CX20442_PM 0x0 Loading Loading @@ -324,6 +325,38 @@ static struct snd_soc_dai_driver cx20442_dai = { }, }, }; }; static int cx20442_set_bias_level(struct snd_soc_codec *codec, enum snd_soc_bias_level level) { struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec); int err = 0; switch (level) { case SND_SOC_BIAS_PREPARE: if (codec->dapm.bias_level != SND_SOC_BIAS_STANDBY) break; if (IS_ERR(cx20442->por)) err = PTR_ERR(cx20442->por); else err = regulator_enable(cx20442->por); break; case SND_SOC_BIAS_STANDBY: if (codec->dapm.bias_level != SND_SOC_BIAS_PREPARE) break; if (IS_ERR(cx20442->por)) err = PTR_ERR(cx20442->por); else err = regulator_disable(cx20442->por); break; default: break; } if (!err) codec->dapm.bias_level = level; return err; } static int cx20442_codec_probe(struct snd_soc_codec *codec) static int cx20442_codec_probe(struct snd_soc_codec *codec) { { struct cx20442_priv *cx20442; struct cx20442_priv *cx20442; Loading @@ -331,9 +364,13 @@ static int cx20442_codec_probe(struct snd_soc_codec *codec) cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL); cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL); if (cx20442 == NULL) if (cx20442 == NULL) return -ENOMEM; return -ENOMEM; snd_soc_codec_set_drvdata(codec, cx20442); cx20442->por = regulator_get(codec->dev, "POR"); if (IS_ERR(cx20442->por)) dev_warn(codec->dev, "failed to get the regulator"); cx20442->control_data = NULL; cx20442->control_data = NULL; snd_soc_codec_set_drvdata(codec, cx20442); codec->hw_write = NULL; codec->hw_write = NULL; codec->card->pop_time = 0; codec->card->pop_time = 0; Loading @@ -350,6 +387,12 @@ static int cx20442_codec_remove(struct snd_soc_codec *codec) tty_hangup(tty); tty_hangup(tty); } } if (!IS_ERR(cx20442->por)) { /* should be already in STANDBY, hence disabled */ regulator_put(cx20442->por); } snd_soc_codec_set_drvdata(codec, NULL); kfree(cx20442); kfree(cx20442); return 0; return 0; } } Loading @@ -359,6 +402,7 @@ static const u8 cx20442_reg; static struct snd_soc_codec_driver cx20442_codec_dev = { static struct snd_soc_codec_driver cx20442_codec_dev = { .probe = cx20442_codec_probe, .probe = cx20442_codec_probe, .remove = cx20442_codec_remove, .remove = cx20442_codec_remove, .set_bias_level = cx20442_set_bias_level, .reg_cache_default = &cx20442_reg, .reg_cache_default = &cx20442_reg, .reg_cache_size = 1, .reg_cache_size = 1, .reg_word_size = sizeof(u8), .reg_word_size = sizeof(u8), Loading
sound/soc/codecs/twl6040.c +23 −0 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <sound/pcm.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc.h> #include <sound/soc-dapm.h> #include <sound/initval.h> #include <sound/initval.h> #include <sound/tlv.h> #include <sound/tlv.h> Loading Loading @@ -1012,6 +1013,28 @@ static int twl6040_pll_put_enum(struct snd_kcontrol *kcontrol, return 0; return 0; } } int twl6040_get_dl1_gain(struct snd_soc_codec *codec) { struct snd_soc_dapm_context *dapm = &codec->dapm; if (snd_soc_dapm_get_pin_status(dapm, "EP")) return -1; /* -1dB */ if (snd_soc_dapm_get_pin_status(dapm, "HSOR") || snd_soc_dapm_get_pin_status(dapm, "HSOL")) { u8 val = snd_soc_read(codec, TWL6040_REG_HSLCTL); if (val & TWL6040_HSDACMODE) /* HSDACL in LP mode */ return -8; /* -8dB */ else /* HSDACL in HP mode */ return -1; /* -1dB */ } return 0; /* 0dB */ } EXPORT_SYMBOL_GPL(twl6040_get_dl1_gain); int twl6040_get_clk_id(struct snd_soc_codec *codec) int twl6040_get_clk_id(struct snd_soc_codec *codec) { { struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); Loading
sound/soc/codecs/twl6040.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -34,6 +34,7 @@ enum twl6040_trim { #define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f) #define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f) #define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f) #define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f) int twl6040_get_dl1_gain(struct snd_soc_codec *codec); void twl6040_hs_jack_detect(struct snd_soc_codec *codec, void twl6040_hs_jack_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack, int report); struct snd_soc_jack *jack, int report); int twl6040_get_clk_id(struct snd_soc_codec *codec); int twl6040_get_clk_id(struct snd_soc_codec *codec); Loading
sound/soc/omap/am3517evm.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -107,6 +107,7 @@ static struct snd_soc_dai_link am3517evm_dai = { /* Audio machine driver */ /* Audio machine driver */ static struct snd_soc_card snd_soc_am3517evm = { static struct snd_soc_card snd_soc_am3517evm = { .name = "am3517evm", .name = "am3517evm", .owner = THIS_MODULE, .dai_link = &am3517evm_dai, .dai_link = &am3517evm_dai, .num_links = 1, .num_links = 1, Loading
sound/soc/omap/ams-delta.c +4 −5 Original line number Original line Diff line number Diff line Loading @@ -431,22 +431,20 @@ static int ams_delta_set_bias_level(struct snd_soc_card *card, struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level) enum snd_soc_bias_level level) { { struct snd_soc_codec *codec = card->rtd->codec; switch (level) { switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY: if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) if (card->dapm.bias_level == SND_SOC_BIAS_OFF) ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, AMS_DELTA_LATCH2_MODEM_NRESET); AMS_DELTA_LATCH2_MODEM_NRESET); break; break; case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_OFF: if (codec->dapm.bias_level != SND_SOC_BIAS_OFF) if (card->dapm.bias_level != SND_SOC_BIAS_OFF) ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, 0); 0); } } codec->dapm.bias_level = level; card->dapm.bias_level = level; return 0; return 0; } } Loading Loading @@ -597,6 +595,7 @@ static struct snd_soc_dai_link ams_delta_dai_link = { /* Audio card driver */ /* Audio card driver */ static struct snd_soc_card ams_delta_audio_card = { static struct snd_soc_card ams_delta_audio_card = { .name = "AMS_DELTA", .name = "AMS_DELTA", .owner = THIS_MODULE, .dai_link = &ams_delta_dai_link, .dai_link = &ams_delta_dai_link, .num_links = 1, .num_links = 1, .set_bias_level = ams_delta_set_bias_level, .set_bias_level = ams_delta_set_bias_level, Loading