Lines Matching full:codec

1025 	struct hda_codec *codec;  member
1189 * CA0132 codec access
1191 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
1195 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
1201 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
1204 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
1208 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
1215 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
1220 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
1229 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
1242 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
1245 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
1252 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
1257 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
1269 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
1271 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
1275 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
1279 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
1293 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
1300 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
1305 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
1314 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
1316 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
1320 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
1324 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
1329 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
1345 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
1348 struct ca0132_spec *spec = codec->spec; in chipio_write()
1354 err = chipio_write_address(codec, chip_addx); in chipio_write()
1358 err = chipio_write_data(codec, data); in chipio_write()
1371 static int chipio_write_no_mutex(struct hda_codec *codec, in chipio_write_no_mutex() argument
1378 err = chipio_write_address(codec, chip_addx); in chipio_write_no_mutex()
1382 err = chipio_write_data(codec, data); in chipio_write_no_mutex()
1394 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
1399 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
1403 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
1407 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
1418 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
1421 struct ca0132_spec *spec = codec->spec; in chipio_read()
1427 err = chipio_write_address(codec, chip_addx); in chipio_read()
1431 err = chipio_read_data(codec, data); in chipio_read()
1443 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1452 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1459 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1462 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1467 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1471 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1472 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1475 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1486 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, in chipio_set_control_param_no_mutex() argument
1493 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1496 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param_no_mutex()
1497 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1500 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1510 static void chipio_set_stream_source_dest(struct hda_codec *codec, in chipio_set_stream_source_dest() argument
1513 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1515 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1517 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1524 static void chipio_set_stream_channels(struct hda_codec *codec, in chipio_set_stream_channels() argument
1527 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1529 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1536 static void chipio_set_stream_control(struct hda_codec *codec, in chipio_set_stream_control() argument
1539 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1541 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1549 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, in chipio_set_conn_rate_no_mutex() argument
1552 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1554 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1561 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1564 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1565 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1574 static void chipio_8051_write_direct(struct hda_codec *codec, in chipio_8051_write_direct() argument
1580 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, verb, addr); in chipio_8051_write_direct()
1586 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
1588 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
1591 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1593 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1595 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1597 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1599 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1601 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1609 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
1617 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
1629 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
1635 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
1647 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
1649 struct ca0132_spec *spec = codec->spec; in dspio_write()
1652 dspio_write_wait(codec); in dspio_write()
1655 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
1660 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
1666 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
1678 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
1689 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
1698 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
1702 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
1706 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
1711 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
1717 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
1731 status = dspio_read(codec, buffer++); in dspio_read_multiple()
1740 status = dspio_read(codec, &dummy); in dspio_read_multiple()
1810 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
1817 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
1821 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
1823 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
1827 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
1834 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
1845 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
1852 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
1891 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
1923 * @codec: the HDA codec
1934 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
1951 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
1956 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
1969 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
1974 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
1993 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
1996 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
1999 codec_dbg(codec, "NULL reply\n"); in dspio_scp()
2006 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
2016 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
2019 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, in dspio_set_param()
2023 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
2026 return dspio_set_param(codec, mod_id, 0x20, req, &data, in dspio_set_uint_param()
2030 static int dspio_set_uint_param_no_source(struct hda_codec *codec, int mod_id, in dspio_set_uint_param_no_source() argument
2033 return dspio_set_param(codec, mod_id, 0x00, req, &data, in dspio_set_uint_param_no_source()
2040 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
2045 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
2046 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_alloc_dma_chan()
2051 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
2056 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
2060 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
2061 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
2069 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
2074 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
2075 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
2077 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_free_dma_chan()
2082 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
2086 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
2094 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
2100 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
2110 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2117 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2129 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
2134 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
2136 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
2141 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
2172 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
2176 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
2182 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
2194 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
2197 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
2201 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
2202 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
2209 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
2216 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
2219 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
2223 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2226 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
2236 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
2238 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2241 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
2244 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
2248 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2251 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
2257 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
2259 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2263 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
2265 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2268 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
2271 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
2273 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2276 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
2279 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
2281 codec_dbg(codec, in dsp_dma_setup_common()
2287 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
2295 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
2313 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
2316 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
2322 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
2326 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
2340 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
2343 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
2346 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
2351 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
2354 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
2357 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
2365 status = chipio_write(codec, in dsp_dma_setup()
2368 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
2371 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
2373 codec_dbg(codec, in dsp_dma_setup()
2378 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
2386 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
2392 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
2395 status = chipio_read(codec, in dsp_dma_start()
2399 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
2402 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
2408 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
2411 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
2414 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
2422 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
2428 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
2431 status = chipio_read(codec, in dsp_dma_stop()
2435 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
2438 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
2443 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
2446 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
2449 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
2457 * @codec: the HDA codec
2465 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
2475 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2483 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2487 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2491 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2495 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2506 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
2510 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2514 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
2518 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2526 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2532 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2535 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2539 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2542 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2547 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2559 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2565 status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2573 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2577 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2579 status = dsp_free_router_ports(codec); in dsp_free_ports()
2581 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2584 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2593 struct hda_codec *codec; member
2605 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
2626 struct hda_codec *codec = dma->codec; in dma_reset() local
2627 struct ca0132_spec *spec = codec->spec; in dma_reset()
2631 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
2633 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
2658 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
2690 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
2741 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
2749 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
2756 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
2758 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
2771 * @codec: the HDA codec
2782 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
2818 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
2819 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2823 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
2832 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
2839 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
2849 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
2862 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
2870 codec_dbg(codec, in dspxfr_one_seg()
2877 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
2891 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
2895 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
2898 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
2905 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
2909 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
2912 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
2913 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
2920 status = chipio_write_multiple(codec, in dspxfr_one_seg()
2929 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2937 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
2945 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
2958 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
2968 * @codec: the HDA codec
2978 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
2985 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
3007 dma_engine->codec = codec; in dspxfr_image()
3008 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
3015 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
3019 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
3023 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
3032 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
3034 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
3041 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
3044 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
3049 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3052 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
3058 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
3062 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
3076 status = dsp_free_ports(codec); in dspxfr_image()
3081 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3086 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
3089 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
3099 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
3101 struct ca0132_spec *spec = codec->spec; in dspload_post_setup()
3102 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
3105 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
3106 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
3109 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
3116 * @codec: the HDA codec
3131 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
3142 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
3159 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
3161 status = dsp_reset(codec); in dspload_image()
3166 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
3167 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
3173 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
3175 dspload_post_setup(codec); in dspload_image()
3176 status = dsp_set_run_state(codec); in dspload_image()
3179 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
3186 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
3191 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
3198 #define dspload_is_loaded(codec) false argument
3201 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
3206 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
3207 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
3213 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
3232 static void ca0113_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, in ca0113_mmio_gpio_set() argument
3235 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_gpio_set()
3252 static void ca0113_mmio_command_set(struct hda_codec *codec, unsigned int group, in ca0113_mmio_command_set() argument
3255 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set()
3291 static void ca0113_mmio_command_set_type2(struct hda_codec *codec, in ca0113_mmio_command_set_type2() argument
3294 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set_type2()
3331 static void ca0132_gpio_init(struct hda_codec *codec) in ca0132_gpio_init() argument
3333 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_init()
3338 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3339 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ca0132_gpio_init()
3340 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); in ca0132_gpio_init()
3343 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3344 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); in ca0132_gpio_init()
3353 static void ca0132_gpio_setup(struct hda_codec *codec) in ca0132_gpio_setup() argument
3355 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_setup()
3359 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3361 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3363 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3365 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3369 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3371 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3373 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3423 static void r3di_gpio_mic_set(struct hda_codec *codec, in r3di_gpio_mic_set() argument
3429 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_mic_set()
3439 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_mic_set()
3443 static void r3di_gpio_out_set(struct hda_codec *codec, in r3di_gpio_out_set() argument
3449 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_out_set()
3459 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_out_set()
3463 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, in r3di_gpio_dsp_status_set() argument
3469 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_dsp_status_set()
3474 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3481 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3488 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3496 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
3501 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
3503 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
3509 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
3512 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
3522 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
3528 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
3531 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
3556 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
3559 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
3560 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
3564 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
3569 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
3570 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
3575 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
3578 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
3579 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
3583 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
3586 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
3587 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
3594 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
3599 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
3606 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
3609 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
3614 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
3619 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
3622 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
3832 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
3841 snd_hda_power_up(codec); in tuning_ctl_set()
3842 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, in tuning_ctl_set()
3845 snd_hda_power_down(codec); in tuning_ctl_set()
3853 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
3854 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
3879 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
3880 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
3893 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
3914 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
3915 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
3928 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
3949 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
3950 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
3963 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
3971 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
4008 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
4011 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
4017 err = add_tuning_control(codec, in add_tuning_ctls()
4029 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
4031 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
4051 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
4053 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
4060 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
4062 snd_hda_power_up_pm(codec); in ca0132_select_out()
4067 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
4078 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
4081 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4086 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4091 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4093 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4095 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4097 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4101 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4103 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4106 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4108 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4111 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
4114 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4119 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4124 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4126 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4128 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4130 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4134 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4136 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4139 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4141 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4146 snd_hda_power_down_pm(codec); in ca0132_select_out()
4151 static int ae5_headphone_gain_set(struct hda_codec *codec, long val);
4152 static int zxr_headphone_gain_set(struct hda_codec *codec, long val);
4153 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
4155 static void ae5_mmio_select_out(struct hda_codec *codec) in ae5_mmio_select_out() argument
4157 struct ca0132_spec *spec = codec->spec; in ae5_mmio_select_out()
4161 ca0113_mmio_command_set(codec, in ae5_mmio_select_out()
4171 static void ca0132_alt_select_out_quirk_handler(struct hda_codec *codec) in ca0132_alt_select_out_quirk_handler() argument
4173 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_quirk_handler()
4180 ca0113_mmio_gpio_set(codec, 7, false); in ca0132_alt_select_out_quirk_handler()
4181 ca0113_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out_quirk_handler()
4182 ca0113_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out_quirk_handler()
4183 chipio_set_control_param(codec, 0x0d, 0x18); in ca0132_alt_select_out_quirk_handler()
4186 ca0113_mmio_gpio_set(codec, 2, true); in ca0132_alt_select_out_quirk_handler()
4187 ca0113_mmio_gpio_set(codec, 3, true); in ca0132_alt_select_out_quirk_handler()
4188 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_out_quirk_handler()
4189 zxr_headphone_gain_set(codec, 0); in ca0132_alt_select_out_quirk_handler()
4190 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4193 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4194 r3di_gpio_out_set(codec, R3DI_LINE_OUT); in ca0132_alt_select_out_quirk_handler()
4197 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4198 ca0113_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out_quirk_handler()
4201 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_handler()
4202 ae5_headphone_gain_set(codec, 2); in ca0132_alt_select_out_quirk_handler()
4204 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ca0132_alt_select_out_quirk_handler()
4205 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ca0132_alt_select_out_quirk_handler()
4206 chipio_set_control_param(codec, 0x0d, 0xa4); in ca0132_alt_select_out_quirk_handler()
4207 chipio_write(codec, 0x18b03c, 0x00000012); in ca0132_alt_select_out_quirk_handler()
4216 ca0113_mmio_gpio_set(codec, 7, true); in ca0132_alt_select_out_quirk_handler()
4217 ca0113_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out_quirk_handler()
4218 ca0113_mmio_gpio_set(codec, 1, false); in ca0132_alt_select_out_quirk_handler()
4219 chipio_set_control_param(codec, 0x0d, 0x12); in ca0132_alt_select_out_quirk_handler()
4222 ca0113_mmio_gpio_set(codec, 2, false); in ca0132_alt_select_out_quirk_handler()
4223 ca0113_mmio_gpio_set(codec, 3, false); in ca0132_alt_select_out_quirk_handler()
4224 ca0113_mmio_gpio_set(codec, 5, true); in ca0132_alt_select_out_quirk_handler()
4225 zxr_headphone_gain_set(codec, spec->zxr_gain_set); in ca0132_alt_select_out_quirk_handler()
4226 chipio_set_control_param(codec, 0x0d, 0x21); in ca0132_alt_select_out_quirk_handler()
4229 chipio_set_control_param(codec, 0x0d, 0x21); in ca0132_alt_select_out_quirk_handler()
4230 r3di_gpio_out_set(codec, R3DI_HEADPHONE_OUT); in ca0132_alt_select_out_quirk_handler()
4233 chipio_set_control_param(codec, 0x0d, 0x21); in ca0132_alt_select_out_quirk_handler()
4234 ca0113_mmio_gpio_set(codec, 0x1, false); in ca0132_alt_select_out_quirk_handler()
4237 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_handler()
4238 ae5_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_handler()
4241 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ca0132_alt_select_out_quirk_handler()
4242 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ca0132_alt_select_out_quirk_handler()
4243 chipio_set_control_param(codec, 0x0d, 0xa1); in ca0132_alt_select_out_quirk_handler()
4244 chipio_write(codec, 0x18b03c, 0x00000012); in ca0132_alt_select_out_quirk_handler()
4253 ca0113_mmio_gpio_set(codec, 7, false); in ca0132_alt_select_out_quirk_handler()
4254 ca0113_mmio_gpio_set(codec, 4, true); in ca0132_alt_select_out_quirk_handler()
4255 ca0113_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out_quirk_handler()
4256 chipio_set_control_param(codec, 0x0d, 0x18); in ca0132_alt_select_out_quirk_handler()
4259 ca0113_mmio_gpio_set(codec, 2, true); in ca0132_alt_select_out_quirk_handler()
4260 ca0113_mmio_gpio_set(codec, 3, true); in ca0132_alt_select_out_quirk_handler()
4261 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_out_quirk_handler()
4262 zxr_headphone_gain_set(codec, 0); in ca0132_alt_select_out_quirk_handler()
4263 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4266 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4267 r3di_gpio_out_set(codec, R3DI_LINE_OUT); in ca0132_alt_select_out_quirk_handler()
4270 ca0113_mmio_gpio_set(codec, 1, true); in ca0132_alt_select_out_quirk_handler()
4271 chipio_set_control_param(codec, 0x0d, 0x24); in ca0132_alt_select_out_quirk_handler()
4274 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_handler()
4275 ae5_headphone_gain_set(codec, 2); in ca0132_alt_select_out_quirk_handler()
4277 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ca0132_alt_select_out_quirk_handler()
4278 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ca0132_alt_select_out_quirk_handler()
4279 chipio_set_control_param(codec, 0x0d, 0xa4); in ca0132_alt_select_out_quirk_handler()
4280 chipio_write(codec, 0x18b03c, 0x00000012); in ca0132_alt_select_out_quirk_handler()
4299 static int ca0132_alt_select_out(struct hda_codec *codec) in ca0132_alt_select_out() argument
4301 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out()
4311 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_out()
4313 snd_hda_power_up_pm(codec); in ca0132_alt_select_out()
4323 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || in ca0132_alt_select_out()
4324 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); in ca0132_alt_select_out()
4335 err = dspio_set_uint_param(codec, 0x96, 0x3A, tmp); in ca0132_alt_select_out()
4339 ca0132_alt_select_out_quirk_handler(codec); in ca0132_alt_select_out()
4343 codec_dbg(codec, "%s speaker\n", __func__); in ca0132_alt_select_out()
4346 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_alt_select_out()
4348 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_alt_select_out()
4351 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4353 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4356 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4361 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4363 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_EIGHT); in ca0132_alt_select_out()
4366 codec_dbg(codec, "%s hp\n", __func__); in ca0132_alt_select_out()
4368 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4372 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4374 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4379 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) in ca0132_alt_select_out()
4381 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) in ca0132_alt_select_out()
4384 pin_ctl = snd_hda_codec_read(codec, headphone_nid, 0, in ca0132_alt_select_out()
4386 snd_hda_set_pin_ctl(codec, headphone_nid, in ca0132_alt_select_out()
4390 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4392 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); in ca0132_alt_select_out()
4395 codec_dbg(codec, "%s surround\n", __func__); in ca0132_alt_select_out()
4398 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4400 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_alt_select_out()
4403 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_alt_select_out()
4405 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_alt_select_out()
4408 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4411 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[2], 0, in ca0132_alt_select_out()
4413 snd_hda_set_pin_ctl(codec, spec->out_pins[2], in ca0132_alt_select_out()
4416 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[3], 0, in ca0132_alt_select_out()
4418 snd_hda_set_pin_ctl(codec, spec->out_pins[3], in ca0132_alt_select_out()
4421 dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_EIGHT); in ca0132_alt_select_out()
4432 ca0132_effects_set(codec, X_BASS, in ca0132_alt_select_out()
4437 err = dspio_set_uint_param(codec, in ca0132_alt_select_out()
4447 snd_hda_power_down_pm(codec); in ca0132_alt_select_out()
4459 ca0132_alt_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4461 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4463 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
4466 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
4470 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
4471 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
4472 static void resume_mic1(struct hda_codec *codec, unsigned int oldval);
4473 static int stop_mic1(struct hda_codec *codec);
4474 static int ca0132_cvoice_switch_set(struct hda_codec *codec);
4475 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val);
4480 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
4482 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
4491 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
4492 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
4493 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
4498 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4500 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4502 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
4503 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
4508 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4510 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4512 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
4518 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) in ca0132_alt_set_vipsource() argument
4520 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_vipsource()
4526 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_set_vipsource()
4528 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_set_vipsource()
4529 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_set_vipsource()
4534 codec_dbg(codec, "%s: off.", __func__); in ca0132_alt_set_vipsource()
4535 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_alt_set_vipsource()
4538 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4540 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_set_vipsource()
4541 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_set_vipsource()
4543 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_set_vipsource()
4555 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4558 codec_dbg(codec, "%s: on.", __func__); in ca0132_alt_set_vipsource()
4559 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_alt_set_vipsource()
4560 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_alt_set_vipsource()
4562 chipio_set_conn_rate(codec, 0x0F, SR_16_000); in ca0132_alt_set_vipsource()
4568 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4571 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4574 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_alt_set_vipsource()
4577 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_set_vipsource()
4578 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_set_vipsource()
4589 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
4591 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
4595 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
4597 snd_hda_power_up_pm(codec); in ca0132_select_mic()
4602 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
4614 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
4615 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
4616 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
4618 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
4623 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
4624 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
4625 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
4627 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
4630 snd_hda_power_down_pm(codec); in ca0132_select_mic()
4641 static int ca0132_alt_select_in(struct hda_codec *codec) in ca0132_alt_select_in() argument
4643 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_in()
4646 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_in()
4648 snd_hda_power_up_pm(codec); in ca0132_alt_select_in()
4650 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_select_in()
4651 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_select_in()
4660 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
4667 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
4671 ca0113_mmio_command_set(codec, 0x48, 0x28, 0x00); in ca0132_alt_select_in()
4679 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4680 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4682 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4684 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4686 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4687 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4690 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4691 chipio_write(codec, 0x18B09C, 0x0000000C); in ca0132_alt_select_in()
4694 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4695 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
4698 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4699 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
4704 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
4707 ca0132_mic_boost_set(codec, 0); in ca0132_alt_select_in()
4711 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
4714 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
4717 ca0113_mmio_command_set(codec, 0x48, 0x28, 0x00); in ca0132_alt_select_in()
4723 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4724 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4726 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4729 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4734 chipio_write(codec, 0x18B098, 0x00000000); in ca0132_alt_select_in()
4735 chipio_write(codec, 0x18B09C, 0x00000000); in ca0132_alt_select_in()
4740 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4741 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4747 ca0113_mmio_gpio_set(codec, 0, true); in ca0132_alt_select_in()
4748 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_in()
4752 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); in ca0132_alt_select_in()
4756 ca0113_mmio_command_set(codec, 0x48, 0x28, 0x3f); in ca0132_alt_select_in()
4764 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
4765 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
4767 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
4769 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
4771 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
4772 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
4776 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4777 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
4780 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
4781 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
4786 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
4789 ca0132_cvoice_switch_set(codec); in ca0132_alt_select_in()
4791 snd_hda_power_down_pm(codec); in ca0132_alt_select_in()
4798 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
4802 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
4826 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
4828 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
4839 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
4848 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
4850 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
4891 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_effects_set()
4910 dspio_set_uint_param(codec, 0x47, 0x00, tmp); in ca0132_effects_set()
4919 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
4923 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
4935 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
4937 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
4941 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
4945 ca0132_alt_select_out(codec); in ca0132_pe_switch_set()
4951 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
4957 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
4959 struct ca0132_spec *spec = codec->spec; in stop_mic1()
4960 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
4963 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
4970 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
4972 struct ca0132_spec *spec = codec->spec; in resume_mic1()
4975 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
4983 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
4985 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
4990 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
4997 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
5000 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
5003 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
5005 ret |= ca0132_alt_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5007 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5008 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
5012 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
5014 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
5018 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5021 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5027 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) in ca0132_alt_mic_boost_set() argument
5029 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_set()
5032 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_alt_mic_boost_set()
5037 static int ae5_headphone_gain_set(struct hda_codec *codec, long val) in ae5_headphone_gain_set() argument
5042 ca0113_mmio_command_set(codec, 0x48, 0x11 + i, in ae5_headphone_gain_set()
5051 static int zxr_headphone_gain_set(struct hda_codec *codec, long val) in zxr_headphone_gain_set() argument
5053 ca0113_mmio_gpio_set(codec, 1, val); in zxr_headphone_gain_set()
5061 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
5066 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
5074 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5076 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5085 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5091 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5093 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5098 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5103 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
5109 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
5115 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
5129 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_slider_ctl_set() argument
5143 snd_hda_power_up(codec); in ca0132_alt_slider_ctl_set()
5149 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5158 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5163 snd_hda_power_down(codec); in ca0132_alt_slider_ctl_set()
5171 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_ctl_get() local
5172 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_ctl_get()
5182 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_slider_ctl_get() local
5183 struct ca0132_spec *spec = codec->spec; in ca0132_alt_slider_ctl_get()
5225 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_put() local
5226 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_put()
5238 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); in ca0132_alt_xbass_xover_slider_put()
5246 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_effect_slider_put() local
5247 struct ca0132_spec *spec = codec->spec; in ca0132_alt_effect_slider_put()
5260 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); in ca0132_alt_effect_slider_put()
5293 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_get() local
5294 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_get()
5303 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_put() local
5304 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_put()
5311 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", in ca0132_alt_mic_boost_put()
5317 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_mic_boost_put()
5347 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_get() local
5348 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_get()
5357 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_put() local
5358 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_put()
5365 codec_dbg(codec, "ae5_headphone_gain: boost=%d\n", in ae5_headphone_gain_put()
5371 ae5_headphone_gain_set(codec, spec->ae5_headphone_gain_val); in ae5_headphone_gain_put()
5400 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_get() local
5401 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_get()
5410 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_put() local
5411 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_put()
5418 codec_dbg(codec, "ae5_sound_filter: %s\n", in ae5_sound_filter_put()
5423 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, in ae5_sound_filter_put()
5450 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_get() local
5451 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_get()
5460 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_put() local
5461 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_put()
5468 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", in ca0132_alt_input_source_put()
5473 ca0132_alt_select_in(codec); in ca0132_alt_input_source_put()
5495 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_get() local
5496 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_get()
5505 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_put() local
5506 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_put()
5514 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", in ca0132_alt_output_select_put()
5522 ca0132_alt_select_out(codec); in ca0132_alt_output_select_put()
5551 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_get() local
5552 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_get()
5561 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_put() local
5562 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_put()
5571 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", in ca0132_alt_svm_setting_put()
5591 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_alt_svm_setting_put()
5615 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_get() local
5616 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_get()
5625 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_put() local
5626 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_put()
5634 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, in ca0132_alt_eq_preset_put()
5641 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, in ca0132_alt_eq_preset_put()
5672 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
5673 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
5682 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
5683 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
5690 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
5698 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
5708 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
5717 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
5718 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
5754 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
5755 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
5761 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
5764 snd_hda_power_up(codec); in ca0132_switch_put()
5782 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
5789 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
5797 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
5806 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
5810 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
5819 changed = zxr_headphone_gain_set(codec, *valp); in ca0132_switch_put()
5827 snd_hda_power_down(codec); in ca0132_switch_put()
5839 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) in ca0132_alt_dsp_volume_put() argument
5841 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_volume_put()
5852 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5859 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5864 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
5872 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
5873 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
5884 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
5889 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
5894 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
5899 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
5910 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
5911 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
5931 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
5932 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
5951 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
5956 snd_hda_power_up(codec); in ca0132_volume_put()
5957 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
5963 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
5964 snd_hda_power_down(codec); in ca0132_volume_put()
5978 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_volume_put() local
5979 struct ca0132_spec *spec = codec->spec; in ca0132_alt_volume_put()
6005 snd_hda_power_up(codec); in ca0132_alt_volume_put()
6006 ca0132_alt_dsp_volume_put(codec, vnid); in ca0132_alt_volume_put()
6007 mutex_lock(&codec->control_mutex); in ca0132_alt_volume_put()
6009 mutex_unlock(&codec->control_mutex); in ca0132_alt_volume_put()
6010 snd_hda_power_down(codec); in ca0132_alt_volume_put()
6018 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
6019 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
6030 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6035 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6040 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6045 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6054 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_add_effect_slider() argument
6081 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in ca0132_alt_add_effect_slider()
6089 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
6092 struct ca0132_spec *spec = codec->spec; in add_fx_switch()
6105 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
6108 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
6116 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
6120 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) in add_ca0132_alt_eq_presets() argument
6128 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, in add_ca0132_alt_eq_presets()
6129 snd_ctl_new1(&knew, codec)); in add_ca0132_alt_eq_presets()
6137 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) in ca0132_alt_add_svm_enum() argument
6145 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, in ca0132_alt_add_svm_enum()
6146 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_svm_enum()
6154 static int ca0132_alt_add_output_enum(struct hda_codec *codec) in ca0132_alt_add_output_enum() argument
6162 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, in ca0132_alt_add_output_enum()
6163 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_output_enum()
6171 static int ca0132_alt_add_input_enum(struct hda_codec *codec) in ca0132_alt_add_input_enum() argument
6179 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, in ca0132_alt_add_input_enum()
6180 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_input_enum()
6187 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) in ca0132_alt_add_mic_boost_enum() argument
6195 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, in ca0132_alt_add_mic_boost_enum()
6196 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_mic_boost_enum()
6205 static int ae5_add_headphone_gain_enum(struct hda_codec *codec) in ae5_add_headphone_gain_enum() argument
6213 return snd_hda_ctl_add(codec, AE5_HEADPHONE_GAIN_ENUM, in ae5_add_headphone_gain_enum()
6214 snd_ctl_new1(&knew, codec)); in ae5_add_headphone_gain_enum()
6222 static int ae5_add_sound_filter_enum(struct hda_codec *codec) in ae5_add_sound_filter_enum() argument
6230 return snd_hda_ctl_add(codec, AE5_SOUND_FILTER_ENUM, in ae5_add_sound_filter_enum()
6231 snd_ctl_new1(&knew, codec)); in ae5_add_sound_filter_enum()
6234 static int zxr_add_headphone_gain_switch(struct hda_codec *codec) in zxr_add_headphone_gain_switch() argument
6240 return snd_hda_ctl_add(codec, ZXR_HEADPHONE_GAIN, in zxr_add_headphone_gain_switch()
6241 snd_ctl_new1(&knew, codec)); in zxr_add_headphone_gain_switch()
6271 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) in ca0132_alt_add_chmap_ctls() argument
6276 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in ca0132_alt_add_chmap_ctls()
6288 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); in ca0132_alt_add_chmap_ctls()
6364 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
6366 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
6372 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
6378 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, in ca0132_build_controls()
6380 snd_hda_add_vmaster(codec, "Master Playback Volume", in ca0132_build_controls()
6383 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", in ca0132_build_controls()
6403 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
6410 * If codec has use_alt_controls set to true, add effect level sliders, in ca0132_build_controls()
6415 err = ca0132_alt_add_svm_enum(codec); in ca0132_build_controls()
6419 err = add_ca0132_alt_eq_presets(codec); in ca0132_build_controls()
6423 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
6428 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
6435 err = ca0132_alt_add_effect_slider(codec, in ca0132_build_controls()
6443 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, in ca0132_build_controls()
6449 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
6454 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
6459 err = add_voicefx(codec); in ca0132_build_controls()
6464 * If the codec uses alt_functions, you need the enumerated controls in ca0132_build_controls()
6469 err = ca0132_alt_add_output_enum(codec); in ca0132_build_controls()
6472 err = ca0132_alt_add_mic_boost_enum(codec); in ca0132_build_controls()
6480 err = ca0132_alt_add_input_enum(codec); in ca0132_build_controls()
6487 err = ae5_add_headphone_gain_enum(codec); in ca0132_build_controls()
6490 err = ae5_add_sound_filter_enum(codec); in ca0132_build_controls()
6496 err = zxr_add_headphone_gain_switch(codec); in ca0132_build_controls()
6501 add_tuning_ctls(codec); in ca0132_build_controls()
6504 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
6509 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
6513 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
6520 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
6526 ca0132_alt_add_chmap_ctls(codec); in ca0132_build_controls()
6531 static int dbpro_build_controls(struct hda_codec *codec) in dbpro_build_controls() argument
6533 struct ca0132_spec *spec = codec->spec; in dbpro_build_controls()
6537 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in dbpro_build_controls()
6544 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in dbpro_build_controls()
6595 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
6597 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
6600 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
6618 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
6627 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
6637 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
6655 static int dbpro_build_pcms(struct hda_codec *codec) in dbpro_build_pcms() argument
6657 struct ca0132_spec *spec = codec->spec; in dbpro_build_pcms()
6660 info = snd_hda_codec_pcm_new(codec, "CA0132 Alt Analog"); in dbpro_build_pcms()
6671 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in dbpro_build_pcms()
6689 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
6692 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
6693 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
6694 snd_hda_codec_write(codec, pin, 0, in init_output()
6698 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
6699 snd_hda_codec_write(codec, dac, 0, in init_output()
6703 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
6706 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
6707 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
6708 snd_hda_codec_write(codec, pin, 0, in init_input()
6712 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
6713 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
6717 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
6719 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
6724 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
6728 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
6730 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
6736 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
6738 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
6743 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
6745 oldval = stop_mic1(codec); in ca0132_set_dmic()
6746 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
6750 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
6754 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
6758 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
6762 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
6767 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
6771 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
6773 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
6774 resume_mic1(codec, oldval); in ca0132_set_dmic()
6780 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
6782 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
6795 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6805 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6821 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
6828 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
6830 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
6833 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6835 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6837 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6839 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6841 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6843 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
6848 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
6850 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
6853 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
6854 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
6857 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
6860 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
6863 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
6864 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
6872 static void ca0132_alt_create_dummy_stream(struct hda_codec *codec) in ca0132_alt_create_dummy_stream() argument
6874 struct ca0132_spec *spec = codec->spec; in ca0132_alt_create_dummy_stream()
6880 snd_hda_codec_setup_stream(codec, spec->dacs[0], spec->dsp_stream_id, in ca0132_alt_create_dummy_stream()
6883 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_alt_create_dummy_stream()
6889 static void ca0132_alt_init_analog_mics(struct hda_codec *codec) in ca0132_alt_init_analog_mics() argument
6891 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_analog_mics()
6895 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_init_analog_mics()
6896 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_init_analog_mics()
6898 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
6902 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_init_analog_mics()
6905 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in ca0132_alt_init_analog_mics()
6906 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in ca0132_alt_init_analog_mics()
6908 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
6910 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_alt_init_analog_mics()
6919 static void sbz_connect_streams(struct hda_codec *codec) in sbz_connect_streams() argument
6921 struct ca0132_spec *spec = codec->spec; in sbz_connect_streams()
6925 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); in sbz_connect_streams()
6927 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_connect_streams()
6928 chipio_set_stream_control(codec, 0x0C, 1); in sbz_connect_streams()
6931 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); in sbz_connect_streams()
6934 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); in sbz_connect_streams()
6935 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); in sbz_connect_streams()
6936 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); in sbz_connect_streams()
6937 chipio_set_stream_channels(codec, 0x14, 2); in sbz_connect_streams()
6938 chipio_set_stream_control(codec, 0x14, 1); in sbz_connect_streams()
6940 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); in sbz_connect_streams()
6951 static void sbz_chipio_startup_data(struct hda_codec *codec) in sbz_chipio_startup_data() argument
6953 struct ca0132_spec *spec = codec->spec; in sbz_chipio_startup_data()
6956 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); in sbz_chipio_startup_data()
6959 chipio_write_no_mutex(codec, 0x190060, 0x0001f8c0); in sbz_chipio_startup_data()
6960 chipio_write_no_mutex(codec, 0x190064, 0x0001f9c1); in sbz_chipio_startup_data()
6961 chipio_write_no_mutex(codec, 0x190068, 0x0001fac6); in sbz_chipio_startup_data()
6962 chipio_write_no_mutex(codec, 0x19006c, 0x0001fbc7); in sbz_chipio_startup_data()
6964 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
6966 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_chipio_startup_data()
6967 chipio_set_stream_control(codec, 0x0C, 1); in sbz_chipio_startup_data()
6970 chipio_write_no_mutex(codec, 0x190030, 0x0001e0c0); in sbz_chipio_startup_data()
6971 chipio_write_no_mutex(codec, 0x190034, 0x0001e1c1); in sbz_chipio_startup_data()
6972 chipio_write_no_mutex(codec, 0x190038, 0x0001e4c2); in sbz_chipio_startup_data()
6973 chipio_write_no_mutex(codec, 0x19003c, 0x0001e5c3); in sbz_chipio_startup_data()
6974 chipio_write_no_mutex(codec, 0x190040, 0x0001e2c4); in sbz_chipio_startup_data()
6975 chipio_write_no_mutex(codec, 0x190044, 0x0001e3c5); in sbz_chipio_startup_data()
6976 chipio_write_no_mutex(codec, 0x190048, 0x0001e8c6); in sbz_chipio_startup_data()
6977 chipio_write_no_mutex(codec, 0x19004c, 0x0001e9c7); in sbz_chipio_startup_data()
6978 chipio_write_no_mutex(codec, 0x190050, 0x0001ecc8); in sbz_chipio_startup_data()
6979 chipio_write_no_mutex(codec, 0x190054, 0x0001edc9); in sbz_chipio_startup_data()
6980 chipio_write_no_mutex(codec, 0x190058, 0x0001eaca); in sbz_chipio_startup_data()
6981 chipio_write_no_mutex(codec, 0x19005c, 0x0001ebcb); in sbz_chipio_startup_data()
6983 chipio_write_no_mutex(codec, 0x190038, 0x000140c2); in sbz_chipio_startup_data()
6984 chipio_write_no_mutex(codec, 0x19003c, 0x000141c3); in sbz_chipio_startup_data()
6985 chipio_write_no_mutex(codec, 0x190040, 0x000150c4); in sbz_chipio_startup_data()
6986 chipio_write_no_mutex(codec, 0x190044, 0x000151c5); in sbz_chipio_startup_data()
6987 chipio_write_no_mutex(codec, 0x190050, 0x000142c8); in sbz_chipio_startup_data()
6988 chipio_write_no_mutex(codec, 0x190054, 0x000143c9); in sbz_chipio_startup_data()
6989 chipio_write_no_mutex(codec, 0x190058, 0x000152ca); in sbz_chipio_startup_data()
6990 chipio_write_no_mutex(codec, 0x19005c, 0x000153cb); in sbz_chipio_startup_data()
6992 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
6994 codec_dbg(codec, "Startup Data exited, mutex released.\n"); in sbz_chipio_startup_data()
7002 static void ca0132_alt_dsp_scp_startup(struct hda_codec *codec) in ca0132_alt_dsp_scp_startup() argument
7004 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_scp_startup()
7016 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7018 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in ca0132_alt_dsp_scp_startup()
7020 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in ca0132_alt_dsp_scp_startup()
7022 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7024 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7026 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7031 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in ca0132_alt_dsp_scp_startup()
7033 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in ca0132_alt_dsp_scp_startup()
7035 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7037 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7039 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7048 static void ca0132_alt_dsp_initial_mic_setup(struct hda_codec *codec) in ca0132_alt_dsp_initial_mic_setup() argument
7050 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_initial_mic_setup()
7053 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_dsp_initial_mic_setup()
7054 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_dsp_initial_mic_setup()
7056 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7057 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7060 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_dsp_initial_mic_setup()
7062 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_dsp_initial_mic_setup()
7063 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_dsp_initial_mic_setup()
7067 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7068 chipio_write(codec, 0x18b09C, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7071 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7072 chipio_write(codec, 0x18b09c, 0x0000004c); in ca0132_alt_dsp_initial_mic_setup()
7079 static void ae5_post_dsp_register_set(struct hda_codec *codec) in ae5_post_dsp_register_set() argument
7081 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_register_set()
7083 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_post_dsp_register_set()
7084 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_register_set()
7086 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_register_set()
7102 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x3f); in ae5_post_dsp_register_set()
7103 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_post_dsp_register_set()
7104 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_register_set()
7107 static void ae5_post_dsp_param_setup(struct hda_codec *codec) in ae5_post_dsp_param_setup() argument
7114 chipio_set_control_param(codec, 3, 0); in ae5_post_dsp_param_setup()
7119 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae5_post_dsp_param_setup()
7121 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae5_post_dsp_param_setup()
7122 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_post_dsp_param_setup()
7124 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7126 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7128 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7132 static void ae5_post_dsp_pll_setup(struct hda_codec *codec) in ae5_post_dsp_pll_setup() argument
7134 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7136 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7139 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7141 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7144 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7146 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7149 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7151 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7154 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7156 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7160 static void ae5_post_dsp_stream_setup(struct hda_codec *codec) in ae5_post_dsp_stream_setup() argument
7162 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_stream_setup()
7166 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae5_post_dsp_stream_setup()
7168 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae5_post_dsp_stream_setup()
7170 chipio_set_stream_channels(codec, 0x0C, 6); in ae5_post_dsp_stream_setup()
7171 chipio_set_stream_control(codec, 0x0C, 1); in ae5_post_dsp_stream_setup()
7173 chipio_set_stream_source_dest(codec, 0x5, 0x43, 0x0); in ae5_post_dsp_stream_setup()
7175 chipio_set_stream_source_dest(codec, 0x18, 0x9, 0xd0); in ae5_post_dsp_stream_setup()
7176 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae5_post_dsp_stream_setup()
7177 chipio_set_stream_channels(codec, 0x18, 6); in ae5_post_dsp_stream_setup()
7178 chipio_set_stream_control(codec, 0x18, 1); in ae5_post_dsp_stream_setup()
7180 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae5_post_dsp_stream_setup()
7182 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_stream_setup()
7184 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_stream_setup()
7187 ca0113_mmio_command_set(codec, 0x48, 0x01, 0x80); in ae5_post_dsp_stream_setup()
7192 static void ae5_post_dsp_startup_data(struct hda_codec *codec) in ae5_post_dsp_startup_data() argument
7194 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_startup_data()
7198 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae5_post_dsp_startup_data()
7199 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae5_post_dsp_startup_data()
7200 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae5_post_dsp_startup_data()
7201 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae5_post_dsp_startup_data()
7203 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7204 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae5_post_dsp_startup_data()
7205 ca0113_mmio_command_set(codec, 0x48, 0x0b, 0x12); in ae5_post_dsp_startup_data()
7206 ca0113_mmio_command_set(codec, 0x48, 0x04, 0x00); in ae5_post_dsp_startup_data()
7207 ca0113_mmio_command_set(codec, 0x48, 0x06, 0x48); in ae5_post_dsp_startup_data()
7208 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7209 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_startup_data()
7210 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7211 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7212 ca0113_mmio_gpio_set(codec, 0, true); in ae5_post_dsp_startup_data()
7213 ca0113_mmio_gpio_set(codec, 1, true); in ae5_post_dsp_startup_data()
7214 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x80); in ae5_post_dsp_startup_data()
7216 chipio_write_no_mutex(codec, 0x18b03c, 0x00000012); in ae5_post_dsp_startup_data()
7218 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7219 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7227 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
7229 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
7241 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
7249 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
7252 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
7256 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
7257 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
7261 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
7265 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
7272 static void r3d_setup_defaults(struct hda_codec *codec) in r3d_setup_defaults() argument
7274 struct ca0132_spec *spec = codec->spec; in r3d_setup_defaults()
7282 ca0132_alt_dsp_scp_startup(codec); in r3d_setup_defaults()
7283 ca0132_alt_init_analog_mics(codec); in r3d_setup_defaults()
7287 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in r3d_setup_defaults()
7291 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in r3d_setup_defaults()
7292 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in r3d_setup_defaults()
7295 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in r3d_setup_defaults()
7298 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); in r3d_setup_defaults()
7304 dspio_set_uint_param(codec, in r3d_setup_defaults()
7316 static void sbz_setup_defaults(struct hda_codec *codec) in sbz_setup_defaults() argument
7318 struct ca0132_spec *spec = codec->spec; in sbz_setup_defaults()
7326 ca0132_alt_dsp_scp_startup(codec); in sbz_setup_defaults()
7327 ca0132_alt_init_analog_mics(codec); in sbz_setup_defaults()
7328 sbz_connect_streams(codec); in sbz_setup_defaults()
7329 sbz_chipio_startup_data(codec); in sbz_setup_defaults()
7331 chipio_set_stream_control(codec, 0x03, 1); in sbz_setup_defaults()
7332 chipio_set_stream_control(codec, 0x04, 1); in sbz_setup_defaults()
7339 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in sbz_setup_defaults()
7340 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in sbz_setup_defaults()
7344 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in sbz_setup_defaults()
7348 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in sbz_setup_defaults()
7349 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in sbz_setup_defaults()
7352 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in sbz_setup_defaults()
7354 ca0132_alt_dsp_initial_mic_setup(codec); in sbz_setup_defaults()
7360 dspio_set_uint_param(codec, in sbz_setup_defaults()
7367 ca0132_alt_create_dummy_stream(codec); in sbz_setup_defaults()
7373 static void ae5_setup_defaults(struct hda_codec *codec) in ae5_setup_defaults() argument
7375 struct ca0132_spec *spec = codec->spec; in ae5_setup_defaults()
7383 ca0132_alt_dsp_scp_startup(codec); in ae5_setup_defaults()
7384 ca0132_alt_init_analog_mics(codec); in ae5_setup_defaults()
7385 chipio_set_stream_control(codec, 0x03, 1); in ae5_setup_defaults()
7386 chipio_set_stream_control(codec, 0x04, 1); in ae5_setup_defaults()
7390 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ae5_setup_defaults()
7391 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ae5_setup_defaults()
7392 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae5_setup_defaults()
7393 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae5_setup_defaults()
7395 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_setup_defaults()
7396 ca0113_mmio_gpio_set(codec, 0, false); in ae5_setup_defaults()
7397 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae5_setup_defaults()
7401 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae5_setup_defaults()
7402 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae5_setup_defaults()
7406 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae5_setup_defaults()
7410 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae5_setup_defaults()
7411 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae5_setup_defaults()
7414 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae5_setup_defaults()
7416 ca0132_alt_dsp_initial_mic_setup(codec); in ae5_setup_defaults()
7417 ae5_post_dsp_register_set(codec); in ae5_setup_defaults()
7418 ae5_post_dsp_param_setup(codec); in ae5_setup_defaults()
7419 ae5_post_dsp_pll_setup(codec); in ae5_setup_defaults()
7420 ae5_post_dsp_stream_setup(codec); in ae5_setup_defaults()
7421 ae5_post_dsp_startup_data(codec); in ae5_setup_defaults()
7427 dspio_set_uint_param(codec, in ae5_setup_defaults()
7434 ca0132_alt_create_dummy_stream(codec); in ae5_setup_defaults()
7440 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
7442 struct ca0132_spec *spec = codec->spec; in ca0132_init_flags()
7445 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); in ca0132_init_flags()
7446 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); in ca0132_init_flags()
7447 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); in ca0132_init_flags()
7448 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); in ca0132_init_flags()
7449 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); in ca0132_init_flags()
7450 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
7451 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); in ca0132_init_flags()
7452 chipio_set_control_flag(codec, in ca0132_init_flags()
7454 chipio_set_control_flag(codec, in ca0132_init_flags()
7457 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
7458 chipio_set_control_flag(codec, in ca0132_init_flags()
7460 chipio_set_control_flag(codec, in ca0132_init_flags()
7462 chipio_set_control_flag(codec, in ca0132_init_flags()
7464 chipio_set_control_flag(codec, in ca0132_init_flags()
7466 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
7473 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
7475 struct ca0132_spec *spec = codec->spec; in ca0132_init_params()
7478 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_init_params()
7479 chipio_set_conn_rate(codec, 0x0B, SR_48_000); in ca0132_init_params()
7480 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); in ca0132_init_params()
7481 chipio_set_control_param(codec, 0, 0); in ca0132_init_params()
7482 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_init_params()
7485 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
7486 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
7489 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
7491 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
7492 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
7493 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
7494 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
7495 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
7496 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
7498 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
7499 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
7500 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
7503 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
7506 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp_images()
7519 codec->card->dev) != 0) in ca0132_download_dsp_images()
7520 codec_dbg(codec, "Desktop firmware not found."); in ca0132_download_dsp_images()
7522 codec_dbg(codec, "Desktop firmware selected."); in ca0132_download_dsp_images()
7526 codec->card->dev) != 0) in ca0132_download_dsp_images()
7527 codec_dbg(codec, "Recon3Di alt firmware not detected."); in ca0132_download_dsp_images()
7529 codec_dbg(codec, "Recon3Di firmware selected."); in ca0132_download_dsp_images()
7536 * exists for your particular codec. in ca0132_download_dsp_images()
7539 codec_dbg(codec, "Default firmware selected."); in ca0132_download_dsp_images()
7541 codec->card->dev) != 0) in ca0132_download_dsp_images()
7546 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
7547 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
7551 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
7559 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
7561 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
7570 chipio_enable_clocks(codec); in ca0132_download_dsp()
7574 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
7582 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
7585 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
7588 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
7590 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
7592 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
7596 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
7599 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
7601 struct ca0132_spec *spec = codec->spec; in hp_callback()
7609 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
7614 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
7616 struct ca0132_spec *spec = codec->spec; in amic_callback()
7619 ca0132_alt_select_in(codec); in amic_callback()
7621 ca0132_select_mic(codec); in amic_callback()
7624 static void ca0132_init_unsol(struct hda_codec *codec) in ca0132_init_unsol() argument
7626 struct ca0132_spec *spec = codec->spec; in ca0132_init_unsol()
7627 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_init_unsol()
7628 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_init_unsol()
7630 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_init_unsol()
7634 snd_hda_jack_detect_enable_callback(codec, in ca0132_init_unsol()
7713 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
7715 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
7768 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
7776 static void r3di_gpio_shutdown(struct hda_codec *codec) in r3di_gpio_shutdown() argument
7778 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); in r3di_gpio_shutdown()
7784 static void sbz_region2_exit(struct hda_codec *codec) in sbz_region2_exit() argument
7786 struct ca0132_spec *spec = codec->spec; in sbz_region2_exit()
7794 ca0113_mmio_gpio_set(codec, 0, false); in sbz_region2_exit()
7795 ca0113_mmio_gpio_set(codec, 1, false); in sbz_region2_exit()
7796 ca0113_mmio_gpio_set(codec, 4, true); in sbz_region2_exit()
7797 ca0113_mmio_gpio_set(codec, 5, false); in sbz_region2_exit()
7798 ca0113_mmio_gpio_set(codec, 7, false); in sbz_region2_exit()
7801 static void sbz_set_pin_ctl_default(struct hda_codec *codec) in sbz_set_pin_ctl_default() argument
7806 snd_hda_codec_write(codec, 0x11, 0, in sbz_set_pin_ctl_default()
7810 snd_hda_codec_write(codec, pins[i], 0, in sbz_set_pin_ctl_default()
7814 static void ca0132_clear_unsolicited(struct hda_codec *codec) in ca0132_clear_unsolicited() argument
7820 snd_hda_codec_write(codec, pins[i], 0, in ca0132_clear_unsolicited()
7826 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, in sbz_gpio_shutdown_commands() argument
7830 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
7833 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
7837 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
7841 static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec) in zxr_dbpro_power_state_shutdown() argument
7847 snd_hda_codec_write(codec, pins[i], 0, in zxr_dbpro_power_state_shutdown()
7851 static void sbz_exit_chip(struct hda_codec *codec) in sbz_exit_chip() argument
7853 chipio_set_stream_control(codec, 0x03, 0); in sbz_exit_chip()
7854 chipio_set_stream_control(codec, 0x04, 0); in sbz_exit_chip()
7857 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); in sbz_exit_chip()
7858 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); in sbz_exit_chip()
7859 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); in sbz_exit_chip()
7861 chipio_set_stream_control(codec, 0x14, 0); in sbz_exit_chip()
7862 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
7864 chipio_set_conn_rate(codec, 0x41, SR_192_000); in sbz_exit_chip()
7865 chipio_set_conn_rate(codec, 0x91, SR_192_000); in sbz_exit_chip()
7867 chipio_write(codec, 0x18a020, 0x00000083); in sbz_exit_chip()
7869 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); in sbz_exit_chip()
7870 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); in sbz_exit_chip()
7871 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); in sbz_exit_chip()
7873 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
7875 chipio_set_control_param(codec, 0x0D, 0x24); in sbz_exit_chip()
7877 ca0132_clear_unsolicited(codec); in sbz_exit_chip()
7878 sbz_set_pin_ctl_default(codec); in sbz_exit_chip()
7880 snd_hda_codec_write(codec, 0x0B, 0, in sbz_exit_chip()
7883 sbz_region2_exit(codec); in sbz_exit_chip()
7886 static void r3d_exit_chip(struct hda_codec *codec) in r3d_exit_chip() argument
7888 ca0132_clear_unsolicited(codec); in r3d_exit_chip()
7889 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in r3d_exit_chip()
7890 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); in r3d_exit_chip()
7893 static void ae5_exit_chip(struct hda_codec *codec) in ae5_exit_chip() argument
7895 chipio_set_stream_control(codec, 0x03, 0); in ae5_exit_chip()
7896 chipio_set_stream_control(codec, 0x04, 0); in ae5_exit_chip()
7898 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae5_exit_chip()
7899 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
7900 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
7901 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae5_exit_chip()
7902 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae5_exit_chip()
7903 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x00); in ae5_exit_chip()
7904 ca0113_mmio_gpio_set(codec, 0, false); in ae5_exit_chip()
7905 ca0113_mmio_gpio_set(codec, 1, false); in ae5_exit_chip()
7907 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae5_exit_chip()
7908 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae5_exit_chip()
7910 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_exit_chip()
7912 chipio_set_stream_control(codec, 0x18, 0); in ae5_exit_chip()
7913 chipio_set_stream_control(codec, 0x0c, 0); in ae5_exit_chip()
7915 snd_hda_codec_write(codec, 0x01, 0, 0x724, 0x83); in ae5_exit_chip()
7918 static void zxr_exit_chip(struct hda_codec *codec) in zxr_exit_chip() argument
7920 chipio_set_stream_control(codec, 0x03, 0); in zxr_exit_chip()
7921 chipio_set_stream_control(codec, 0x04, 0); in zxr_exit_chip()
7922 chipio_set_stream_control(codec, 0x14, 0); in zxr_exit_chip()
7923 chipio_set_stream_control(codec, 0x0C, 0); in zxr_exit_chip()
7925 chipio_set_conn_rate(codec, 0x41, SR_192_000); in zxr_exit_chip()
7926 chipio_set_conn_rate(codec, 0x91, SR_192_000); in zxr_exit_chip()
7928 chipio_write(codec, 0x18a020, 0x00000083); in zxr_exit_chip()
7930 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in zxr_exit_chip()
7931 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in zxr_exit_chip()
7933 ca0132_clear_unsolicited(codec); in zxr_exit_chip()
7934 sbz_set_pin_ctl_default(codec); in zxr_exit_chip()
7935 snd_hda_codec_write(codec, 0x0B, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); in zxr_exit_chip()
7937 ca0113_mmio_gpio_set(codec, 5, false); in zxr_exit_chip()
7938 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
7939 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
7940 ca0113_mmio_gpio_set(codec, 0, false); in zxr_exit_chip()
7941 ca0113_mmio_gpio_set(codec, 4, true); in zxr_exit_chip()
7942 ca0113_mmio_gpio_set(codec, 0, true); in zxr_exit_chip()
7943 ca0113_mmio_gpio_set(codec, 5, true); in zxr_exit_chip()
7944 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
7945 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
7948 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
7952 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
7953 dsp_reset(codec); in ca0132_exit_chip()
7964 static void sbz_dsp_startup_check(struct hda_codec *codec) in sbz_dsp_startup_check() argument
7966 struct ca0132_spec *spec = codec->spec; in sbz_dsp_startup_check()
7979 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
7987 codec_dbg(codec, "Startup Check: %d ", failure); in sbz_dsp_startup_check()
7989 codec_info(codec, "DSP not initialized properly. Attempting to fix."); in sbz_dsp_startup_check()
7996 codec_info(codec, "Reloading... Tries left: %d", reload); in sbz_dsp_startup_check()
7997 sbz_exit_chip(codec); in sbz_dsp_startup_check()
7999 codec->patch_ops.init(codec); in sbz_dsp_startup_check()
8002 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
8013 codec_info(codec, "DSP fixed."); in sbz_dsp_startup_check()
8018 …codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to c… in sbz_dsp_startup_check()
8029 static void ca0132_alt_vol_setup(struct hda_codec *codec) in ca0132_alt_vol_setup() argument
8031 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8032 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8033 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8034 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8035 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8036 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8037 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8038 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8044 static void sbz_pre_dsp_setup(struct hda_codec *codec) in sbz_pre_dsp_setup() argument
8046 struct ca0132_spec *spec = codec->spec; in sbz_pre_dsp_setup()
8051 chipio_write(codec, 0x18b0a4, 0x000000c2); in sbz_pre_dsp_setup()
8053 snd_hda_codec_write(codec, 0x11, 0, in sbz_pre_dsp_setup()
8057 static void r3d_pre_dsp_setup(struct hda_codec *codec) in r3d_pre_dsp_setup() argument
8059 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3d_pre_dsp_setup()
8061 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
8063 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
8065 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
8068 snd_hda_codec_write(codec, 0x11, 0, in r3d_pre_dsp_setup()
8072 static void r3di_pre_dsp_setup(struct hda_codec *codec) in r3di_pre_dsp_setup() argument
8074 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3di_pre_dsp_setup()
8076 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8078 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8080 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8083 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8085 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8087 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8089 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
8092 snd_hda_codec_write(codec, 0x11, 0, in r3di_pre_dsp_setup()
8101 static void ca0132_mmio_init(struct hda_codec *codec) in ca0132_mmio_init() argument
8103 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init()
8178 * eventually resets the codec with the 0x7ff verb. Not quite sure why it does
8181 static void ae5_register_set(struct hda_codec *codec) in ae5_register_set() argument
8183 struct ca0132_spec *spec = codec->spec; in ae5_register_set()
8185 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_register_set()
8186 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
8188 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
8204 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_register_set()
8206 chipio_8051_write_direct(codec, 0x90, 0x00); in ae5_register_set()
8207 chipio_8051_write_direct(codec, 0x90, 0x10); in ae5_register_set()
8209 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_register_set()
8211 chipio_write(codec, 0x18b0a4, 0x000000c2); in ae5_register_set()
8213 snd_hda_codec_write(codec, 0x01, 0, 0x7ff, 0x00); in ae5_register_set()
8214 snd_hda_codec_write(codec, 0x01, 0, 0x7ff, 0x00); in ae5_register_set()
8222 static void ca0132_alt_init(struct hda_codec *codec) in ca0132_alt_init() argument
8224 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init()
8226 ca0132_alt_vol_setup(codec); in ca0132_alt_init()
8230 codec_dbg(codec, "SBZ alt_init"); in ca0132_alt_init()
8231 ca0132_gpio_init(codec); in ca0132_alt_init()
8232 sbz_pre_dsp_setup(codec); in ca0132_alt_init()
8233 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
8234 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
8237 codec_dbg(codec, "R3DI alt_init"); in ca0132_alt_init()
8238 ca0132_gpio_init(codec); in ca0132_alt_init()
8239 ca0132_gpio_setup(codec); in ca0132_alt_init()
8240 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); in ca0132_alt_init()
8241 r3di_pre_dsp_setup(codec); in ca0132_alt_init()
8242 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
8243 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); in ca0132_alt_init()
8246 r3d_pre_dsp_setup(codec); in ca0132_alt_init()
8247 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
8248 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
8251 ca0132_gpio_init(codec); in ca0132_alt_init()
8252 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
8254 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
8256 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
8257 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
8258 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
8259 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
8262 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
8263 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
8270 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
8272 struct ca0132_spec *spec = codec->spec; in ca0132_init()
8279 * there's only two reasons for it. One, the codec has awaken from a in ca0132_init()
8288 dsp_loaded = dspload_is_loaded(codec); in ca0132_init()
8294 sbz_dsp_startup_check(codec); in ca0132_init()
8304 ca0132_mmio_init(codec); in ca0132_init()
8306 snd_hda_power_up_pm(codec); in ca0132_init()
8309 ae5_register_set(codec); in ca0132_init()
8311 ca0132_init_unsol(codec); in ca0132_init()
8312 ca0132_init_params(codec); in ca0132_init()
8313 ca0132_init_flags(codec); in ca0132_init()
8315 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
8318 ca0132_alt_init(codec); in ca0132_init()
8320 ca0132_download_dsp(codec); in ca0132_init()
8322 ca0132_refresh_widget_caps(codec); in ca0132_init()
8327 r3d_setup_defaults(codec); in ca0132_init()
8331 sbz_setup_defaults(codec); in ca0132_init()
8334 ae5_setup_defaults(codec); in ca0132_init()
8337 ca0132_setup_defaults(codec); in ca0132_init()
8338 ca0132_init_analog_mic2(codec); in ca0132_init()
8339 ca0132_init_dmic(codec); in ca0132_init()
8344 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
8346 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
8349 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
8351 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
8354 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
8355 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
8357 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
8362 ca0132_gpio_setup(codec); in ca0132_init()
8364 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
8366 ca0132_alt_select_out(codec); in ca0132_init()
8367 ca0132_alt_select_in(codec); in ca0132_init()
8369 ca0132_select_out(codec); in ca0132_init()
8370 ca0132_select_mic(codec); in ca0132_init()
8373 snd_hda_jack_report_sync(codec); in ca0132_init()
8381 ca0132_pe_switch_set(codec); in ca0132_init()
8384 snd_hda_power_down_pm(codec); in ca0132_init()
8389 static int dbpro_init(struct hda_codec *codec) in dbpro_init() argument
8391 struct ca0132_spec *spec = codec->spec; in dbpro_init()
8395 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in dbpro_init()
8396 init_input(codec, cfg->dig_in_pin, spec->dig_in); in dbpro_init()
8399 init_input(codec, spec->input_pins[i], spec->adcs[i]); in dbpro_init()
8404 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
8406 struct ca0132_spec *spec = codec->spec; in ca0132_free()
8409 snd_hda_power_up(codec); in ca0132_free()
8412 sbz_exit_chip(codec); in ca0132_free()
8415 zxr_exit_chip(codec); in ca0132_free()
8418 r3d_exit_chip(codec); in ca0132_free()
8421 ae5_exit_chip(codec); in ca0132_free()
8424 r3di_gpio_shutdown(codec); in ca0132_free()
8430 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
8431 ca0132_exit_chip(codec); in ca0132_free()
8433 snd_hda_power_down(codec); in ca0132_free()
8436 pci_iounmap(codec->bus->pci, spec->mem_base); in ca0132_free()
8439 kfree(codec->spec); in ca0132_free()
8442 static void dbpro_free(struct hda_codec *codec) in dbpro_free() argument
8444 struct ca0132_spec *spec = codec->spec; in dbpro_free()
8446 zxr_dbpro_power_state_shutdown(codec); in dbpro_free()
8449 kfree(codec->spec); in dbpro_free()
8452 static void ca0132_reboot_notify(struct hda_codec *codec) in ca0132_reboot_notify() argument
8454 codec->patch_ops.free(codec); in ca0132_reboot_notify()
8473 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
8475 struct ca0132_spec *spec = codec->spec; in ca0132_config()
8491 codec_dbg(codec, "%s: QUIRK_ALIENWARE applied.\n", __func__); in ca0132_config()
8492 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
8495 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); in ca0132_config()
8496 snd_hda_apply_pincfgs(codec, sbz_pincfgs); in ca0132_config()
8499 codec_dbg(codec, "%s: QUIRK_ZXR applied.\n", __func__); in ca0132_config()
8500 snd_hda_apply_pincfgs(codec, zxr_pincfgs); in ca0132_config()
8503 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); in ca0132_config()
8504 snd_hda_apply_pincfgs(codec, r3d_pincfgs); in ca0132_config()
8507 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); in ca0132_config()
8508 snd_hda_apply_pincfgs(codec, r3di_pincfgs); in ca0132_config()
8511 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__); in ca0132_config()
8512 snd_hda_apply_pincfgs(codec, ae5_pincfgs); in ca0132_config()
8668 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
8672 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
8713 * Sound Blaster Z cards. However, they have different HDA codec subsystem
8717 static void sbz_detect_quirk(struct hda_codec *codec) in sbz_detect_quirk() argument
8719 struct ca0132_spec *spec = codec->spec; in sbz_detect_quirk()
8721 switch (codec->core.subsystem_id) { in sbz_detect_quirk()
8734 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
8740 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
8745 codec->spec = spec; in patch_ca0132()
8746 spec->codec = codec; in patch_ca0132()
8748 /* Detect codec quirk */ in patch_ca0132()
8749 quirk = snd_pci_quirk_lookup(codec->bus->pci, ca0132_quirks); in patch_ca0132()
8755 sbz_detect_quirk(codec); in patch_ca0132()
8758 codec->patch_ops = dbpro_patch_ops; in patch_ca0132()
8760 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
8762 codec->pcm_format_first = 1; in patch_ca0132()
8763 codec->no_sticky_stream = 1; in patch_ca0132()
8773 snd_hda_codec_set_name(codec, "Sound Blaster Z"); in patch_ca0132()
8777 snd_hda_codec_set_name(codec, "Sound Blaster ZxR"); in patch_ca0132()
8783 snd_hda_codec_set_name(codec, "Recon3D"); in patch_ca0132()
8787 snd_hda_codec_set_name(codec, "Recon3Di"); in patch_ca0132()
8791 snd_hda_codec_set_name(codec, "Sound BlasterX AE-5"); in patch_ca0132()
8822 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); in patch_ca0132()
8824 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); in patch_ca0132()
8835 ca0132_init_chip(codec); in patch_ca0132()
8837 ca0132_config(codec); in patch_ca0132()
8839 err = ca0132_prepare_verbs(codec); in patch_ca0132()
8843 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()
8850 ca0132_free(codec); in patch_ca0132()
8864 MODULE_DESCRIPTION("Creative Sound Core3D codec");