Lines Matching refs:multi

266 static int simple_amp_multi_kctrl_write_gpios(struct simple_amp_multi *multi,  in simple_amp_multi_kctrl_write_gpios()  argument
272 if (kctrl_val > multi->kctrl_max) in simple_amp_multi_kctrl_write_gpios()
275 if (multi->mode == SIMPLE_AMP_MODE_RANGES) in simple_amp_multi_kctrl_write_gpios()
277 &multi->ranges); in simple_amp_multi_kctrl_write_gpios()
281 bitmap_from_arr32(bm, &gpio_val, multi->gpios->ndescs); in simple_amp_multi_kctrl_write_gpios()
283 return gpiod_multi_set_value_cansleep(multi->gpios, bm); in simple_amp_multi_kctrl_write_gpios()
289 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_int_info() local
293 uinfo->value.integer.max = multi->kctrl_max; in simple_amp_multi_kctrl_int_info()
301 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_int_get() local
303 ucontrol->value.integer.value[0] = multi->kctrl_val; in simple_amp_multi_kctrl_int_get()
310 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_int_put() local
316 if (kctrl_val == multi->kctrl_val) in simple_amp_multi_kctrl_int_put()
319 ret = simple_amp_multi_kctrl_write_gpios(multi, kctrl_val); in simple_amp_multi_kctrl_int_put()
323 multi->kctrl_val = kctrl_val; in simple_amp_multi_kctrl_int_put()
331 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_enum_info() local
333 return snd_ctl_enum_info(uinfo, 1, multi->labels.nb_labels, in simple_amp_multi_kctrl_enum_info()
334 multi->labels.tab_labels); in simple_amp_multi_kctrl_enum_info()
340 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_enum_get() local
342 ucontrol->value.enumerated.item[0] = multi->kctrl_val; in simple_amp_multi_kctrl_enum_get()
349 struct simple_amp_multi *multi = (struct simple_amp_multi *)kcontrol->private_value; in simple_amp_multi_kctrl_enum_put() local
355 if (kctrl_val == multi->kctrl_val) in simple_amp_multi_kctrl_enum_put()
358 ret = simple_amp_multi_kctrl_write_gpios(multi, kctrl_val); in simple_amp_multi_kctrl_enum_put()
362 multi->kctrl_val = kctrl_val; in simple_amp_multi_kctrl_enum_put()
400 struct simple_amp_multi *multi) in simple_amp_multi_add_kcontrol() argument
404 .name = multi->control_name, in simple_amp_multi_add_kcontrol()
408 .private_value = (unsigned long)multi, in simple_amp_multi_add_kcontrol()
412 switch (multi->mode) { in simple_amp_multi_add_kcontrol()
414 multi->tlv_array = simple_amp_alloc_tlv_ranges(&multi->ranges); in simple_amp_multi_add_kcontrol()
415 if (!multi->tlv_array) in simple_amp_multi_add_kcontrol()
420 control.tlv.p = multi->tlv_array; in simple_amp_multi_add_kcontrol()
439 ret = simple_amp_multi_kctrl_write_gpios(multi, multi->kctrl_val); in simple_amp_multi_add_kcontrol()
450 kfree(multi->tlv_array); in simple_amp_multi_add_kcontrol()
650 struct simple_amp_multi *multi, in simple_amp_parse_ranges() argument
653 struct simple_amp_ranges *ranges = &multi->ranges; in simple_amp_parse_ranges()
663 max_gpio_val = (1 << multi->gpios->ndescs) - 1; in simple_amp_parse_ranges()
691 multi->kctrl_max = 0; in simple_amp_parse_ranges()
742 multi->kctrl_max += range->nb_points; in simple_amp_parse_ranges()
745 multi->kctrl_max -= 1; in simple_amp_parse_ranges()
761 multi->kctrl_val = 0; in simple_amp_parse_ranges()
769 multi->kctrl_val += range->nb_points; in simple_amp_parse_ranges()
773 multi->kctrl_val--; in simple_amp_parse_ranges()
782 struct simple_amp_multi *multi, in simple_amp_parse_labels() argument
785 struct simple_amp_labels *labels = &multi->labels; in simple_amp_parse_labels()
798 if (labels->nb_labels > (1 << multi->gpios->ndescs)) in simple_amp_parse_labels()
807 multi->kctrl_max = labels->nb_labels - 1; in simple_amp_parse_labels()
808 multi->kctrl_val = 0; in simple_amp_parse_labels()
815 struct simple_amp_multi *multi, in simple_amp_parse_multi_gpio() argument
824 multi->kctrl_val = 0; in simple_amp_parse_multi_gpio()
825 multi->gpios = devm_gpiod_get_array_optional(dev, gpios_property, GPIOD_OUT_LOW); in simple_amp_parse_multi_gpio()
826 if (IS_ERR(multi->gpios)) in simple_amp_parse_multi_gpio()
827 return dev_err_probe(dev, PTR_ERR(multi->gpios), in simple_amp_parse_multi_gpio()
830 if (!multi->gpios) in simple_amp_parse_multi_gpio()
833 if (multi->gpios->ndescs > 16) in simple_amp_parse_multi_gpio()
839 multi->kctrl_max = (1 << multi->gpios->ndescs) - 1; in simple_amp_parse_multi_gpio()
841 multi->mode = SIMPLE_AMP_MODE_NONE; in simple_amp_parse_multi_gpio()
843 ret = simple_amp_parse_ranges(dev, multi, ranges_property); in simple_amp_parse_multi_gpio()
847 multi->mode = SIMPLE_AMP_MODE_RANGES; in simple_amp_parse_multi_gpio()
849 ret = simple_amp_parse_labels(dev, multi, labels_property); in simple_amp_parse_multi_gpio()
854 multi->mode = SIMPLE_AMP_MODE_LABELS; in simple_amp_parse_multi_gpio()