Lines Matching +full:integer +full:- +full:n

1 // SPDX-License-Identifier: GPL-2.0-or-later
12 * - Holger Ruckdeschel: he found out how to control individual channel
29 * values dumped from windows driver and filtered by trial'n'error.
53 static DECLARE_TLV_DB_MINMAX(tlv_output, -9000, 0);
54 static DECLARE_TLV_DB_MINMAX(tlv_input, -1500, 1500);
62 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_output_vol_update()
67 if (!(rt->ovol_updated & (1 << i))) { in usb6fire_control_output_vol_update()
68 comm_rt->write8(comm_rt, 0x12, 0x0f + i, in usb6fire_control_output_vol_update()
69 180 - rt->output_vol[i]); in usb6fire_control_output_vol_update()
70 rt->ovol_updated |= 1 << i; in usb6fire_control_output_vol_update()
76 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_output_mute_update()
79 comm_rt->write8(comm_rt, 0x12, 0x0e, ~rt->output_mute); in usb6fire_control_output_mute_update()
84 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_input_vol_update()
89 if (!(rt->ivol_updated & (1 << i))) { in usb6fire_control_input_vol_update()
90 comm_rt->write8(comm_rt, 0x12, 0x1c + i, in usb6fire_control_input_vol_update()
91 rt->input_vol[i] & 0x3f); in usb6fire_control_input_vol_update()
92 rt->ivol_updated |= 1 << i; in usb6fire_control_input_vol_update()
98 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_line_phono_update()
100 comm_rt->write8(comm_rt, 0x22, 0x02, rt->line_phono_switch); in usb6fire_control_line_phono_update()
101 comm_rt->write8(comm_rt, 0x21, 0x02, rt->line_phono_switch); in usb6fire_control_line_phono_update()
107 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_opt_coax_update()
109 comm_rt->write8(comm_rt, 0x22, 0x00, rt->opt_coax_switch); in usb6fire_control_opt_coax_update()
110 comm_rt->write8(comm_rt, 0x21, 0x00, rt->opt_coax_switch); in usb6fire_control_opt_coax_update()
117 struct usb_device *device = rt->chip->dev; in usb6fire_control_set_rate()
118 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_set_rate()
121 return -EINVAL; in usb6fire_control_set_rate()
128 ret = comm_rt->write16(comm_rt, 0x02, 0x01, rates_6fire_vl[rate], in usb6fire_control_set_rate()
141 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_set_channels()
144 * (one bit per stereo-channel) */ in usb6fire_control_set_channels()
145 ret = comm_rt->write16(comm_rt, 0x02, 0x02, in usb6fire_control_set_channels()
146 (1 << (n_analog_out / 2)) - 1, in usb6fire_control_set_channels()
147 (1 << (n_analog_in / 2)) - 1); in usb6fire_control_set_channels()
153 ret = comm_rt->write16(comm_rt, 0x02, 0x03, 0x00, 0x00); in usb6fire_control_set_channels()
162 struct comm_runtime *comm_rt = rt->chip->comm; in usb6fire_control_streaming_update()
165 if (!rt->usb_streaming && rt->digital_thru_switch) in usb6fire_control_streaming_update()
168 return comm_rt->write16(comm_rt, 0x02, 0x00, 0x00, in usb6fire_control_streaming_update()
169 (rt->usb_streaming ? 0x01 : 0x00) | in usb6fire_control_streaming_update()
170 (rt->digital_thru_switch ? 0x08 : 0x00)); in usb6fire_control_streaming_update()
172 return -EINVAL; in usb6fire_control_streaming_update()
178 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in usb6fire_control_output_vol_info()
179 uinfo->count = 2; in usb6fire_control_output_vol_info()
180 uinfo->value.integer.min = 0; in usb6fire_control_output_vol_info()
181 uinfo->value.integer.max = 180; in usb6fire_control_output_vol_info()
189 unsigned int ch = kcontrol->private_value; in usb6fire_control_output_vol_put()
193 dev_err(&rt->chip->dev->dev, in usb6fire_control_output_vol_put()
195 return -EINVAL; in usb6fire_control_output_vol_put()
198 if (rt->output_vol[ch] != ucontrol->value.integer.value[0]) { in usb6fire_control_output_vol_put()
199 rt->output_vol[ch] = ucontrol->value.integer.value[0]; in usb6fire_control_output_vol_put()
200 rt->ovol_updated &= ~(1 << ch); in usb6fire_control_output_vol_put()
203 if (rt->output_vol[ch + 1] != ucontrol->value.integer.value[1]) { in usb6fire_control_output_vol_put()
204 rt->output_vol[ch + 1] = ucontrol->value.integer.value[1]; in usb6fire_control_output_vol_put()
205 rt->ovol_updated &= ~(2 << ch); in usb6fire_control_output_vol_put()
219 unsigned int ch = kcontrol->private_value; in usb6fire_control_output_vol_get()
222 dev_err(&rt->chip->dev->dev, in usb6fire_control_output_vol_get()
224 return -EINVAL; in usb6fire_control_output_vol_get()
227 ucontrol->value.integer.value[0] = rt->output_vol[ch]; in usb6fire_control_output_vol_get()
228 ucontrol->value.integer.value[1] = rt->output_vol[ch + 1]; in usb6fire_control_output_vol_get()
236 unsigned int ch = kcontrol->private_value; in usb6fire_control_output_mute_put()
237 u8 old = rt->output_mute; in usb6fire_control_output_mute_put()
241 dev_err(&rt->chip->dev->dev, in usb6fire_control_output_mute_put()
243 return -EINVAL; in usb6fire_control_output_mute_put()
246 rt->output_mute &= ~(3 << ch); in usb6fire_control_output_mute_put()
247 if (ucontrol->value.integer.value[0]) in usb6fire_control_output_mute_put()
249 if (ucontrol->value.integer.value[1]) in usb6fire_control_output_mute_put()
251 rt->output_mute |= value << ch; in usb6fire_control_output_mute_put()
253 if (rt->output_mute != old) in usb6fire_control_output_mute_put()
256 return rt->output_mute != old; in usb6fire_control_output_mute_put()
263 unsigned int ch = kcontrol->private_value; in usb6fire_control_output_mute_get()
264 u8 value = rt->output_mute >> ch; in usb6fire_control_output_mute_get()
267 dev_err(&rt->chip->dev->dev, in usb6fire_control_output_mute_get()
269 return -EINVAL; in usb6fire_control_output_mute_get()
272 ucontrol->value.integer.value[0] = 1 & value; in usb6fire_control_output_mute_get()
274 ucontrol->value.integer.value[1] = 1 & value; in usb6fire_control_output_mute_get()
282 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in usb6fire_control_input_vol_info()
283 uinfo->count = 2; in usb6fire_control_input_vol_info()
284 uinfo->value.integer.min = 0; in usb6fire_control_input_vol_info()
285 uinfo->value.integer.max = 30; in usb6fire_control_input_vol_info()
295 if (rt->input_vol[0] != ucontrol->value.integer.value[0]) { in usb6fire_control_input_vol_put()
296 rt->input_vol[0] = ucontrol->value.integer.value[0] - 15; in usb6fire_control_input_vol_put()
297 rt->ivol_updated &= ~(1 << 0); in usb6fire_control_input_vol_put()
300 if (rt->input_vol[1] != ucontrol->value.integer.value[1]) { in usb6fire_control_input_vol_put()
301 rt->input_vol[1] = ucontrol->value.integer.value[1] - 15; in usb6fire_control_input_vol_put()
302 rt->ivol_updated &= ~(1 << 1); in usb6fire_control_input_vol_put()
317 ucontrol->value.integer.value[0] = rt->input_vol[0] + 15; in usb6fire_control_input_vol_get()
318 ucontrol->value.integer.value[1] = rt->input_vol[1] + 15; in usb6fire_control_input_vol_get()
334 if (rt->line_phono_switch != ucontrol->value.integer.value[0]) { in usb6fire_control_line_phono_put()
335 rt->line_phono_switch = ucontrol->value.integer.value[0]; in usb6fire_control_line_phono_put()
346 ucontrol->value.integer.value[0] = rt->line_phono_switch; in usb6fire_control_line_phono_get()
362 if (rt->opt_coax_switch != ucontrol->value.enumerated.item[0]) { in usb6fire_control_opt_coax_put()
363 rt->opt_coax_switch = ucontrol->value.enumerated.item[0]; in usb6fire_control_opt_coax_put()
374 ucontrol->value.enumerated.item[0] = rt->opt_coax_switch; in usb6fire_control_opt_coax_get()
384 if (rt->digital_thru_switch != ucontrol->value.integer.value[0]) { in usb6fire_control_digital_thru_put()
385 rt->digital_thru_switch = ucontrol->value.integer.value[0]; in usb6fire_control_digital_thru_put()
396 ucontrol->value.integer.value[0] = rt->digital_thru_switch; in usb6fire_control_digital_thru_get()
529 return -ENOMEM; in usb6fire_control_add_virtual()
538 return -ENOMEM; in usb6fire_control_add_virtual()
556 struct comm_runtime *comm_rt = chip->comm; in usb6fire_control_init()
559 return -ENOMEM; in usb6fire_control_init()
561 rt->chip = chip; in usb6fire_control_init()
562 rt->update_streaming = usb6fire_control_streaming_update; in usb6fire_control_init()
563 rt->set_rate = usb6fire_control_set_rate; in usb6fire_control_init()
564 rt->set_channels = usb6fire_control_set_channels; in usb6fire_control_init()
568 comm_rt->write8(comm_rt, init_data[i].type, init_data[i].reg, in usb6fire_control_init()
580 ret = usb6fire_control_add_virtual(rt, chip->card, in usb6fire_control_init()
583 dev_err(&chip->dev->dev, "cannot add control.\n"); in usb6fire_control_init()
587 ret = usb6fire_control_add_virtual(rt, chip->card, in usb6fire_control_init()
590 dev_err(&chip->dev->dev, "cannot add control.\n"); in usb6fire_control_init()
597 ret = snd_ctl_add(chip->card, snd_ctl_new1(&elements[i], rt)); in usb6fire_control_init()
600 dev_err(&chip->dev->dev, "cannot add control.\n"); in usb6fire_control_init()
606 chip->control = rt; in usb6fire_control_init()
615 kfree(chip->control); in usb6fire_control_destroy()
616 chip->control = NULL; in usb6fire_control_destroy()