Lines Matching full:codec
961 struct hda_codec *codec; member
1078 * CA0132 codec access
1080 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
1084 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
1090 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
1093 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
1097 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
1104 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
1109 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
1118 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
1131 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
1134 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
1141 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
1146 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
1158 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
1160 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
1164 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
1168 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
1182 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
1189 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
1194 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
1203 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
1205 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
1209 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
1213 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
1218 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
1234 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
1237 struct ca0132_spec *spec = codec->spec; in chipio_write()
1243 err = chipio_write_address(codec, chip_addx); in chipio_write()
1247 err = chipio_write_data(codec, data); in chipio_write()
1260 static int chipio_write_no_mutex(struct hda_codec *codec, in chipio_write_no_mutex() argument
1267 err = chipio_write_address(codec, chip_addx); in chipio_write_no_mutex()
1271 err = chipio_write_data(codec, data); in chipio_write_no_mutex()
1283 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
1288 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
1292 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
1296 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
1307 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
1310 struct ca0132_spec *spec = codec->spec; in chipio_read()
1316 err = chipio_write_address(codec, chip_addx); in chipio_read()
1320 err = chipio_read_data(codec, data); in chipio_read()
1332 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1341 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1348 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1351 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1356 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1360 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1361 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1364 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1375 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, in chipio_set_control_param_no_mutex() argument
1382 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1385 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param_no_mutex()
1386 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1389 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1399 static void chipio_set_stream_source_dest(struct hda_codec *codec, in chipio_set_stream_source_dest() argument
1402 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1404 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1406 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1413 static void chipio_set_stream_channels(struct hda_codec *codec, in chipio_set_stream_channels() argument
1416 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1418 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1425 static void chipio_set_stream_control(struct hda_codec *codec, in chipio_set_stream_control() argument
1428 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1430 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1438 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, in chipio_set_conn_rate_no_mutex() argument
1441 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1443 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1450 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1453 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1454 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1461 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
1463 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
1466 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1468 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1470 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1472 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1474 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1476 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1484 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
1492 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
1504 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
1510 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
1522 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
1524 struct ca0132_spec *spec = codec->spec; in dspio_write()
1527 dspio_write_wait(codec); in dspio_write()
1530 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
1535 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
1541 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
1553 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
1564 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
1573 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
1577 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
1581 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
1586 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
1592 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
1606 status = dspio_read(codec, buffer++); in dspio_read_multiple()
1615 status = dspio_read(codec, &dummy); in dspio_read_multiple()
1685 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
1693 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
1697 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
1699 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
1703 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
1710 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
1721 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
1728 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
1767 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
1799 * @codec: the HDA codec
1810 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
1827 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
1832 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
1845 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
1850 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
1869 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
1872 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
1875 codec_dbg(codec, "NULL reply\n"); in dspio_scp()
1882 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
1892 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
1895 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, in dspio_set_param()
1899 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
1902 return dspio_set_param(codec, mod_id, 0x20, req, &data, in dspio_set_uint_param()
1906 static int dspio_set_uint_param_no_source(struct hda_codec *codec, int mod_id, in dspio_set_uint_param_no_source() argument
1909 return dspio_set_param(codec, mod_id, 0x00, req, &data, in dspio_set_uint_param_no_source()
1916 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
1921 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
1922 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_alloc_dma_chan()
1927 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
1932 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
1936 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
1937 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
1945 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
1950 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
1951 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
1953 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_free_dma_chan()
1958 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
1962 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
1970 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
1976 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
1986 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
1993 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2005 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
2010 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
2012 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
2017 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
2048 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
2052 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
2058 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
2070 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
2073 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
2077 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
2078 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
2085 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
2092 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
2095 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
2099 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2102 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
2112 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
2114 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2117 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
2120 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
2124 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2127 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
2133 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
2135 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2139 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
2141 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2144 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
2147 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
2149 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2152 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
2155 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
2157 codec_dbg(codec, in dsp_dma_setup_common()
2163 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
2171 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
2189 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
2192 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
2198 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
2202 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
2216 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
2219 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
2222 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
2227 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
2230 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
2233 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
2241 status = chipio_write(codec, in dsp_dma_setup()
2244 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
2247 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
2249 codec_dbg(codec, in dsp_dma_setup()
2254 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
2262 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
2268 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
2271 status = chipio_read(codec, in dsp_dma_start()
2275 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
2278 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
2284 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
2287 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
2290 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
2298 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
2304 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
2307 status = chipio_read(codec, in dsp_dma_stop()
2311 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
2314 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
2319 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
2322 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
2325 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
2333 * @codec: the HDA codec
2341 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
2351 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2359 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2363 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2367 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2371 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2382 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
2386 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2390 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
2394 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2402 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2408 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2411 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2415 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2418 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2423 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2435 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2441 status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2449 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2453 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2455 status = dsp_free_router_ports(codec); in dsp_free_ports()
2457 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2460 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2469 struct hda_codec *codec; member
2481 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
2502 struct hda_codec *codec = dma->codec; in dma_reset() local
2503 struct ca0132_spec *spec = codec->spec; in dma_reset()
2507 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
2509 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
2534 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
2566 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
2617 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
2625 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
2632 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
2634 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
2647 * @codec: the HDA codec
2658 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
2694 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
2695 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2699 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
2708 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
2715 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
2725 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
2738 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
2746 codec_dbg(codec, in dspxfr_one_seg()
2753 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
2767 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
2771 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
2774 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
2781 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
2785 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
2788 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
2789 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
2796 status = chipio_write_multiple(codec, in dspxfr_one_seg()
2805 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2813 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
2821 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
2834 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
2844 * @codec: the HDA codec
2854 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
2861 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
2883 dma_engine->codec = codec; in dspxfr_image()
2884 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
2891 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
2895 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
2899 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
2908 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
2910 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
2917 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
2920 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
2925 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2928 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
2934 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
2938 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
2952 status = dsp_free_ports(codec); in dspxfr_image()
2957 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2962 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
2965 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
2975 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
2977 struct ca0132_spec *spec = codec->spec; in dspload_post_setup()
2978 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
2981 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
2982 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
2985 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
2992 * @codec: the HDA codec
3007 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
3018 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
3035 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
3037 status = dsp_reset(codec); in dspload_image()
3042 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
3043 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
3049 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
3051 dspload_post_setup(codec); in dspload_image()
3052 status = dsp_set_run_state(codec); in dspload_image()
3055 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
3062 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
3067 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
3074 #define dspload_is_loaded(codec) false argument
3077 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
3082 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
3083 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
3089 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
3103 static void ca0132_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, in ca0132_mmio_gpio_set() argument
3106 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_gpio_set()
3119 static void ca0132_gpio_init(struct hda_codec *codec) in ca0132_gpio_init() argument
3121 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_init()
3125 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3126 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ca0132_gpio_init()
3127 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); in ca0132_gpio_init()
3130 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3131 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); in ca0132_gpio_init()
3138 static void ca0132_gpio_setup(struct hda_codec *codec) in ca0132_gpio_setup() argument
3140 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_setup()
3144 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3146 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3148 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3150 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3154 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3156 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3158 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3206 static void r3di_gpio_mic_set(struct hda_codec *codec, in r3di_gpio_mic_set() argument
3212 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_mic_set()
3222 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_mic_set()
3226 static void r3di_gpio_out_set(struct hda_codec *codec, in r3di_gpio_out_set() argument
3232 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_out_set()
3242 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_out_set()
3246 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, in r3di_gpio_dsp_status_set() argument
3252 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_dsp_status_set()
3257 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3264 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3271 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3279 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
3284 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
3286 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
3292 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
3295 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
3305 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
3311 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
3314 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
3339 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
3342 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
3343 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
3347 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
3352 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
3353 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
3358 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
3361 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
3362 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
3366 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
3369 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
3370 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
3377 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
3382 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
3389 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
3392 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
3397 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
3402 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
3405 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
3615 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
3624 snd_hda_power_up(codec); in tuning_ctl_set()
3625 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, in tuning_ctl_set()
3628 snd_hda_power_down(codec); in tuning_ctl_set()
3636 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
3637 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
3662 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
3663 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
3676 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
3697 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
3698 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
3711 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
3732 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
3733 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
3746 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
3754 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
3791 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
3794 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
3800 err = add_tuning_control(codec, in add_tuning_ctls()
3812 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
3814 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
3834 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
3836 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
3843 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
3845 snd_hda_power_up_pm(codec); in ca0132_select_out()
3850 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
3861 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
3864 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3869 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3874 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3876 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3878 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3880 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3884 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3886 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3889 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3891 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3894 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
3897 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3902 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3907 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3909 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3911 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3913 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3917 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3919 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3922 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3924 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3929 snd_hda_power_down_pm(codec); in ca0132_select_out()
3944 static int ca0132_alt_select_out(struct hda_codec *codec) in ca0132_alt_select_out() argument
3946 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out()
3956 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_out()
3958 snd_hda_power_up_pm(codec); in ca0132_alt_select_out()
3968 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || in ca0132_alt_select_out()
3969 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); in ca0132_alt_select_out()
3980 err = dspio_set_uint_param(codec, 0x96, 0x3A, tmp); in ca0132_alt_select_out()
3986 codec_dbg(codec, "%s speaker\n", __func__); in ca0132_alt_select_out()
3990 ca0132_mmio_gpio_set(codec, 7, false); in ca0132_alt_select_out()
3991 ca0132_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out()
3992 ca0132_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out()
3993 chipio_set_control_param(codec, 0x0D, 0x18); in ca0132_alt_select_out()
3996 chipio_set_control_param(codec, 0x0D, 0x24); in ca0132_alt_select_out()
3997 r3di_gpio_out_set(codec, R3DI_LINE_OUT); in ca0132_alt_select_out()
4000 chipio_set_control_param(codec, 0x0D, 0x24); in ca0132_alt_select_out()
4001 ca0132_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out()
4006 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_alt_select_out()
4008 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_alt_select_out()
4011 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4013 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4016 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4021 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4023 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_EIGHT); in ca0132_alt_select_out()
4026 codec_dbg(codec, "%s hp\n", __func__); in ca0132_alt_select_out()
4030 ca0132_mmio_gpio_set(codec, 7, true); in ca0132_alt_select_out()
4031 ca0132_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out()
4032 ca0132_mmio_gpio_set(codec, 1, false); in ca0132_alt_select_out()
4033 chipio_set_control_param(codec, 0x0D, 0x12); in ca0132_alt_select_out()
4036 chipio_set_control_param(codec, 0x0D, 0x21); in ca0132_alt_select_out()
4037 r3di_gpio_out_set(codec, R3DI_HEADPHONE_OUT); in ca0132_alt_select_out()
4040 chipio_set_control_param(codec, 0x0D, 0x21); in ca0132_alt_select_out()
4041 ca0132_mmio_gpio_set(codec, 0x1, false); in ca0132_alt_select_out()
4045 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4049 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4051 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4056 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) in ca0132_alt_select_out()
4058 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) in ca0132_alt_select_out()
4061 pin_ctl = snd_hda_codec_read(codec, headphone_nid, 0, in ca0132_alt_select_out()
4063 snd_hda_set_pin_ctl(codec, headphone_nid, in ca0132_alt_select_out()
4067 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4069 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); in ca0132_alt_select_out()
4072 codec_dbg(codec, "%s surround\n", __func__); in ca0132_alt_select_out()
4076 ca0132_mmio_gpio_set(codec, 7, false); in ca0132_alt_select_out()
4077 ca0132_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out()
4078 ca0132_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out()
4079 chipio_set_control_param(codec, 0x0D, 0x18); in ca0132_alt_select_out()
4082 chipio_set_control_param(codec, 0x0D, 0x24); in ca0132_alt_select_out()
4083 r3di_gpio_out_set(codec, R3DI_LINE_OUT); in ca0132_alt_select_out()
4086 ca0132_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out()
4087 chipio_set_control_param(codec, 0x0D, 0x24); in ca0132_alt_select_out()
4091 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4093 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4096 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_alt_select_out()
4098 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_alt_select_out()
4101 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4104 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[2], 0, in ca0132_alt_select_out()
4106 snd_hda_set_pin_ctl(codec, spec->out_pins[2], in ca0132_alt_select_out()
4109 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[3], 0, in ca0132_alt_select_out()
4111 snd_hda_set_pin_ctl(codec, spec->out_pins[3], in ca0132_alt_select_out()
4115 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4117 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_EIGHT); in ca0132_alt_select_out()
4123 err = dspio_set_uint_param(codec, in ca0132_alt_select_out()
4133 snd_hda_power_down_pm(codec); in ca0132_alt_select_out()
4145 ca0132_alt_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4147 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4149 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
4152 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
4156 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
4157 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
4158 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
4159 static void resume_mic1(struct hda_codec *codec, unsigned int oldval);
4160 static int stop_mic1(struct hda_codec *codec);
4161 static int ca0132_cvoice_switch_set(struct hda_codec *codec);
4162 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val);
4167 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
4169 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
4178 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
4179 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
4180 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
4185 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4187 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4189 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
4190 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
4195 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4197 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4199 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
4205 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) in ca0132_alt_set_vipsource() argument
4207 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_vipsource()
4213 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_set_vipsource()
4215 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_set_vipsource()
4216 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_set_vipsource()
4221 codec_dbg(codec, "%s: off.", __func__); in ca0132_alt_set_vipsource()
4222 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_alt_set_vipsource()
4225 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4227 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_set_vipsource()
4228 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_set_vipsource()
4230 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_set_vipsource()
4242 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4245 codec_dbg(codec, "%s: on.", __func__); in ca0132_alt_set_vipsource()
4246 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_alt_set_vipsource()
4247 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_alt_set_vipsource()
4249 chipio_set_conn_rate(codec, 0x0F, SR_16_000); in ca0132_alt_set_vipsource()
4255 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4258 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4261 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_alt_set_vipsource()
4264 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_set_vipsource()
4265 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_set_vipsource()
4276 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
4278 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
4282 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
4284 snd_hda_power_up_pm(codec); in ca0132_select_mic()
4289 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
4301 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
4302 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
4303 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
4305 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
4310 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
4311 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
4312 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
4314 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
4317 snd_hda_power_down_pm(codec); in ca0132_select_mic()
4328 static int ca0132_alt_select_in(struct hda_codec *codec) in ca0132_alt_select_in() argument
4330 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_in()
4333 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_in()
4335 snd_hda_power_up_pm(codec); in ca0132_alt_select_in()
4337 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_select_in()
4338 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_select_in()
4347 ca0132_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
4351 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
4359 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4360 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4362 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4364 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4366 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4367 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4370 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4371 chipio_write(codec, 0x18B09C, 0x0000000C); in ca0132_alt_select_in()
4373 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
4376 ca0132_mic_boost_set(codec, 0); in ca0132_alt_select_in()
4380 ca0132_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
4383 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
4387 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4388 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4390 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4393 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4396 chipio_write(codec, 0x18B098, 0x00000000); in ca0132_alt_select_in()
4397 chipio_write(codec, 0x18B09C, 0x00000000); in ca0132_alt_select_in()
4400 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4401 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4407 ca0132_mmio_gpio_set(codec, 0, true); in ca0132_alt_select_in()
4408 ca0132_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_in()
4412 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); in ca0132_alt_select_in()
4420 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4421 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4423 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4425 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4427 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4428 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4431 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4432 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
4434 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
4437 ca0132_cvoice_switch_set(codec); in ca0132_alt_select_in()
4439 snd_hda_power_down_pm(codec); in ca0132_alt_select_in()
4447 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
4451 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
4475 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
4477 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
4488 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
4497 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
4499 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
4538 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_effects_set()
4557 dspio_set_uint_param(codec, 0x47, 0x00, tmp); in ca0132_effects_set()
4566 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
4570 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
4582 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
4584 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
4588 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
4592 ca0132_alt_select_out(codec); in ca0132_pe_switch_set()
4598 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
4604 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
4606 struct ca0132_spec *spec = codec->spec; in stop_mic1()
4607 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
4610 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
4617 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
4619 struct ca0132_spec *spec = codec->spec; in resume_mic1()
4622 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
4630 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
4632 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
4637 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
4644 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
4647 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
4650 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
4652 ret |= ca0132_alt_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
4654 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
4655 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
4659 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
4661 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
4665 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
4668 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
4674 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) in ca0132_alt_mic_boost_set() argument
4676 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_set()
4679 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_alt_mic_boost_set()
4687 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
4692 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
4700 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
4702 ca0132_select_out(codec); in ca0132_vnode_switch_set()
4711 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
4717 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
4719 ca0132_select_out(codec); in ca0132_vnode_switch_set()
4724 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
4729 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
4735 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
4741 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
4755 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_slider_ctl_set() argument
4769 snd_hda_power_up(codec); in ca0132_alt_slider_ctl_set()
4775 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
4784 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
4789 snd_hda_power_down(codec); in ca0132_alt_slider_ctl_set()
4797 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_ctl_get() local
4798 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_ctl_get()
4808 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_slider_ctl_get() local
4809 struct ca0132_spec *spec = codec->spec; in ca0132_alt_slider_ctl_get()
4851 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_put() local
4852 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_put()
4864 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); in ca0132_alt_xbass_xover_slider_put()
4872 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_effect_slider_put() local
4873 struct ca0132_spec *spec = codec->spec; in ca0132_alt_effect_slider_put()
4886 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); in ca0132_alt_effect_slider_put()
4919 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_get() local
4920 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_get()
4929 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_put() local
4930 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_put()
4937 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", in ca0132_alt_mic_boost_put()
4943 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_mic_boost_put()
4970 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_get() local
4971 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_get()
4980 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_put() local
4981 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_put()
4988 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", in ca0132_alt_input_source_put()
4993 ca0132_alt_select_in(codec); in ca0132_alt_input_source_put()
5015 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_get() local
5016 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_get()
5025 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_put() local
5026 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_put()
5034 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", in ca0132_alt_output_select_put()
5042 ca0132_alt_select_out(codec); in ca0132_alt_output_select_put()
5071 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_get() local
5072 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_get()
5081 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_put() local
5082 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_put()
5091 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", in ca0132_alt_svm_setting_put()
5111 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_alt_svm_setting_put()
5135 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_get() local
5136 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_get()
5145 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_put() local
5146 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_put()
5154 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, in ca0132_alt_eq_preset_put()
5161 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, in ca0132_alt_eq_preset_put()
5192 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
5193 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
5202 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
5203 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
5210 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
5218 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
5228 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
5237 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
5238 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
5274 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
5275 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
5281 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
5284 snd_hda_power_up(codec); in ca0132_switch_put()
5302 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
5309 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
5317 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
5326 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
5330 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
5337 snd_hda_power_down(codec); in ca0132_switch_put()
5349 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) in ca0132_alt_dsp_volume_put() argument
5351 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_volume_put()
5362 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5369 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5374 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5382 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
5383 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
5394 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
5399 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
5404 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
5409 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
5420 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
5421 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
5441 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
5442 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
5461 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
5466 snd_hda_power_up(codec); in ca0132_volume_put()
5467 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
5473 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
5474 snd_hda_power_down(codec); in ca0132_volume_put()
5488 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_volume_put() local
5489 struct ca0132_spec *spec = codec->spec; in ca0132_alt_volume_put()
5515 snd_hda_power_up(codec); in ca0132_alt_volume_put()
5516 ca0132_alt_dsp_volume_put(codec, vnid); in ca0132_alt_volume_put()
5517 mutex_lock(&codec->control_mutex); in ca0132_alt_volume_put()
5519 mutex_unlock(&codec->control_mutex); in ca0132_alt_volume_put()
5520 snd_hda_power_down(codec); in ca0132_alt_volume_put()
5528 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
5529 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
5540 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
5545 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
5550 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
5555 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
5564 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_add_effect_slider() argument
5591 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in ca0132_alt_add_effect_slider()
5599 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
5602 struct ca0132_spec *spec = codec->spec; in add_fx_switch()
5615 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
5618 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
5626 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
5630 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) in add_ca0132_alt_eq_presets() argument
5638 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, in add_ca0132_alt_eq_presets()
5639 snd_ctl_new1(&knew, codec)); in add_ca0132_alt_eq_presets()
5647 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) in ca0132_alt_add_svm_enum() argument
5655 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, in ca0132_alt_add_svm_enum()
5656 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_svm_enum()
5664 static int ca0132_alt_add_output_enum(struct hda_codec *codec) in ca0132_alt_add_output_enum() argument
5672 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, in ca0132_alt_add_output_enum()
5673 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_output_enum()
5681 static int ca0132_alt_add_input_enum(struct hda_codec *codec) in ca0132_alt_add_input_enum() argument
5689 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, in ca0132_alt_add_input_enum()
5690 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_input_enum()
5697 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) in ca0132_alt_add_mic_boost_enum() argument
5705 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, in ca0132_alt_add_mic_boost_enum()
5706 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_mic_boost_enum()
5737 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) in ca0132_alt_add_chmap_ctls() argument
5742 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in ca0132_alt_add_chmap_ctls()
5754 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); in ca0132_alt_add_chmap_ctls()
5830 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
5832 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
5838 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
5844 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, in ca0132_build_controls()
5846 snd_hda_add_vmaster(codec, "Master Playback Volume", in ca0132_build_controls()
5849 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", in ca0132_build_controls()
5868 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
5875 * If codec has use_alt_controls set to true, add effect level sliders, in ca0132_build_controls()
5880 ca0132_alt_add_svm_enum(codec); in ca0132_build_controls()
5881 add_ca0132_alt_eq_presets(codec); in ca0132_build_controls()
5882 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
5887 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
5894 err = ca0132_alt_add_effect_slider(codec, in ca0132_build_controls()
5902 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, in ca0132_build_controls()
5908 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
5913 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
5918 add_voicefx(codec); in ca0132_build_controls()
5921 * If the codec uses alt_functions, you need the enumerated controls in ca0132_build_controls()
5926 ca0132_alt_add_output_enum(codec); in ca0132_build_controls()
5927 ca0132_alt_add_input_enum(codec); in ca0132_build_controls()
5928 ca0132_alt_add_mic_boost_enum(codec); in ca0132_build_controls()
5931 add_tuning_ctls(codec); in ca0132_build_controls()
5934 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
5939 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
5943 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
5950 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
5956 ca0132_alt_add_chmap_ctls(codec); in ca0132_build_controls()
6004 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
6006 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
6009 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
6027 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
6036 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
6046 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
6064 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
6067 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
6068 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
6069 snd_hda_codec_write(codec, pin, 0, in init_output()
6073 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
6074 snd_hda_codec_write(codec, dac, 0, in init_output()
6078 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
6081 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
6082 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
6083 snd_hda_codec_write(codec, pin, 0, in init_input()
6087 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
6088 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
6092 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
6094 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
6099 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
6103 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
6105 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
6111 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
6113 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
6118 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
6120 oldval = stop_mic1(codec); in ca0132_set_dmic()
6121 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
6125 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
6129 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
6133 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
6137 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
6142 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
6146 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
6148 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
6149 resume_mic1(codec, oldval); in ca0132_set_dmic()
6155 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
6157 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
6170 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6180 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6196 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6203 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
6205 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
6208 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6210 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6212 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6214 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6216 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6218 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6223 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
6225 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
6228 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
6229 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
6232 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
6235 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
6238 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
6239 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
6247 static void r3d_dsp_scp_startup(struct hda_codec *codec) in r3d_dsp_scp_startup() argument
6252 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in r3d_dsp_scp_startup()
6255 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in r3d_dsp_scp_startup()
6258 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in r3d_dsp_scp_startup()
6261 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in r3d_dsp_scp_startup()
6264 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in r3d_dsp_scp_startup()
6268 static void r3d_dsp_initial_mic_setup(struct hda_codec *codec) in r3d_dsp_initial_mic_setup() argument
6273 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in r3d_dsp_initial_mic_setup()
6274 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in r3d_dsp_initial_mic_setup()
6276 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in r3d_dsp_initial_mic_setup()
6278 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in r3d_dsp_initial_mic_setup()
6281 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in r3d_dsp_initial_mic_setup()
6282 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in r3d_dsp_initial_mic_setup()
6283 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in r3d_dsp_initial_mic_setup()
6285 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in r3d_dsp_initial_mic_setup()
6291 static void sbz_init_analog_mics(struct hda_codec *codec) in sbz_init_analog_mics() argument
6296 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in sbz_init_analog_mics()
6297 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in sbz_init_analog_mics()
6299 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in sbz_init_analog_mics()
6302 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in sbz_init_analog_mics()
6303 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in sbz_init_analog_mics()
6305 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in sbz_init_analog_mics()
6315 static void sbz_connect_streams(struct hda_codec *codec) in sbz_connect_streams() argument
6317 struct ca0132_spec *spec = codec->spec; in sbz_connect_streams()
6321 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); in sbz_connect_streams()
6323 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_connect_streams()
6324 chipio_set_stream_control(codec, 0x0C, 1); in sbz_connect_streams()
6327 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); in sbz_connect_streams()
6330 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); in sbz_connect_streams()
6331 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); in sbz_connect_streams()
6332 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); in sbz_connect_streams()
6333 chipio_set_stream_channels(codec, 0x14, 2); in sbz_connect_streams()
6334 chipio_set_stream_control(codec, 0x14, 1); in sbz_connect_streams()
6336 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); in sbz_connect_streams()
6348 static void sbz_chipio_startup_data(struct hda_codec *codec) in sbz_chipio_startup_data() argument
6350 struct ca0132_spec *spec = codec->spec; in sbz_chipio_startup_data()
6353 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); in sbz_chipio_startup_data()
6356 chipio_write_no_mutex(codec, 0x190060, 0x0001f8c0); in sbz_chipio_startup_data()
6357 chipio_write_no_mutex(codec, 0x190064, 0x0001f9c1); in sbz_chipio_startup_data()
6358 chipio_write_no_mutex(codec, 0x190068, 0x0001fac6); in sbz_chipio_startup_data()
6359 chipio_write_no_mutex(codec, 0x19006c, 0x0001fbc7); in sbz_chipio_startup_data()
6361 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
6363 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_chipio_startup_data()
6364 chipio_set_stream_control(codec, 0x0C, 1); in sbz_chipio_startup_data()
6366 chipio_write_no_mutex(codec, 0x190030, 0x0001e0c0); in sbz_chipio_startup_data()
6367 chipio_write_no_mutex(codec, 0x190034, 0x0001e1c1); in sbz_chipio_startup_data()
6368 chipio_write_no_mutex(codec, 0x190038, 0x0001e4c2); in sbz_chipio_startup_data()
6369 chipio_write_no_mutex(codec, 0x19003c, 0x0001e5c3); in sbz_chipio_startup_data()
6370 chipio_write_no_mutex(codec, 0x190040, 0x0001e2c4); in sbz_chipio_startup_data()
6371 chipio_write_no_mutex(codec, 0x190044, 0x0001e3c5); in sbz_chipio_startup_data()
6372 chipio_write_no_mutex(codec, 0x190048, 0x0001e8c6); in sbz_chipio_startup_data()
6373 chipio_write_no_mutex(codec, 0x19004c, 0x0001e9c7); in sbz_chipio_startup_data()
6374 chipio_write_no_mutex(codec, 0x190050, 0x0001ecc8); in sbz_chipio_startup_data()
6375 chipio_write_no_mutex(codec, 0x190054, 0x0001edc9); in sbz_chipio_startup_data()
6376 chipio_write_no_mutex(codec, 0x190058, 0x0001eaca); in sbz_chipio_startup_data()
6377 chipio_write_no_mutex(codec, 0x19005c, 0x0001ebcb); in sbz_chipio_startup_data()
6379 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
6381 codec_dbg(codec, "Startup Data exited, mutex released.\n"); in sbz_chipio_startup_data()
6389 static void sbz_dsp_scp_startup(struct hda_codec *codec) in sbz_dsp_scp_startup() argument
6394 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in sbz_dsp_scp_startup()
6397 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in sbz_dsp_scp_startup()
6400 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in sbz_dsp_scp_startup()
6403 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in sbz_dsp_scp_startup()
6406 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in sbz_dsp_scp_startup()
6409 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in sbz_dsp_scp_startup()
6413 static void sbz_dsp_initial_mic_setup(struct hda_codec *codec) in sbz_dsp_initial_mic_setup() argument
6417 chipio_set_stream_control(codec, 0x03, 0); in sbz_dsp_initial_mic_setup()
6418 chipio_set_stream_control(codec, 0x04, 0); in sbz_dsp_initial_mic_setup()
6420 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in sbz_dsp_initial_mic_setup()
6421 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in sbz_dsp_initial_mic_setup()
6424 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in sbz_dsp_initial_mic_setup()
6426 chipio_set_stream_control(codec, 0x03, 1); in sbz_dsp_initial_mic_setup()
6427 chipio_set_stream_control(codec, 0x04, 1); in sbz_dsp_initial_mic_setup()
6429 chipio_write(codec, 0x18b098, 0x0000000c); in sbz_dsp_initial_mic_setup()
6430 chipio_write(codec, 0x18b09C, 0x0000000c); in sbz_dsp_initial_mic_setup()
6436 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
6438 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
6450 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
6458 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
6461 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
6465 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
6466 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
6470 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
6474 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
6481 static void r3d_setup_defaults(struct hda_codec *codec) in r3d_setup_defaults() argument
6483 struct ca0132_spec *spec = codec->spec; in r3d_setup_defaults()
6491 r3d_dsp_scp_startup(codec); in r3d_setup_defaults()
6493 r3d_dsp_initial_mic_setup(codec); in r3d_setup_defaults()
6497 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in r3d_setup_defaults()
6501 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in r3d_setup_defaults()
6502 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in r3d_setup_defaults()
6505 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in r3d_setup_defaults()
6508 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); in r3d_setup_defaults()
6514 dspio_set_uint_param(codec, in r3d_setup_defaults()
6526 static void sbz_setup_defaults(struct hda_codec *codec) in sbz_setup_defaults() argument
6528 struct ca0132_spec *spec = codec->spec; in sbz_setup_defaults()
6536 sbz_dsp_scp_startup(codec); in sbz_setup_defaults()
6538 sbz_init_analog_mics(codec); in sbz_setup_defaults()
6540 sbz_connect_streams(codec); in sbz_setup_defaults()
6542 sbz_chipio_startup_data(codec); in sbz_setup_defaults()
6544 chipio_set_stream_control(codec, 0x03, 1); in sbz_setup_defaults()
6545 chipio_set_stream_control(codec, 0x04, 1); in sbz_setup_defaults()
6552 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in sbz_setup_defaults()
6553 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in sbz_setup_defaults()
6557 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in sbz_setup_defaults()
6561 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in sbz_setup_defaults()
6562 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in sbz_setup_defaults()
6565 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in sbz_setup_defaults()
6567 sbz_dsp_initial_mic_setup(codec); in sbz_setup_defaults()
6574 dspio_set_uint_param(codec, in sbz_setup_defaults()
6589 snd_hda_codec_setup_stream(codec, spec->dacs[0], spec->dsp_stream_id, in sbz_setup_defaults()
6592 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in sbz_setup_defaults()
6594 snd_hda_codec_setup_stream(codec, spec->dacs[0], spec->dsp_stream_id, in sbz_setup_defaults()
6597 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in sbz_setup_defaults()
6603 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
6605 struct ca0132_spec *spec = codec->spec; in ca0132_init_flags()
6608 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); in ca0132_init_flags()
6609 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); in ca0132_init_flags()
6610 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); in ca0132_init_flags()
6611 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); in ca0132_init_flags()
6612 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); in ca0132_init_flags()
6613 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
6614 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); in ca0132_init_flags()
6615 chipio_set_control_flag(codec, in ca0132_init_flags()
6617 chipio_set_control_flag(codec, in ca0132_init_flags()
6620 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
6621 chipio_set_control_flag(codec, in ca0132_init_flags()
6623 chipio_set_control_flag(codec, in ca0132_init_flags()
6625 chipio_set_control_flag(codec, in ca0132_init_flags()
6627 chipio_set_control_flag(codec, in ca0132_init_flags()
6629 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
6636 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
6638 struct ca0132_spec *spec = codec->spec; in ca0132_init_params()
6641 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_init_params()
6642 chipio_set_conn_rate(codec, 0x0B, SR_48_000); in ca0132_init_params()
6643 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); in ca0132_init_params()
6644 chipio_set_control_param(codec, 0, 0); in ca0132_init_params()
6645 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_init_params()
6648 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
6649 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
6652 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
6654 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
6655 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
6656 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
6657 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
6658 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
6659 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
6661 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
6662 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
6663 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
6666 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
6669 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp_images()
6680 codec->card->dev) != 0) { in ca0132_download_dsp_images()
6681 codec_dbg(codec, "SBZ alt firmware not detected. "); in ca0132_download_dsp_images()
6684 codec_dbg(codec, "Sound Blaster Z firmware selected."); in ca0132_download_dsp_images()
6690 codec->card->dev) != 0) { in ca0132_download_dsp_images()
6691 codec_dbg(codec, "Recon3Di alt firmware not detected."); in ca0132_download_dsp_images()
6694 codec_dbg(codec, "Recon3Di firmware selected."); in ca0132_download_dsp_images()
6704 * exists for your particular codec. in ca0132_download_dsp_images()
6707 codec_dbg(codec, "Default firmware selected."); in ca0132_download_dsp_images()
6709 codec->card->dev) != 0) in ca0132_download_dsp_images()
6714 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
6715 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
6719 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
6727 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
6729 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
6738 chipio_enable_clocks(codec); in ca0132_download_dsp()
6742 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
6750 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
6753 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
6756 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
6758 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
6759 snd_hda_power_up_pm(codec); in ca0132_process_dsp_response()
6761 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
6765 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
6766 snd_hda_power_down_pm(codec); in ca0132_process_dsp_response()
6769 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
6771 struct ca0132_spec *spec = codec->spec; in hp_callback()
6777 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
6783 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
6785 struct ca0132_spec *spec = codec->spec; in amic_callback()
6788 ca0132_alt_select_in(codec); in amic_callback()
6790 ca0132_select_mic(codec); in amic_callback()
6793 static void ca0132_init_unsol(struct hda_codec *codec) in ca0132_init_unsol() argument
6795 struct ca0132_spec *spec = codec->spec; in ca0132_init_unsol()
6796 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_init_unsol()
6797 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_init_unsol()
6799 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_init_unsol()
6803 snd_hda_jack_detect_enable_callback(codec, in ca0132_init_unsol()
6882 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
6884 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
6929 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
6937 static void r3di_gpio_shutdown(struct hda_codec *codec) in r3di_gpio_shutdown() argument
6939 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); in r3di_gpio_shutdown()
6945 static void sbz_region2_exit(struct hda_codec *codec) in sbz_region2_exit() argument
6947 struct ca0132_spec *spec = codec->spec; in sbz_region2_exit()
6955 ca0132_mmio_gpio_set(codec, 0, false); in sbz_region2_exit()
6956 ca0132_mmio_gpio_set(codec, 1, false); in sbz_region2_exit()
6957 ca0132_mmio_gpio_set(codec, 4, true); in sbz_region2_exit()
6958 ca0132_mmio_gpio_set(codec, 5, false); in sbz_region2_exit()
6959 ca0132_mmio_gpio_set(codec, 7, false); in sbz_region2_exit()
6962 static void sbz_set_pin_ctl_default(struct hda_codec *codec) in sbz_set_pin_ctl_default() argument
6967 snd_hda_codec_write(codec, 0x11, 0, in sbz_set_pin_ctl_default()
6971 snd_hda_codec_write(codec, pins[i], 0, in sbz_set_pin_ctl_default()
6975 static void ca0132_clear_unsolicited(struct hda_codec *codec) in ca0132_clear_unsolicited() argument
6981 snd_hda_codec_write(codec, pins[i], 0, in ca0132_clear_unsolicited()
6987 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, in sbz_gpio_shutdown_commands() argument
6991 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
6994 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
6998 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
7002 static void sbz_exit_chip(struct hda_codec *codec) in sbz_exit_chip() argument
7004 chipio_set_stream_control(codec, 0x03, 0); in sbz_exit_chip()
7005 chipio_set_stream_control(codec, 0x04, 0); in sbz_exit_chip()
7008 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); in sbz_exit_chip()
7009 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); in sbz_exit_chip()
7010 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); in sbz_exit_chip()
7012 chipio_set_stream_control(codec, 0x14, 0); in sbz_exit_chip()
7013 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
7015 chipio_set_conn_rate(codec, 0x41, SR_192_000); in sbz_exit_chip()
7016 chipio_set_conn_rate(codec, 0x91, SR_192_000); in sbz_exit_chip()
7018 chipio_write(codec, 0x18a020, 0x00000083); in sbz_exit_chip()
7020 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); in sbz_exit_chip()
7021 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); in sbz_exit_chip()
7022 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); in sbz_exit_chip()
7024 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
7026 chipio_set_control_param(codec, 0x0D, 0x24); in sbz_exit_chip()
7028 ca0132_clear_unsolicited(codec); in sbz_exit_chip()
7029 sbz_set_pin_ctl_default(codec); in sbz_exit_chip()
7031 snd_hda_codec_write(codec, 0x0B, 0, in sbz_exit_chip()
7034 sbz_region2_exit(codec); in sbz_exit_chip()
7037 static void r3d_exit_chip(struct hda_codec *codec) in r3d_exit_chip() argument
7039 ca0132_clear_unsolicited(codec); in r3d_exit_chip()
7040 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in r3d_exit_chip()
7041 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); in r3d_exit_chip()
7044 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
7048 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
7049 dsp_reset(codec); in ca0132_exit_chip()
7060 static void sbz_dsp_startup_check(struct hda_codec *codec) in sbz_dsp_startup_check() argument
7062 struct ca0132_spec *spec = codec->spec; in sbz_dsp_startup_check()
7075 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
7083 codec_dbg(codec, "Startup Check: %d ", failure); in sbz_dsp_startup_check()
7085 codec_info(codec, "DSP not initialized properly. Attempting to fix."); in sbz_dsp_startup_check()
7092 codec_info(codec, "Reloading... Tries left: %d", reload); in sbz_dsp_startup_check()
7093 sbz_exit_chip(codec); in sbz_dsp_startup_check()
7095 codec->patch_ops.init(codec); in sbz_dsp_startup_check()
7098 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
7109 codec_info(codec, "DSP fixed."); in sbz_dsp_startup_check()
7114 …codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to c… in sbz_dsp_startup_check()
7125 static void ca0132_alt_vol_setup(struct hda_codec *codec) in ca0132_alt_vol_setup() argument
7127 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
7128 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
7129 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
7130 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
7131 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
7132 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
7133 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
7134 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
7140 static void sbz_pre_dsp_setup(struct hda_codec *codec) in sbz_pre_dsp_setup() argument
7142 struct ca0132_spec *spec = codec->spec; in sbz_pre_dsp_setup()
7147 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfc); in sbz_pre_dsp_setup()
7148 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfd); in sbz_pre_dsp_setup()
7149 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfe); in sbz_pre_dsp_setup()
7150 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xff); in sbz_pre_dsp_setup()
7152 chipio_write(codec, 0x18b0a4, 0x000000c2); in sbz_pre_dsp_setup()
7154 snd_hda_codec_write(codec, 0x11, 0, in sbz_pre_dsp_setup()
7158 static void r3d_pre_dsp_setup(struct hda_codec *codec) in r3d_pre_dsp_setup() argument
7161 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfc); in r3d_pre_dsp_setup()
7162 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfd); in r3d_pre_dsp_setup()
7163 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xfe); in r3d_pre_dsp_setup()
7164 snd_hda_codec_write(codec, 0x15, 0, 0xd00, 0xff); in r3d_pre_dsp_setup()
7166 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3d_pre_dsp_setup()
7168 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
7170 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
7172 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
7175 snd_hda_codec_write(codec, 0x11, 0, in r3d_pre_dsp_setup()
7179 static void r3di_pre_dsp_setup(struct hda_codec *codec) in r3di_pre_dsp_setup() argument
7181 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3di_pre_dsp_setup()
7183 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7185 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7187 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7190 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7192 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7194 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7196 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
7199 snd_hda_codec_write(codec, 0x11, 0, in r3di_pre_dsp_setup()
7208 static void ca0132_mmio_init(struct hda_codec *codec) in ca0132_mmio_init() argument
7210 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init()
7236 static void ca0132_alt_init(struct hda_codec *codec) in ca0132_alt_init() argument
7238 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init()
7240 ca0132_alt_vol_setup(codec); in ca0132_alt_init()
7244 codec_dbg(codec, "SBZ alt_init"); in ca0132_alt_init()
7245 ca0132_gpio_init(codec); in ca0132_alt_init()
7246 sbz_pre_dsp_setup(codec); in ca0132_alt_init()
7247 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
7248 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
7251 codec_dbg(codec, "R3DI alt_init"); in ca0132_alt_init()
7252 ca0132_gpio_init(codec); in ca0132_alt_init()
7253 ca0132_gpio_setup(codec); in ca0132_alt_init()
7254 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); in ca0132_alt_init()
7255 r3di_pre_dsp_setup(codec); in ca0132_alt_init()
7256 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
7257 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); in ca0132_alt_init()
7260 r3d_pre_dsp_setup(codec); in ca0132_alt_init()
7261 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
7262 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
7267 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
7269 struct ca0132_spec *spec = codec->spec; in ca0132_init()
7276 * there's only two reasons for it. One, the codec has awaken from a in ca0132_init()
7285 dsp_loaded = dspload_is_loaded(codec); in ca0132_init()
7291 sbz_dsp_startup_check(codec); in ca0132_init()
7301 ca0132_mmio_init(codec); in ca0132_init()
7303 snd_hda_power_up_pm(codec); in ca0132_init()
7305 ca0132_init_unsol(codec); in ca0132_init()
7306 ca0132_init_params(codec); in ca0132_init()
7307 ca0132_init_flags(codec); in ca0132_init()
7309 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
7312 ca0132_alt_init(codec); in ca0132_init()
7314 ca0132_download_dsp(codec); in ca0132_init()
7316 ca0132_refresh_widget_caps(codec); in ca0132_init()
7321 r3d_setup_defaults(codec); in ca0132_init()
7324 sbz_setup_defaults(codec); in ca0132_init()
7327 ca0132_setup_defaults(codec); in ca0132_init()
7328 ca0132_init_analog_mic2(codec); in ca0132_init()
7329 ca0132_init_dmic(codec); in ca0132_init()
7334 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
7336 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
7339 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
7341 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
7344 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
7345 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
7347 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
7352 ca0132_gpio_setup(codec); in ca0132_init()
7354 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
7356 ca0132_alt_select_out(codec); in ca0132_init()
7357 ca0132_alt_select_in(codec); in ca0132_init()
7359 ca0132_select_out(codec); in ca0132_init()
7360 ca0132_select_mic(codec); in ca0132_init()
7363 snd_hda_jack_report_sync(codec); in ca0132_init()
7371 ca0132_pe_switch_set(codec); in ca0132_init()
7374 snd_hda_power_down_pm(codec); in ca0132_init()
7379 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
7381 struct ca0132_spec *spec = codec->spec; in ca0132_free()
7384 snd_hda_power_up(codec); in ca0132_free()
7387 sbz_exit_chip(codec); in ca0132_free()
7390 r3d_exit_chip(codec); in ca0132_free()
7393 r3di_gpio_shutdown(codec); in ca0132_free()
7397 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
7398 ca0132_exit_chip(codec); in ca0132_free()
7400 snd_hda_power_down(codec); in ca0132_free()
7403 pci_iounmap(codec->bus->pci, spec->mem_base); in ca0132_free()
7406 kfree(codec->spec); in ca0132_free()
7409 static void ca0132_reboot_notify(struct hda_codec *codec) in ca0132_reboot_notify() argument
7411 codec->patch_ops.free(codec); in ca0132_reboot_notify()
7415 static int ca0132_suspend(struct hda_codec *codec) in ca0132_suspend() argument
7417 struct ca0132_spec *spec = codec->spec; in ca0132_suspend()
7436 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
7438 struct ca0132_spec *spec = codec->spec; in ca0132_config()
7454 codec_dbg(codec, "ca0132_config: QUIRK_ALIENWARE applied.\n"); in ca0132_config()
7455 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
7477 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); in ca0132_config()
7478 snd_hda_apply_pincfgs(codec, sbz_pincfgs); in ca0132_config()
7481 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); in ca0132_config()
7482 snd_hda_apply_pincfgs(codec, r3d_pincfgs); in ca0132_config()
7510 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); in ca0132_config()
7511 snd_hda_apply_pincfgs(codec, r3di_pincfgs); in ca0132_config()
7562 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
7566 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
7601 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
7607 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
7612 codec->spec = spec; in patch_ca0132()
7613 spec->codec = codec; in patch_ca0132()
7615 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
7616 codec->pcm_format_first = 1; in patch_ca0132()
7617 codec->no_sticky_stream = 1; in patch_ca0132()
7619 /* Detect codec quirk */ in patch_ca0132()
7620 quirk = snd_pci_quirk_lookup(codec->bus->pci, ca0132_quirks); in patch_ca0132()
7633 snd_hda_codec_set_name(codec, "Sound Blaster Z"); in patch_ca0132()
7637 snd_hda_codec_set_name(codec, "Recon3D"); in patch_ca0132()
7641 snd_hda_codec_set_name(codec, "Recon3Di"); in patch_ca0132()
7669 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); in patch_ca0132()
7671 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); in patch_ca0132()
7681 ca0132_init_chip(codec); in patch_ca0132()
7683 ca0132_config(codec); in patch_ca0132()
7685 err = ca0132_prepare_verbs(codec); in patch_ca0132()
7689 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()
7696 ca0132_free(codec); in patch_ca0132()
7710 MODULE_DESCRIPTION("Creative Sound Core3D codec");