Lines Matching refs:mc_data

123 static int mc_keys_setup_polling(struct multicodecs_data *mc_data,  in mc_keys_setup_polling()  argument
128 poller = devm_kzalloc(mc_data->snd_card.dev, sizeof(*poller), GFP_KERNEL); in mc_keys_setup_polling()
133 poller->input = mc_data->input; in mc_keys_setup_polling()
135 mc_data->poller = poller; in mc_keys_setup_polling()
142 struct multicodecs_data *mc_data = input_get_drvdata(input); in mc_keys_poll() local
147 ret = iio_read_channel_processed(mc_data->adc, &value); in mc_keys_poll()
150 value = mc_data->keyup_voltage; in mc_keys_poll()
152 for (i = 0; i < mc_data->num_keys; i++) { in mc_keys_poll()
153 diff = abs(mc_data->map[i].voltage - value); in mc_keys_poll()
156 keycode = mc_data->map[i].keycode; in mc_keys_poll()
161 if (abs(mc_data->keyup_voltage - value) < closest) in mc_keys_poll()
164 if (mc_data->last_key && mc_data->last_key != keycode) in mc_keys_poll()
165 input_report_key(input, mc_data->last_key, 0); in mc_keys_poll()
171 mc_data->last_key = keycode; in mc_keys_poll()
175 struct multicodecs_data *mc_data) in mc_keys_load_keymap() argument
181 mc_data->num_keys = device_get_child_node_count(dev); in mc_keys_load_keymap()
182 if (mc_data->num_keys == 0) { in mc_keys_load_keymap()
187 map = devm_kmalloc_array(dev, mc_data->num_keys, sizeof(*map), GFP_KERNEL); in mc_keys_load_keymap()
209 mc_data->map = map; in mc_keys_load_keymap()
215 struct multicodecs_data *mc_data = container_of(to_delayed_work(work), in adc_jack_handler() local
218 struct snd_soc_jack *jack_headset = mc_data->jack_headset; in adc_jack_handler()
221 if (!gpiod_get_value(mc_data->hp_det_gpio)) { in adc_jack_handler()
223 extcon_set_state_sync(mc_data->extcon, in adc_jack_handler()
225 extcon_set_state_sync(mc_data->extcon, in adc_jack_handler()
227 if (mc_data->poller) in adc_jack_handler()
228 mc_keys_poller_stop(mc_data->poller); in adc_jack_handler()
232 if (!mc_data->adc) { in adc_jack_handler()
235 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_HEADPHONE, true); in adc_jack_handler()
236 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_MICROPHONE, false); in adc_jack_handler()
239 ret = iio_read_channel_processed(mc_data->adc, &adc); in adc_jack_handler()
243 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_HEADPHONE, true); in adc_jack_handler()
244 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_MICROPHONE, false); in adc_jack_handler()
250 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_HEADPHONE, true); in adc_jack_handler()
253 extcon_set_state_sync(mc_data->extcon, EXTCON_JACK_MICROPHONE, true); in adc_jack_handler()
254 if (mc_data->poller) in adc_jack_handler()
255 mc_keys_poller_start(mc_data->poller); in adc_jack_handler()
262 struct multicodecs_data *mc_data = (struct multicodecs_data *)data; in headset_det_irq_thread() local
264 queue_delayed_work(system_power_efficient_wq, &mc_data->handler, msecs_to_jiffies(200)); in headset_det_irq_thread()
273 struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card); in mc_hp_event() local
277 gpiod_set_value_cansleep(mc_data->hp_ctl_gpio, 1); in mc_hp_event()
280 gpiod_set_value_cansleep(mc_data->hp_ctl_gpio, 0); in mc_hp_event()
294 struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(card); in mc_spk_event() local
298 gpiod_set_value_cansleep(mc_data->spk_ctl_gpio, 1); in mc_spk_event()
301 gpiod_set_value_cansleep(mc_data->spk_ctl_gpio, 0); in mc_spk_event()
342 struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(rtd->card); in rk_multicodecs_hw_params() local
346 mclk = params_rate(params) * mc_data->mclk_fs; in rk_multicodecs_hw_params()
372 struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(rtd->card); in rk_dailink_init() local
403 if ((!mc_data->codec_hp_det) && (gpiod_to_irq(mc_data->hp_det_gpio) < 0)) { in rk_dailink_init()
432 mc_data->jack_headset = jack_headset; in rk_dailink_init()
434 if (mc_data->codec_hp_det) { in rk_dailink_init()
446 irq = gpiod_to_irq(mc_data->hp_det_gpio); in rk_dailink_init()
454 mc_data); in rk_dailink_init()
461 &mc_data->handler, msecs_to_jiffies(50)); in rk_dailink_init()
470 struct multicodecs_data *mc_data, in rk_multicodecs_parse_daifmt() argument
473 struct snd_soc_dai_link *dai_link = &mc_data->dai_link; in rk_multicodecs_parse_daifmt()
588 struct multicodecs_data *mc_data; in rk_multicodecs_probe() local
603 mc_data = devm_kzalloc(&pdev->dev, sizeof(*mc_data), GFP_KERNEL); in rk_multicodecs_probe()
604 if (!mc_data) in rk_multicodecs_probe()
615 card = &mc_data->snd_card; in rk_multicodecs_probe()
623 link = &mc_data->dai_link; in rk_multicodecs_probe()
686 rk_multicodecs_parse_daifmt(np, codecs[0].of_node, mc_data, prefix); in rk_multicodecs_probe()
694 mc_data->mclk_fs = DEFAULT_MCLK_FS; in rk_multicodecs_probe()
696 mc_data->mclk_fs = val; in rk_multicodecs_probe()
698 mc_data->codec_hp_det = in rk_multicodecs_probe()
701 mc_data->adc = devm_iio_channel_get(&pdev->dev, "adc-detect"); in rk_multicodecs_probe()
703 if (IS_ERR(mc_data->adc)) { in rk_multicodecs_probe()
704 if (PTR_ERR(mc_data->adc) != -EPROBE_DEFER) { in rk_multicodecs_probe()
705 mc_data->adc = NULL; in rk_multicodecs_probe()
709 if (mc_data->adc->channel->type != IIO_VOLTAGE) in rk_multicodecs_probe()
713 &mc_data->keyup_voltage)) { in rk_multicodecs_probe()
717 mc_data->keyup_voltage /= 1000; in rk_multicodecs_probe()
719 ret = mc_keys_load_keymap(&pdev->dev, mc_data); in rk_multicodecs_probe()
729 input_set_drvdata(input, mc_data); in rk_multicodecs_probe()
739 for (i = 0; i < mc_data->num_keys; i++) in rk_multicodecs_probe()
740 __set_bit(mc_data->map[i].keycode, input->keybit); in rk_multicodecs_probe()
745 mc_data->input = input; in rk_multicodecs_probe()
746 ret = mc_keys_setup_polling(mc_data, mc_keys_poll); in rk_multicodecs_probe()
753 mc_set_poll_interval(mc_data->poller, value); in rk_multicodecs_probe()
755 ret = input_register_device(mc_data->input); in rk_multicodecs_probe()
762 INIT_DEFERRABLE_WORK(&mc_data->handler, adc_jack_handler); in rk_multicodecs_probe()
764 mc_data->spk_ctl_gpio = devm_gpiod_get_optional(&pdev->dev, in rk_multicodecs_probe()
767 if (IS_ERR(mc_data->spk_ctl_gpio)) in rk_multicodecs_probe()
768 return PTR_ERR(mc_data->spk_ctl_gpio); in rk_multicodecs_probe()
770 mc_data->hp_ctl_gpio = devm_gpiod_get_optional(&pdev->dev, in rk_multicodecs_probe()
773 if (IS_ERR(mc_data->hp_ctl_gpio)) in rk_multicodecs_probe()
774 return PTR_ERR(mc_data->hp_ctl_gpio); in rk_multicodecs_probe()
776 mc_data->hp_det_gpio = devm_gpiod_get_optional(&pdev->dev, "hp-det", GPIOD_IN); in rk_multicodecs_probe()
777 if (IS_ERR(mc_data->hp_det_gpio)) in rk_multicodecs_probe()
778 return PTR_ERR(mc_data->hp_det_gpio); in rk_multicodecs_probe()
780 mc_data->extcon = devm_extcon_dev_allocate(&pdev->dev, headset_extcon_cable); in rk_multicodecs_probe()
781 if (IS_ERR(mc_data->extcon)) { in rk_multicodecs_probe()
783 return PTR_ERR(mc_data->extcon); in rk_multicodecs_probe()
786 ret = devm_extcon_dev_register(&pdev->dev, mc_data->extcon); in rk_multicodecs_probe()
796 snd_soc_card_set_drvdata(card, mc_data); in rk_multicodecs_probe()