• Home
  • Raw
  • Download

Lines Matching full:codec

1101 	struct hda_codec *codec;  member
1477 * CA0132 codec access
1479 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
1483 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
1489 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
1492 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
1496 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
1503 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
1508 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
1517 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
1530 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
1533 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
1540 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
1545 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
1557 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
1559 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
1563 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
1567 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
1581 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
1588 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
1593 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
1602 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
1604 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
1608 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
1612 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
1617 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
1633 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
1636 struct ca0132_spec *spec = codec->spec; in chipio_write()
1642 err = chipio_write_address(codec, chip_addx); in chipio_write()
1646 err = chipio_write_data(codec, data); in chipio_write()
1659 static int chipio_write_no_mutex(struct hda_codec *codec, in chipio_write_no_mutex() argument
1666 err = chipio_write_address(codec, chip_addx); in chipio_write_no_mutex()
1670 err = chipio_write_data(codec, data); in chipio_write_no_mutex()
1682 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
1687 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
1691 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
1695 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
1706 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
1709 struct ca0132_spec *spec = codec->spec; in chipio_read()
1715 err = chipio_write_address(codec, chip_addx); in chipio_read()
1719 err = chipio_read_data(codec, data); in chipio_read()
1731 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1740 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1747 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1750 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1755 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1759 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1760 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1763 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1774 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, in chipio_set_control_param_no_mutex() argument
1781 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1784 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param_no_mutex()
1785 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1788 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1798 static void chipio_set_stream_source_dest(struct hda_codec *codec, in chipio_set_stream_source_dest() argument
1801 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1803 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1805 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1812 static void chipio_set_stream_channels(struct hda_codec *codec, in chipio_set_stream_channels() argument
1815 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1817 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1824 static void chipio_set_stream_control(struct hda_codec *codec, in chipio_set_stream_control() argument
1827 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1829 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1837 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, in chipio_set_conn_rate_no_mutex() argument
1840 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1842 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1849 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1852 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1853 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1862 static void chipio_8051_write_direct(struct hda_codec *codec, in chipio_8051_write_direct() argument
1868 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, verb, addr); in chipio_8051_write_direct()
1874 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
1876 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
1879 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1881 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1883 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1885 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1887 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1889 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1897 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
1905 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
1917 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
1923 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
1935 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
1937 struct ca0132_spec *spec = codec->spec; in dspio_write()
1940 dspio_write_wait(codec); in dspio_write()
1943 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
1948 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
1954 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
1966 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
1977 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
1986 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
1990 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
1994 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
1999 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
2005 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
2019 status = dspio_read(codec, buffer++); in dspio_read_multiple()
2028 status = dspio_read(codec, &dummy); in dspio_read_multiple()
2098 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
2106 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
2110 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
2112 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
2116 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
2123 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
2134 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
2141 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
2180 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
2212 * @codec: the HDA codec
2224 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
2241 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
2246 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
2259 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
2264 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
2283 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
2286 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
2289 codec_dbg(codec, "NULL reply\n"); in dspio_scp()
2296 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
2306 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
2309 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, in dspio_set_param()
2313 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
2316 return dspio_set_param(codec, mod_id, 0x20, req, &data, in dspio_set_uint_param()
2320 static int dspio_set_uint_param_no_source(struct hda_codec *codec, int mod_id, in dspio_set_uint_param_no_source() argument
2323 return dspio_set_param(codec, mod_id, 0x00, req, &data, in dspio_set_uint_param_no_source()
2330 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
2335 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
2336 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_alloc_dma_chan()
2341 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
2346 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
2350 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
2351 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
2359 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
2364 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
2365 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
2367 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_free_dma_chan()
2372 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
2376 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
2384 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
2390 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
2400 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2407 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2419 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
2424 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
2426 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
2431 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
2462 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
2466 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
2472 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
2484 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
2487 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
2491 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
2492 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
2499 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
2506 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
2509 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
2513 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2516 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
2526 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
2528 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2531 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
2534 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
2538 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2541 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
2547 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
2549 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2553 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
2555 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2558 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
2561 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
2563 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2566 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
2569 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
2571 codec_dbg(codec, in dsp_dma_setup_common()
2577 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
2585 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
2603 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
2606 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
2612 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
2616 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
2630 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
2633 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
2636 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
2641 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
2644 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
2647 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
2655 status = chipio_write(codec, in dsp_dma_setup()
2658 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
2661 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
2663 codec_dbg(codec, in dsp_dma_setup()
2668 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
2676 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
2682 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
2685 status = chipio_read(codec, in dsp_dma_start()
2689 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
2692 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
2698 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
2701 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
2704 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
2712 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
2718 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
2721 status = chipio_read(codec, in dsp_dma_stop()
2725 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
2728 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
2733 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
2736 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
2739 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
2747 * @codec: the HDA codec
2755 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
2765 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2773 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2777 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2781 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2785 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2796 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
2800 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2804 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
2808 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2816 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2822 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2825 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2829 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2832 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2837 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2849 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2855 status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2863 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2867 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2869 status = dsp_free_router_ports(codec); in dsp_free_ports()
2871 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2874 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2883 struct hda_codec *codec; member
2895 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
2916 struct hda_codec *codec = dma->codec; in dma_reset() local
2917 struct ca0132_spec *spec = codec->spec; in dma_reset()
2921 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
2923 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
2948 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
2980 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
3031 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
3039 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
3046 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
3048 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
3061 * @codec: the HDA codec
3072 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
3108 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
3109 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3113 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
3122 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
3129 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
3139 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
3152 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
3160 codec_dbg(codec, in dspxfr_one_seg()
3167 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
3181 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
3185 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
3188 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
3195 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
3199 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
3202 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
3203 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
3210 status = chipio_write_multiple(codec, in dspxfr_one_seg()
3219 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3227 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
3235 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
3248 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
3258 * @codec: the HDA codec
3268 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
3275 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
3297 dma_engine->codec = codec; in dspxfr_image()
3298 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
3305 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
3309 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
3313 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
3322 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
3324 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
3331 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
3334 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
3339 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3342 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
3348 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
3352 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
3366 status = dsp_free_ports(codec); in dspxfr_image()
3371 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3376 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
3379 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
3389 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
3391 struct ca0132_spec *spec = codec->spec; in dspload_post_setup()
3392 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
3395 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
3396 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
3399 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
3406 * @codec: the HDA codec
3421 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
3432 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
3449 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
3451 status = dsp_reset(codec); in dspload_image()
3456 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
3457 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
3463 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
3465 dspload_post_setup(codec); in dspload_image()
3466 status = dsp_set_run_state(codec); in dspload_image()
3469 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
3476 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
3481 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
3488 #define dspload_is_loaded(codec) false argument
3491 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
3496 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
3497 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
3503 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
3522 static void ca0113_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, in ca0113_mmio_gpio_set() argument
3525 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_gpio_set()
3542 static void ca0113_mmio_command_set(struct hda_codec *codec, unsigned int group, in ca0113_mmio_command_set() argument
3545 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set()
3581 static void ca0113_mmio_command_set_type2(struct hda_codec *codec, in ca0113_mmio_command_set_type2() argument
3584 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set_type2()
3621 static void ca0132_gpio_init(struct hda_codec *codec) in ca0132_gpio_init() argument
3623 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_init()
3629 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3630 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ca0132_gpio_init()
3631 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); in ca0132_gpio_init()
3634 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3635 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); in ca0132_gpio_init()
3644 static void ca0132_gpio_setup(struct hda_codec *codec) in ca0132_gpio_setup() argument
3646 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_setup()
3650 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3652 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3654 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3656 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3660 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3662 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3664 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3714 static void r3di_gpio_mic_set(struct hda_codec *codec, in r3di_gpio_mic_set() argument
3720 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_mic_set()
3730 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_mic_set()
3734 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, in r3di_gpio_dsp_status_set() argument
3740 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_dsp_status_set()
3745 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3752 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3759 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3767 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
3772 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
3774 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
3780 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
3783 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
3793 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
3799 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
3802 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
3827 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
3830 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
3831 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
3835 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
3840 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
3841 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
3846 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
3849 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
3850 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
3854 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
3857 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
3858 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
3865 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
3870 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
3877 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
3880 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
3885 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
3890 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
3893 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
4103 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
4112 snd_hda_power_up(codec); in tuning_ctl_set()
4113 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, in tuning_ctl_set()
4116 snd_hda_power_down(codec); in tuning_ctl_set()
4124 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
4125 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
4150 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
4151 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
4164 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
4185 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
4186 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
4199 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
4220 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
4221 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
4234 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
4242 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
4279 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
4282 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
4288 err = add_tuning_control(codec, in add_tuning_ctls()
4300 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
4302 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
4322 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
4324 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
4331 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
4333 snd_hda_power_up_pm(codec); in ca0132_select_out()
4338 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
4349 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
4352 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4357 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4362 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4364 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4366 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4368 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4372 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4374 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4377 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4379 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4382 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
4385 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4390 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4395 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4397 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4399 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4401 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4405 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4407 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4410 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4412 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4417 snd_hda_power_down_pm(codec); in ca0132_select_out()
4422 static int ae5_headphone_gain_set(struct hda_codec *codec, long val);
4423 static int zxr_headphone_gain_set(struct hda_codec *codec, long val);
4424 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
4426 static void ae5_mmio_select_out(struct hda_codec *codec) in ae5_mmio_select_out() argument
4428 struct ca0132_spec *spec = codec->spec; in ae5_mmio_select_out()
4438 ca0113_mmio_command_set(codec, out_cmds->group[i], in ae5_mmio_select_out()
4443 static int ca0132_alt_set_full_range_speaker(struct hda_codec *codec) in ca0132_alt_set_full_range_speaker() argument
4445 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_full_range_speaker()
4457 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4464 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4469 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4479 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4488 static int ca0132_alt_surround_set_bass_redirection(struct hda_codec *codec, in ca0132_alt_surround_set_bass_redirection() argument
4491 struct ca0132_spec *spec = codec->spec; in ca0132_alt_surround_set_bass_redirection()
4501 err = dspio_set_uint_param(codec, 0x96, SPEAKER_BASS_REDIRECT, tmp); in ca0132_alt_surround_set_bass_redirection()
4508 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_surround_set_bass_redirection()
4521 static void ca0132_alt_select_out_get_quirk_data(struct hda_codec *codec, in ca0132_alt_select_out_get_quirk_data() argument
4524 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_get_quirk_data()
4537 static int ca0132_alt_select_out_quirk_set(struct hda_codec *codec) in ca0132_alt_select_out_quirk_set() argument
4541 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_quirk_set()
4545 ca0132_alt_select_out_get_quirk_data(codec, &quirk_data); in ca0132_alt_select_out_quirk_set()
4551 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_set()
4554 gpio_data = snd_hda_codec_read(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4562 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4568 ca0113_mmio_gpio_set(codec, out_info->mmio_gpio_pin[i], in ca0132_alt_select_out_quirk_set()
4575 err = dspio_set_uint_param(codec, in ca0132_alt_select_out_quirk_set()
4584 chipio_set_control_param(codec, 0x0d, out_info->dac2port); in ca0132_alt_select_out_quirk_set()
4587 chipio_write(codec, out_info->chipio_write_addr, in ca0132_alt_select_out_quirk_set()
4594 ae5_headphone_gain_set(codec, 2); in ca0132_alt_select_out_quirk_set()
4596 zxr_headphone_gain_set(codec, 0); in ca0132_alt_select_out_quirk_set()
4599 ae5_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4602 zxr_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4610 static void ca0132_set_out_node_pincfg(struct hda_codec *codec, hda_nid_t nid, in ca0132_set_out_node_pincfg() argument
4615 pin_ctl = snd_hda_codec_read(codec, nid, 0, in ca0132_set_out_node_pincfg()
4620 snd_hda_set_pin_ctl(codec, nid, pin_ctl); in ca0132_set_out_node_pincfg()
4631 static int ca0132_alt_select_out(struct hda_codec *codec) in ca0132_alt_select_out() argument
4633 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out()
4641 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_out()
4643 snd_hda_power_up_pm(codec); in ca0132_alt_select_out()
4653 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || in ca0132_alt_select_out()
4654 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); in ca0132_alt_select_out()
4666 err = dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_MUTE, FLOAT_ONE); in ca0132_alt_select_out()
4670 if (ca0132_alt_select_out_quirk_set(codec) < 0) in ca0132_alt_select_out()
4675 codec_dbg(codec, "%s speaker\n", __func__); in ca0132_alt_select_out()
4678 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4682 ca0132_set_out_node_pincfg(codec, spec->out_pins[1], 0, 0); in ca0132_alt_select_out()
4684 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 1, 0); in ca0132_alt_select_out()
4686 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 1, 0); in ca0132_alt_select_out()
4688 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 1, 0); in ca0132_alt_select_out()
4700 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_alt_select_out()
4706 codec_dbg(codec, "%s hp\n", __func__); in ca0132_alt_select_out()
4707 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4711 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 0, 0); in ca0132_alt_select_out()
4712 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 0, 0); in ca0132_alt_select_out()
4713 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 0, 0); in ca0132_alt_select_out()
4716 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) in ca0132_alt_select_out()
4718 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) in ca0132_alt_select_out()
4721 ca0132_set_out_node_pincfg(codec, headphone_nid, 1, 1); in ca0132_alt_select_out()
4724 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4726 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); in ca0132_alt_select_out()
4738 ca0132_effects_set(codec, X_BASS, in ca0132_alt_select_out()
4742 err = dspio_set_uint_param(codec, 0x8f, 0x01, FLOAT_ZERO); in ca0132_alt_select_out()
4750 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4756 err = ca0132_alt_surround_set_bass_redirection(codec, in ca0132_alt_select_out()
4759 err = ca0132_alt_surround_set_bass_redirection(codec, 0); in ca0132_alt_select_out()
4762 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4768 err = ca0132_alt_set_full_range_speaker(codec); in ca0132_alt_select_out()
4774 snd_hda_power_down_pm(codec); in ca0132_alt_select_out()
4786 ca0132_alt_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4788 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4790 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
4793 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
4797 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
4798 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
4799 static void resume_mic1(struct hda_codec *codec, unsigned int oldval);
4800 static int stop_mic1(struct hda_codec *codec);
4801 static int ca0132_cvoice_switch_set(struct hda_codec *codec);
4802 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val);
4807 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
4809 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
4818 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
4819 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
4820 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
4825 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4827 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4829 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
4830 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
4835 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4837 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4839 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
4845 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) in ca0132_alt_set_vipsource() argument
4847 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_vipsource()
4853 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_set_vipsource()
4855 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_set_vipsource()
4856 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_set_vipsource()
4861 codec_dbg(codec, "%s: off.", __func__); in ca0132_alt_set_vipsource()
4862 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_alt_set_vipsource()
4865 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4867 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_set_vipsource()
4868 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_set_vipsource()
4870 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_set_vipsource()
4882 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4885 codec_dbg(codec, "%s: on.", __func__); in ca0132_alt_set_vipsource()
4886 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_alt_set_vipsource()
4887 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_alt_set_vipsource()
4889 chipio_set_conn_rate(codec, 0x0F, SR_16_000); in ca0132_alt_set_vipsource()
4895 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4898 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4901 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_alt_set_vipsource()
4904 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_set_vipsource()
4905 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_set_vipsource()
4916 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
4918 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
4922 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
4924 snd_hda_power_up_pm(codec); in ca0132_select_mic()
4929 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
4941 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
4942 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
4943 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
4945 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
4950 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
4951 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
4952 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
4954 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
4957 snd_hda_power_down_pm(codec); in ca0132_select_mic()
4968 static int ca0132_alt_select_in(struct hda_codec *codec) in ca0132_alt_select_in() argument
4970 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_in()
4973 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_in()
4975 snd_hda_power_up_pm(codec); in ca0132_alt_select_in()
4977 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_select_in()
4978 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_select_in()
4987 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
4994 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
4998 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5002 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5004 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5006 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5008 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5015 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5016 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5018 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5020 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5022 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5023 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5026 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5027 chipio_write(codec, 0x18B09C, 0x0000000C); in ca0132_alt_select_in()
5030 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5031 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5034 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5035 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5040 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5043 ca0132_mic_boost_set(codec, 0); in ca0132_alt_select_in()
5047 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
5050 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
5053 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5056 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5057 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5059 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5061 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5067 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5068 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5070 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5076 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5081 chipio_write(codec, 0x18B098, 0x00000000); in ca0132_alt_select_in()
5082 chipio_write(codec, 0x18B09C, 0x00000000); in ca0132_alt_select_in()
5087 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5088 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5094 ca0113_mmio_gpio_set(codec, 0, true); in ca0132_alt_select_in()
5095 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_in()
5099 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); in ca0132_alt_select_in()
5103 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5111 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5112 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5114 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5116 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5118 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5119 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5123 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5124 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5127 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5128 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5133 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5136 ca0132_cvoice_switch_set(codec); in ca0132_alt_select_in()
5138 snd_hda_power_down_pm(codec); in ca0132_alt_select_in()
5145 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
5149 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
5173 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
5175 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
5186 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
5195 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
5197 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
5242 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_effects_set()
5261 dspio_set_uint_param(codec, 0x47, 0x00, tmp); in ca0132_effects_set()
5270 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
5274 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
5286 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
5288 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
5292 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
5296 ca0132_alt_select_out(codec); in ca0132_pe_switch_set()
5302 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
5308 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
5310 struct ca0132_spec *spec = codec->spec; in stop_mic1()
5311 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
5314 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
5321 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
5323 struct ca0132_spec *spec = codec->spec; in resume_mic1()
5326 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
5334 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
5336 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
5341 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
5348 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
5351 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
5354 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
5356 ret |= ca0132_alt_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5358 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5359 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
5363 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
5365 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
5369 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5372 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5378 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) in ca0132_alt_mic_boost_set() argument
5380 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_set()
5383 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_alt_mic_boost_set()
5388 static int ae5_headphone_gain_set(struct hda_codec *codec, long val) in ae5_headphone_gain_set() argument
5393 ca0113_mmio_command_set(codec, 0x48, 0x11 + i, in ae5_headphone_gain_set()
5402 static int zxr_headphone_gain_set(struct hda_codec *codec, long val) in zxr_headphone_gain_set() argument
5404 ca0113_mmio_gpio_set(codec, 1, val); in zxr_headphone_gain_set()
5412 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
5417 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
5425 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5427 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5436 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5442 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5444 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5449 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5454 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
5460 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
5466 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
5473 static void ca0132_alt_bass_redirection_xover_set(struct hda_codec *codec, in ca0132_alt_bass_redirection_xover_set() argument
5476 snd_hda_power_up(codec); in ca0132_alt_bass_redirection_xover_set()
5478 dspio_set_param(codec, 0x96, 0x20, SPEAKER_BASS_REDIRECT_XOVER_FREQ, in ca0132_alt_bass_redirection_xover_set()
5481 snd_hda_power_down(codec); in ca0132_alt_bass_redirection_xover_set()
5493 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_slider_ctl_set() argument
5507 snd_hda_power_up(codec); in ca0132_alt_slider_ctl_set()
5513 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5522 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5527 snd_hda_power_down(codec); in ca0132_alt_slider_ctl_set()
5535 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_ctl_get() local
5536 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_ctl_get()
5551 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_slider_ctl_get() local
5552 struct ca0132_spec *spec = codec->spec; in ca0132_alt_slider_ctl_get()
5594 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_put() local
5595 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_put()
5614 ca0132_alt_bass_redirection_xover_set(codec, *cur_val); in ca0132_alt_xbass_xover_slider_put()
5616 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); in ca0132_alt_xbass_xover_slider_put()
5624 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_effect_slider_put() local
5625 struct ca0132_spec *spec = codec->spec; in ca0132_alt_effect_slider_put()
5638 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); in ca0132_alt_effect_slider_put()
5671 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_get() local
5672 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_get()
5681 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_put() local
5682 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_put()
5689 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", in ca0132_alt_mic_boost_put()
5695 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_mic_boost_put()
5725 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_get() local
5726 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_get()
5735 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_put() local
5736 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_put()
5743 codec_dbg(codec, "ae5_headphone_gain: boost=%d\n", in ae5_headphone_gain_put()
5749 ae5_headphone_gain_set(codec, spec->ae5_headphone_gain_val); in ae5_headphone_gain_put()
5778 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_get() local
5779 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_get()
5788 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_put() local
5789 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_put()
5796 codec_dbg(codec, "ae5_sound_filter: %s\n", in ae5_sound_filter_put()
5801 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, in ae5_sound_filter_put()
5828 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_get() local
5829 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_get()
5838 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_put() local
5839 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_put()
5853 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", in ca0132_alt_input_source_put()
5858 ca0132_alt_select_in(codec); in ca0132_alt_input_source_put()
5880 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_get() local
5881 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_get()
5890 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_put() local
5891 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_put()
5899 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", in ca0132_alt_output_select_put()
5907 ca0132_alt_select_out(codec); in ca0132_alt_output_select_put()
5931 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_get() local
5932 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_get()
5941 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_put() local
5942 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_put()
5949 codec_dbg(codec, "ca0132_alt_speaker_channels: sel=%d, channels=%s\n", in ca0132_alt_speaker_channel_cfg_put()
5955 ca0132_alt_select_out(codec); in ca0132_alt_speaker_channel_cfg_put()
5984 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_get() local
5985 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_get()
5994 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_put() local
5995 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_put()
6004 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", in ca0132_alt_svm_setting_put()
6024 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_alt_svm_setting_put()
6048 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_get() local
6049 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_get()
6058 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_put() local
6059 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_put()
6067 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, in ca0132_alt_eq_preset_put()
6074 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, in ca0132_alt_eq_preset_put()
6105 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
6106 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
6115 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
6116 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
6123 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
6131 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
6141 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
6150 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
6151 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
6202 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
6203 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
6209 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
6212 snd_hda_power_up(codec); in ca0132_switch_put()
6230 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
6237 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
6245 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
6254 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6258 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6267 changed = zxr_headphone_gain_set(codec, *valp); in ca0132_switch_put()
6277 ca0132_alt_set_full_range_speaker(codec); in ca0132_switch_put()
6285 ca0132_alt_surround_set_bass_redirection(codec, *valp); in ca0132_switch_put()
6291 snd_hda_power_down(codec); in ca0132_switch_put()
6303 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) in ca0132_alt_dsp_volume_put() argument
6305 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_volume_put()
6316 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6323 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6328 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6336 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
6337 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
6348 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
6353 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
6358 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
6363 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
6374 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
6375 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
6395 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
6396 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
6415 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
6420 snd_hda_power_up(codec); in ca0132_volume_put()
6421 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
6427 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
6428 snd_hda_power_down(codec); in ca0132_volume_put()
6442 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_volume_put() local
6443 struct ca0132_spec *spec = codec->spec; in ca0132_alt_volume_put()
6469 snd_hda_power_up(codec); in ca0132_alt_volume_put()
6470 ca0132_alt_dsp_volume_put(codec, vnid); in ca0132_alt_volume_put()
6471 mutex_lock(&codec->control_mutex); in ca0132_alt_volume_put()
6473 mutex_unlock(&codec->control_mutex); in ca0132_alt_volume_put()
6474 snd_hda_power_down(codec); in ca0132_alt_volume_put()
6482 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
6483 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
6494 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6499 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6504 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6509 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6518 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_add_effect_slider() argument
6545 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in ca0132_alt_add_effect_slider()
6553 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
6556 struct ca0132_spec *spec = codec->spec; in add_fx_switch()
6569 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
6572 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
6580 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
6584 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) in add_ca0132_alt_eq_presets() argument
6592 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, in add_ca0132_alt_eq_presets()
6593 snd_ctl_new1(&knew, codec)); in add_ca0132_alt_eq_presets()
6601 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) in ca0132_alt_add_svm_enum() argument
6609 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, in ca0132_alt_add_svm_enum()
6610 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_svm_enum()
6618 static int ca0132_alt_add_output_enum(struct hda_codec *codec) in ca0132_alt_add_output_enum() argument
6626 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, in ca0132_alt_add_output_enum()
6627 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_output_enum()
6635 static int ca0132_alt_add_speaker_channel_cfg_enum(struct hda_codec *codec) in ca0132_alt_add_speaker_channel_cfg_enum() argument
6643 return snd_hda_ctl_add(codec, SPEAKER_CHANNEL_CFG_ENUM, in ca0132_alt_add_speaker_channel_cfg_enum()
6644 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_speaker_channel_cfg_enum()
6652 static int ca0132_alt_add_front_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_front_full_range_switch() argument
6658 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_FRONT, in ca0132_alt_add_front_full_range_switch()
6659 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_front_full_range_switch()
6662 static int ca0132_alt_add_rear_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_rear_full_range_switch() argument
6668 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_REAR, in ca0132_alt_add_rear_full_range_switch()
6669 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_rear_full_range_switch()
6678 static int ca0132_alt_add_bass_redirection_crossover(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_crossover() argument
6690 return snd_hda_ctl_add(codec, BASS_REDIRECTION_XOVER, in ca0132_alt_add_bass_redirection_crossover()
6691 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_crossover()
6694 static int ca0132_alt_add_bass_redirection_switch(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_switch() argument
6701 return snd_hda_ctl_add(codec, BASS_REDIRECTION, in ca0132_alt_add_bass_redirection_switch()
6702 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_switch()
6710 static int ca0132_alt_add_input_enum(struct hda_codec *codec) in ca0132_alt_add_input_enum() argument
6718 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, in ca0132_alt_add_input_enum()
6719 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_input_enum()
6726 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) in ca0132_alt_add_mic_boost_enum() argument
6734 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, in ca0132_alt_add_mic_boost_enum()
6735 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_mic_boost_enum()
6744 static int ae5_add_headphone_gain_enum(struct hda_codec *codec) in ae5_add_headphone_gain_enum() argument
6752 return snd_hda_ctl_add(codec, AE5_HEADPHONE_GAIN_ENUM, in ae5_add_headphone_gain_enum()
6753 snd_ctl_new1(&knew, codec)); in ae5_add_headphone_gain_enum()
6761 static int ae5_add_sound_filter_enum(struct hda_codec *codec) in ae5_add_sound_filter_enum() argument
6769 return snd_hda_ctl_add(codec, AE5_SOUND_FILTER_ENUM, in ae5_add_sound_filter_enum()
6770 snd_ctl_new1(&knew, codec)); in ae5_add_sound_filter_enum()
6773 static int zxr_add_headphone_gain_switch(struct hda_codec *codec) in zxr_add_headphone_gain_switch() argument
6779 return snd_hda_ctl_add(codec, ZXR_HEADPHONE_GAIN, in zxr_add_headphone_gain_switch()
6780 snd_ctl_new1(&knew, codec)); in zxr_add_headphone_gain_switch()
6810 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) in ca0132_alt_add_chmap_ctls() argument
6815 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in ca0132_alt_add_chmap_ctls()
6827 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); in ca0132_alt_add_chmap_ctls()
6903 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
6905 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
6911 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
6917 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, in ca0132_build_controls()
6919 snd_hda_add_vmaster(codec, "Master Playback Volume", in ca0132_build_controls()
6922 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", in ca0132_build_controls()
6942 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
6949 * If codec has use_alt_controls set to true, add effect level sliders, in ca0132_build_controls()
6954 err = ca0132_alt_add_svm_enum(codec); in ca0132_build_controls()
6958 err = add_ca0132_alt_eq_presets(codec); in ca0132_build_controls()
6962 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
6967 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
6974 err = ca0132_alt_add_effect_slider(codec, in ca0132_build_controls()
6982 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, in ca0132_build_controls()
6988 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
6993 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
6998 err = add_voicefx(codec); in ca0132_build_controls()
7003 * If the codec uses alt_functions, you need the enumerated controls in ca0132_build_controls()
7008 err = ca0132_alt_add_output_enum(codec); in ca0132_build_controls()
7011 err = ca0132_alt_add_speaker_channel_cfg_enum(codec); in ca0132_build_controls()
7014 err = ca0132_alt_add_front_full_range_switch(codec); in ca0132_build_controls()
7017 err = ca0132_alt_add_rear_full_range_switch(codec); in ca0132_build_controls()
7020 err = ca0132_alt_add_bass_redirection_crossover(codec); in ca0132_build_controls()
7023 err = ca0132_alt_add_bass_redirection_switch(codec); in ca0132_build_controls()
7026 err = ca0132_alt_add_mic_boost_enum(codec); in ca0132_build_controls()
7034 err = ca0132_alt_add_input_enum(codec); in ca0132_build_controls()
7043 err = ae5_add_headphone_gain_enum(codec); in ca0132_build_controls()
7046 err = ae5_add_sound_filter_enum(codec); in ca0132_build_controls()
7051 err = zxr_add_headphone_gain_switch(codec); in ca0132_build_controls()
7060 add_tuning_ctls(codec); in ca0132_build_controls()
7063 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
7068 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
7072 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
7079 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
7085 ca0132_alt_add_chmap_ctls(codec); in ca0132_build_controls()
7090 static int dbpro_build_controls(struct hda_codec *codec) in dbpro_build_controls() argument
7092 struct ca0132_spec *spec = codec->spec; in dbpro_build_controls()
7096 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in dbpro_build_controls()
7103 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in dbpro_build_controls()
7154 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
7156 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
7159 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
7177 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
7186 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
7196 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
7214 static int dbpro_build_pcms(struct hda_codec *codec) in dbpro_build_pcms() argument
7216 struct ca0132_spec *spec = codec->spec; in dbpro_build_pcms()
7219 info = snd_hda_codec_pcm_new(codec, "CA0132 Alt Analog"); in dbpro_build_pcms()
7230 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in dbpro_build_pcms()
7248 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
7251 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
7252 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
7253 snd_hda_codec_write(codec, pin, 0, in init_output()
7257 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
7258 snd_hda_codec_write(codec, dac, 0, in init_output()
7262 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
7265 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
7266 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
7267 snd_hda_codec_write(codec, pin, 0, in init_input()
7271 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
7272 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
7276 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7278 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7283 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
7287 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
7289 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
7295 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
7297 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
7302 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
7304 oldval = stop_mic1(codec); in ca0132_set_dmic()
7305 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
7309 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7313 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7317 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
7321 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7326 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7330 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
7332 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
7333 resume_mic1(codec, oldval); in ca0132_set_dmic()
7339 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
7341 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
7354 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7364 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7380 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7387 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
7389 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
7392 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7394 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7396 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7398 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7400 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7402 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
7407 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
7409 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
7412 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
7413 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
7416 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7419 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7422 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7423 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7448 static void ca0132_alt_init_speaker_tuning(struct hda_codec *codec) in ca0132_alt_init_speaker_tuning() argument
7450 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_speaker_tuning()
7471 dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_ENABLE_CENTER_EQ, tmp); in ca0132_alt_init_speaker_tuning()
7476 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7481 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7485 dspio_set_uint_param(codec, 0x96, in ca0132_alt_init_speaker_tuning()
7493 static void ca0132_alt_create_dummy_stream(struct hda_codec *codec) in ca0132_alt_create_dummy_stream() argument
7495 struct ca0132_spec *spec = codec->spec; in ca0132_alt_create_dummy_stream()
7501 snd_hda_codec_setup_stream(codec, spec->dacs[0], spec->dsp_stream_id, in ca0132_alt_create_dummy_stream()
7504 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_alt_create_dummy_stream()
7510 static void ca0132_alt_init_analog_mics(struct hda_codec *codec) in ca0132_alt_init_analog_mics() argument
7512 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_analog_mics()
7516 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_init_analog_mics()
7517 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_init_analog_mics()
7519 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7523 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_init_analog_mics()
7526 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in ca0132_alt_init_analog_mics()
7527 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in ca0132_alt_init_analog_mics()
7529 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7531 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_alt_init_analog_mics()
7540 static void sbz_connect_streams(struct hda_codec *codec) in sbz_connect_streams() argument
7542 struct ca0132_spec *spec = codec->spec; in sbz_connect_streams()
7546 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); in sbz_connect_streams()
7548 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_connect_streams()
7549 chipio_set_stream_control(codec, 0x0C, 1); in sbz_connect_streams()
7552 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); in sbz_connect_streams()
7555 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); in sbz_connect_streams()
7556 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); in sbz_connect_streams()
7557 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); in sbz_connect_streams()
7558 chipio_set_stream_channels(codec, 0x14, 2); in sbz_connect_streams()
7559 chipio_set_stream_control(codec, 0x14, 1); in sbz_connect_streams()
7561 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); in sbz_connect_streams()
7572 static void sbz_chipio_startup_data(struct hda_codec *codec) in sbz_chipio_startup_data() argument
7574 struct ca0132_spec *spec = codec->spec; in sbz_chipio_startup_data()
7577 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); in sbz_chipio_startup_data()
7580 chipio_write_no_mutex(codec, 0x190060, 0x0001f8c0); in sbz_chipio_startup_data()
7581 chipio_write_no_mutex(codec, 0x190064, 0x0001f9c1); in sbz_chipio_startup_data()
7582 chipio_write_no_mutex(codec, 0x190068, 0x0001fac6); in sbz_chipio_startup_data()
7583 chipio_write_no_mutex(codec, 0x19006c, 0x0001fbc7); in sbz_chipio_startup_data()
7585 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
7587 chipio_set_stream_channels(codec, 0x0C, 6); in sbz_chipio_startup_data()
7588 chipio_set_stream_control(codec, 0x0C, 1); in sbz_chipio_startup_data()
7591 chipio_write_no_mutex(codec, 0x190030, 0x0001e0c0); in sbz_chipio_startup_data()
7592 chipio_write_no_mutex(codec, 0x190034, 0x0001e1c1); in sbz_chipio_startup_data()
7593 chipio_write_no_mutex(codec, 0x190038, 0x0001e4c2); in sbz_chipio_startup_data()
7594 chipio_write_no_mutex(codec, 0x19003c, 0x0001e5c3); in sbz_chipio_startup_data()
7595 chipio_write_no_mutex(codec, 0x190040, 0x0001e2c4); in sbz_chipio_startup_data()
7596 chipio_write_no_mutex(codec, 0x190044, 0x0001e3c5); in sbz_chipio_startup_data()
7597 chipio_write_no_mutex(codec, 0x190048, 0x0001e8c6); in sbz_chipio_startup_data()
7598 chipio_write_no_mutex(codec, 0x19004c, 0x0001e9c7); in sbz_chipio_startup_data()
7599 chipio_write_no_mutex(codec, 0x190050, 0x0001ecc8); in sbz_chipio_startup_data()
7600 chipio_write_no_mutex(codec, 0x190054, 0x0001edc9); in sbz_chipio_startup_data()
7601 chipio_write_no_mutex(codec, 0x190058, 0x0001eaca); in sbz_chipio_startup_data()
7602 chipio_write_no_mutex(codec, 0x19005c, 0x0001ebcb); in sbz_chipio_startup_data()
7604 chipio_write_no_mutex(codec, 0x190038, 0x000140c2); in sbz_chipio_startup_data()
7605 chipio_write_no_mutex(codec, 0x19003c, 0x000141c3); in sbz_chipio_startup_data()
7606 chipio_write_no_mutex(codec, 0x190040, 0x000150c4); in sbz_chipio_startup_data()
7607 chipio_write_no_mutex(codec, 0x190044, 0x000151c5); in sbz_chipio_startup_data()
7608 chipio_write_no_mutex(codec, 0x190050, 0x000142c8); in sbz_chipio_startup_data()
7609 chipio_write_no_mutex(codec, 0x190054, 0x000143c9); in sbz_chipio_startup_data()
7610 chipio_write_no_mutex(codec, 0x190058, 0x000152ca); in sbz_chipio_startup_data()
7611 chipio_write_no_mutex(codec, 0x19005c, 0x000153cb); in sbz_chipio_startup_data()
7613 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in sbz_chipio_startup_data()
7615 codec_dbg(codec, "Startup Data exited, mutex released.\n"); in sbz_chipio_startup_data()
7623 static void ca0132_alt_dsp_scp_startup(struct hda_codec *codec) in ca0132_alt_dsp_scp_startup() argument
7625 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_scp_startup()
7638 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7640 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in ca0132_alt_dsp_scp_startup()
7642 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in ca0132_alt_dsp_scp_startup()
7644 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7646 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7648 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7653 dspio_set_uint_param_no_source(codec, 0x80, 0x0A, tmp); in ca0132_alt_dsp_scp_startup()
7655 dspio_set_uint_param_no_source(codec, 0x80, 0x0B, tmp); in ca0132_alt_dsp_scp_startup()
7657 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7659 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7661 dspio_set_uint_param_no_source(codec, 0x80, 0x0C, tmp); in ca0132_alt_dsp_scp_startup()
7670 static void ca0132_alt_dsp_initial_mic_setup(struct hda_codec *codec) in ca0132_alt_dsp_initial_mic_setup() argument
7672 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_initial_mic_setup()
7675 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_dsp_initial_mic_setup()
7676 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_dsp_initial_mic_setup()
7678 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7679 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7682 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_dsp_initial_mic_setup()
7684 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_dsp_initial_mic_setup()
7685 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_dsp_initial_mic_setup()
7689 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7690 chipio_write(codec, 0x18b09C, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7693 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7694 chipio_write(codec, 0x18b09c, 0x0000004c); in ca0132_alt_dsp_initial_mic_setup()
7701 static void ae5_post_dsp_register_set(struct hda_codec *codec) in ae5_post_dsp_register_set() argument
7703 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_register_set()
7705 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_post_dsp_register_set()
7706 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_register_set()
7708 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_register_set()
7724 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x3f); in ae5_post_dsp_register_set()
7725 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_post_dsp_register_set()
7726 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_register_set()
7729 static void ae5_post_dsp_param_setup(struct hda_codec *codec) in ae5_post_dsp_param_setup() argument
7736 chipio_set_control_param(codec, 3, 0); in ae5_post_dsp_param_setup()
7741 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae5_post_dsp_param_setup()
7743 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae5_post_dsp_param_setup()
7744 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_post_dsp_param_setup()
7746 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7748 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7750 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_param_setup()
7754 static void ae5_post_dsp_pll_setup(struct hda_codec *codec) in ae5_post_dsp_pll_setup() argument
7756 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7758 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7761 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7763 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7766 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7768 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7771 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7773 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7776 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7778 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_pll_setup()
7782 static void ae5_post_dsp_stream_setup(struct hda_codec *codec) in ae5_post_dsp_stream_setup() argument
7784 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_stream_setup()
7788 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae5_post_dsp_stream_setup()
7790 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae5_post_dsp_stream_setup()
7792 chipio_set_stream_channels(codec, 0x0C, 6); in ae5_post_dsp_stream_setup()
7793 chipio_set_stream_control(codec, 0x0C, 1); in ae5_post_dsp_stream_setup()
7795 chipio_set_stream_source_dest(codec, 0x5, 0x43, 0x0); in ae5_post_dsp_stream_setup()
7797 chipio_set_stream_source_dest(codec, 0x18, 0x9, 0xd0); in ae5_post_dsp_stream_setup()
7798 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae5_post_dsp_stream_setup()
7799 chipio_set_stream_channels(codec, 0x18, 6); in ae5_post_dsp_stream_setup()
7800 chipio_set_stream_control(codec, 0x18, 1); in ae5_post_dsp_stream_setup()
7802 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae5_post_dsp_stream_setup()
7804 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_stream_setup()
7806 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_post_dsp_stream_setup()
7809 ca0113_mmio_command_set(codec, 0x48, 0x01, 0x80); in ae5_post_dsp_stream_setup()
7814 static void ae5_post_dsp_startup_data(struct hda_codec *codec) in ae5_post_dsp_startup_data() argument
7816 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_startup_data()
7820 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae5_post_dsp_startup_data()
7821 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae5_post_dsp_startup_data()
7822 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae5_post_dsp_startup_data()
7823 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae5_post_dsp_startup_data()
7825 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7826 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae5_post_dsp_startup_data()
7827 ca0113_mmio_command_set(codec, 0x48, 0x0b, 0x12); in ae5_post_dsp_startup_data()
7828 ca0113_mmio_command_set(codec, 0x48, 0x04, 0x00); in ae5_post_dsp_startup_data()
7829 ca0113_mmio_command_set(codec, 0x48, 0x06, 0x48); in ae5_post_dsp_startup_data()
7830 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7831 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_startup_data()
7832 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7833 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7834 ca0113_mmio_gpio_set(codec, 0, true); in ae5_post_dsp_startup_data()
7835 ca0113_mmio_gpio_set(codec, 1, true); in ae5_post_dsp_startup_data()
7836 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x80); in ae5_post_dsp_startup_data()
7838 chipio_write_no_mutex(codec, 0x18b03c, 0x00000012); in ae5_post_dsp_startup_data()
7840 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7841 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7851 static void ae7_post_dsp_setup_ports(struct hda_codec *codec) in ae7_post_dsp_setup_ports() argument
7853 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_setup_ports()
7858 chipio_set_stream_channels(codec, 0x0c, 6); in ae7_post_dsp_setup_ports()
7859 chipio_set_stream_control(codec, 0x0c, 1); in ae7_post_dsp_setup_ports()
7864 chipio_write_no_mutex(codec, addr, ae7_port_set_data[i]); in ae7_post_dsp_setup_ports()
7873 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in ae7_post_dsp_setup_ports()
7875 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_post_dsp_setup_ports()
7876 ca0113_mmio_command_set(codec, 0x48, 0x0d, 0x40); in ae7_post_dsp_setup_ports()
7877 ca0113_mmio_command_set(codec, 0x48, 0x17, 0x00); in ae7_post_dsp_setup_ports()
7878 ca0113_mmio_command_set(codec, 0x48, 0x19, 0x00); in ae7_post_dsp_setup_ports()
7879 ca0113_mmio_command_set(codec, 0x48, 0x11, 0xff); in ae7_post_dsp_setup_ports()
7880 ca0113_mmio_command_set(codec, 0x48, 0x12, 0xff); in ae7_post_dsp_setup_ports()
7881 ca0113_mmio_command_set(codec, 0x48, 0x13, 0xff); in ae7_post_dsp_setup_ports()
7882 ca0113_mmio_command_set(codec, 0x48, 0x14, 0x7f); in ae7_post_dsp_setup_ports()
7887 static void ae7_post_dsp_asi_stream_setup(struct hda_codec *codec) in ae7_post_dsp_asi_stream_setup() argument
7889 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_stream_setup()
7893 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae7_post_dsp_asi_stream_setup()
7894 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_post_dsp_asi_stream_setup()
7896 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae7_post_dsp_asi_stream_setup()
7897 chipio_set_stream_channels(codec, 0x0c, 6); in ae7_post_dsp_asi_stream_setup()
7898 chipio_set_stream_control(codec, 0x0c, 1); in ae7_post_dsp_asi_stream_setup()
7900 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_stream_setup()
7901 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_stream_setup()
7903 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_stream_setup()
7904 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_stream_setup()
7905 chipio_set_stream_control(codec, 0x18, 1); in ae7_post_dsp_asi_stream_setup()
7907 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae7_post_dsp_asi_stream_setup()
7912 static void ae7_post_dsp_pll_setup(struct hda_codec *codec) in ae7_post_dsp_pll_setup() argument
7923 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_pll_setup()
7925 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_pll_setup()
7930 static void ae7_post_dsp_asi_setup_ports(struct hda_codec *codec) in ae7_post_dsp_asi_setup_ports() argument
7932 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_setup_ports()
7943 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup_ports()
7945 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup_ports()
7948 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
7949 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
7950 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae7_post_dsp_asi_setup_ports()
7951 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae7_post_dsp_asi_setup_ports()
7953 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
7954 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
7957 ca0113_mmio_command_set(codec, 0x48, target[i], data[i]); in ae7_post_dsp_asi_setup_ports()
7959 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
7960 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
7961 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
7963 chipio_set_stream_source_dest(codec, 0x21, 0x64, 0x56); in ae7_post_dsp_asi_setup_ports()
7964 chipio_set_stream_channels(codec, 0x21, 2); in ae7_post_dsp_asi_setup_ports()
7965 chipio_set_conn_rate_no_mutex(codec, 0x56, SR_8_000); in ae7_post_dsp_asi_setup_ports()
7967 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_post_dsp_asi_setup_ports()
7973 chipio_set_control_param_no_mutex(codec, 0x20, 0x21); in ae7_post_dsp_asi_setup_ports()
7975 chipio_write_no_mutex(codec, 0x18b038, 0x00000088); in ae7_post_dsp_asi_setup_ports()
7986 ca0113_mmio_gpio_set(codec, 0, 1); in ae7_post_dsp_asi_setup_ports()
7987 ca0113_mmio_gpio_set(codec, 1, 1); in ae7_post_dsp_asi_setup_ports()
7989 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
7990 chipio_write_no_mutex(codec, 0x18b03c, 0x00000000); in ae7_post_dsp_asi_setup_ports()
7991 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
7992 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
7994 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_setup_ports()
7995 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_setup_ports()
7997 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_setup_ports()
7998 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_setup_ports()
8004 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
8005 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
8015 static void ae7_post_dsp_asi_setup(struct hda_codec *codec) in ae7_post_dsp_asi_setup() argument
8017 chipio_8051_write_direct(codec, 0x93, 0x10); in ae7_post_dsp_asi_setup()
8019 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8021 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8024 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup()
8025 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_post_dsp_asi_setup()
8027 chipio_set_control_param(codec, 3, 3); in ae7_post_dsp_asi_setup()
8028 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae7_post_dsp_asi_setup()
8030 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae7_post_dsp_asi_setup()
8031 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_post_dsp_asi_setup()
8032 snd_hda_codec_write(codec, 0x17, 0, 0x794, 0x00); in ae7_post_dsp_asi_setup()
8034 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8036 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8038 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8041 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup()
8042 ae7_post_dsp_asi_stream_setup(codec); in ae7_post_dsp_asi_setup()
8044 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8046 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae7_post_dsp_asi_setup()
8049 ae7_post_dsp_asi_setup_ports(codec); in ae7_post_dsp_asi_setup()
8055 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
8057 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
8069 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
8077 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
8080 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
8084 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
8085 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
8089 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
8093 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
8100 static void r3d_setup_defaults(struct hda_codec *codec) in r3d_setup_defaults() argument
8102 struct ca0132_spec *spec = codec->spec; in r3d_setup_defaults()
8110 ca0132_alt_dsp_scp_startup(codec); in r3d_setup_defaults()
8111 ca0132_alt_init_analog_mics(codec); in r3d_setup_defaults()
8115 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in r3d_setup_defaults()
8119 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in r3d_setup_defaults()
8120 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in r3d_setup_defaults()
8123 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in r3d_setup_defaults()
8126 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); in r3d_setup_defaults()
8130 ca0113_mmio_gpio_set(codec, 2, false); in r3d_setup_defaults()
8131 ca0113_mmio_gpio_set(codec, 4, true); in r3d_setup_defaults()
8138 dspio_set_uint_param(codec, in r3d_setup_defaults()
8150 static void sbz_setup_defaults(struct hda_codec *codec) in sbz_setup_defaults() argument
8152 struct ca0132_spec *spec = codec->spec; in sbz_setup_defaults()
8160 ca0132_alt_dsp_scp_startup(codec); in sbz_setup_defaults()
8161 ca0132_alt_init_analog_mics(codec); in sbz_setup_defaults()
8162 sbz_connect_streams(codec); in sbz_setup_defaults()
8163 sbz_chipio_startup_data(codec); in sbz_setup_defaults()
8165 chipio_set_stream_control(codec, 0x03, 1); in sbz_setup_defaults()
8166 chipio_set_stream_control(codec, 0x04, 1); in sbz_setup_defaults()
8173 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in sbz_setup_defaults()
8174 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in sbz_setup_defaults()
8178 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in sbz_setup_defaults()
8182 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in sbz_setup_defaults()
8183 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in sbz_setup_defaults()
8186 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in sbz_setup_defaults()
8188 ca0132_alt_dsp_initial_mic_setup(codec); in sbz_setup_defaults()
8194 dspio_set_uint_param(codec, in sbz_setup_defaults()
8201 ca0132_alt_init_speaker_tuning(codec); in sbz_setup_defaults()
8203 ca0132_alt_create_dummy_stream(codec); in sbz_setup_defaults()
8209 static void ae5_setup_defaults(struct hda_codec *codec) in ae5_setup_defaults() argument
8211 struct ca0132_spec *spec = codec->spec; in ae5_setup_defaults()
8219 ca0132_alt_dsp_scp_startup(codec); in ae5_setup_defaults()
8220 ca0132_alt_init_analog_mics(codec); in ae5_setup_defaults()
8221 chipio_set_stream_control(codec, 0x03, 1); in ae5_setup_defaults()
8222 chipio_set_stream_control(codec, 0x04, 1); in ae5_setup_defaults()
8226 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ae5_setup_defaults()
8227 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ae5_setup_defaults()
8228 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae5_setup_defaults()
8229 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae5_setup_defaults()
8231 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_setup_defaults()
8232 ca0113_mmio_gpio_set(codec, 0, false); in ae5_setup_defaults()
8233 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae5_setup_defaults()
8237 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae5_setup_defaults()
8238 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae5_setup_defaults()
8242 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae5_setup_defaults()
8246 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae5_setup_defaults()
8247 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae5_setup_defaults()
8250 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae5_setup_defaults()
8252 ca0132_alt_dsp_initial_mic_setup(codec); in ae5_setup_defaults()
8253 ae5_post_dsp_register_set(codec); in ae5_setup_defaults()
8254 ae5_post_dsp_param_setup(codec); in ae5_setup_defaults()
8255 ae5_post_dsp_pll_setup(codec); in ae5_setup_defaults()
8256 ae5_post_dsp_stream_setup(codec); in ae5_setup_defaults()
8257 ae5_post_dsp_startup_data(codec); in ae5_setup_defaults()
8263 dspio_set_uint_param(codec, in ae5_setup_defaults()
8270 ca0132_alt_init_speaker_tuning(codec); in ae5_setup_defaults()
8272 ca0132_alt_create_dummy_stream(codec); in ae5_setup_defaults()
8278 static void ae7_setup_defaults(struct hda_codec *codec) in ae7_setup_defaults() argument
8280 struct ca0132_spec *spec = codec->spec; in ae7_setup_defaults()
8288 ca0132_alt_dsp_scp_startup(codec); in ae7_setup_defaults()
8289 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8290 ae7_post_dsp_setup_ports(codec); in ae7_setup_defaults()
8293 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8295 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8298 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_setup_defaults()
8301 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae7_setup_defaults()
8302 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae7_setup_defaults()
8304 ca0113_mmio_gpio_set(codec, 0, false); in ae7_setup_defaults()
8308 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae7_setup_defaults()
8309 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae7_setup_defaults()
8313 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae7_setup_defaults()
8317 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae7_setup_defaults()
8318 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae7_setup_defaults()
8321 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae7_setup_defaults()
8322 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae7_setup_defaults()
8328 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8330 ae7_post_dsp_asi_setup(codec); in ae7_setup_defaults()
8336 ca0113_mmio_gpio_set(codec, 0, true); in ae7_setup_defaults()
8337 ca0113_mmio_gpio_set(codec, 1, true); in ae7_setup_defaults()
8340 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x04); in ae7_setup_defaults()
8341 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x04); in ae7_setup_defaults()
8342 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x80); in ae7_setup_defaults()
8348 dspio_set_uint_param(codec, in ae7_setup_defaults()
8355 ca0132_alt_init_speaker_tuning(codec); in ae7_setup_defaults()
8357 ca0132_alt_create_dummy_stream(codec); in ae7_setup_defaults()
8363 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
8365 struct ca0132_spec *spec = codec->spec; in ca0132_init_flags()
8368 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); in ca0132_init_flags()
8369 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); in ca0132_init_flags()
8370 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); in ca0132_init_flags()
8371 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); in ca0132_init_flags()
8372 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); in ca0132_init_flags()
8373 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8374 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); in ca0132_init_flags()
8375 chipio_set_control_flag(codec, in ca0132_init_flags()
8377 chipio_set_control_flag(codec, in ca0132_init_flags()
8380 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8381 chipio_set_control_flag(codec, in ca0132_init_flags()
8383 chipio_set_control_flag(codec, in ca0132_init_flags()
8385 chipio_set_control_flag(codec, in ca0132_init_flags()
8387 chipio_set_control_flag(codec, in ca0132_init_flags()
8389 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
8396 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
8398 struct ca0132_spec *spec = codec->spec; in ca0132_init_params()
8401 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_init_params()
8402 chipio_set_conn_rate(codec, 0x0B, SR_48_000); in ca0132_init_params()
8403 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); in ca0132_init_params()
8404 chipio_set_control_param(codec, 0, 0); in ca0132_init_params()
8405 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_init_params()
8408 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
8409 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
8412 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
8414 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
8415 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
8416 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
8417 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
8418 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
8419 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
8421 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
8422 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
8423 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
8426 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
8429 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp_images()
8442 codec->card->dev) != 0) in ca0132_download_dsp_images()
8443 codec_dbg(codec, "Desktop firmware not found."); in ca0132_download_dsp_images()
8445 codec_dbg(codec, "Desktop firmware selected."); in ca0132_download_dsp_images()
8449 codec->card->dev) != 0) in ca0132_download_dsp_images()
8450 codec_dbg(codec, "Recon3Di alt firmware not detected."); in ca0132_download_dsp_images()
8452 codec_dbg(codec, "Recon3Di firmware selected."); in ca0132_download_dsp_images()
8459 * exists for your particular codec. in ca0132_download_dsp_images()
8462 codec_dbg(codec, "Default firmware selected."); in ca0132_download_dsp_images()
8464 codec->card->dev) != 0) in ca0132_download_dsp_images()
8469 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
8470 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
8474 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
8482 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
8484 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
8493 chipio_enable_clocks(codec); in ca0132_download_dsp()
8497 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
8505 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
8508 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
8511 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
8513 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
8514 snd_hda_power_up_pm(codec); in ca0132_process_dsp_response()
8516 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
8520 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
8521 snd_hda_power_down_pm(codec); in ca0132_process_dsp_response()
8524 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
8526 struct ca0132_spec *spec = codec->spec; in hp_callback()
8532 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
8538 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
8540 struct ca0132_spec *spec = codec->spec; in amic_callback()
8543 ca0132_alt_select_in(codec); in amic_callback()
8545 ca0132_select_mic(codec); in amic_callback()
8548 static void ca0132_init_unsol(struct hda_codec *codec) in ca0132_init_unsol() argument
8550 struct ca0132_spec *spec = codec->spec; in ca0132_init_unsol()
8551 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_init_unsol()
8552 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_init_unsol()
8554 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_init_unsol()
8558 snd_hda_jack_detect_enable_callback(codec, in ca0132_init_unsol()
8637 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
8639 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
8698 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
8706 static void r3di_gpio_shutdown(struct hda_codec *codec) in r3di_gpio_shutdown() argument
8708 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); in r3di_gpio_shutdown()
8714 static void sbz_region2_exit(struct hda_codec *codec) in sbz_region2_exit() argument
8716 struct ca0132_spec *spec = codec->spec; in sbz_region2_exit()
8724 ca0113_mmio_gpio_set(codec, 0, false); in sbz_region2_exit()
8725 ca0113_mmio_gpio_set(codec, 1, false); in sbz_region2_exit()
8726 ca0113_mmio_gpio_set(codec, 4, true); in sbz_region2_exit()
8727 ca0113_mmio_gpio_set(codec, 5, false); in sbz_region2_exit()
8728 ca0113_mmio_gpio_set(codec, 7, false); in sbz_region2_exit()
8731 static void sbz_set_pin_ctl_default(struct hda_codec *codec) in sbz_set_pin_ctl_default() argument
8736 snd_hda_codec_write(codec, 0x11, 0, in sbz_set_pin_ctl_default()
8740 snd_hda_codec_write(codec, pins[i], 0, in sbz_set_pin_ctl_default()
8744 static void ca0132_clear_unsolicited(struct hda_codec *codec) in ca0132_clear_unsolicited() argument
8750 snd_hda_codec_write(codec, pins[i], 0, in ca0132_clear_unsolicited()
8756 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, in sbz_gpio_shutdown_commands() argument
8760 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8763 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8767 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8771 static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec) in zxr_dbpro_power_state_shutdown() argument
8777 snd_hda_codec_write(codec, pins[i], 0, in zxr_dbpro_power_state_shutdown()
8781 static void sbz_exit_chip(struct hda_codec *codec) in sbz_exit_chip() argument
8783 chipio_set_stream_control(codec, 0x03, 0); in sbz_exit_chip()
8784 chipio_set_stream_control(codec, 0x04, 0); in sbz_exit_chip()
8787 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); in sbz_exit_chip()
8788 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); in sbz_exit_chip()
8789 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); in sbz_exit_chip()
8791 chipio_set_stream_control(codec, 0x14, 0); in sbz_exit_chip()
8792 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8794 chipio_set_conn_rate(codec, 0x41, SR_192_000); in sbz_exit_chip()
8795 chipio_set_conn_rate(codec, 0x91, SR_192_000); in sbz_exit_chip()
8797 chipio_write(codec, 0x18a020, 0x00000083); in sbz_exit_chip()
8799 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); in sbz_exit_chip()
8800 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); in sbz_exit_chip()
8801 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); in sbz_exit_chip()
8803 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8805 chipio_set_control_param(codec, 0x0D, 0x24); in sbz_exit_chip()
8807 ca0132_clear_unsolicited(codec); in sbz_exit_chip()
8808 sbz_set_pin_ctl_default(codec); in sbz_exit_chip()
8810 snd_hda_codec_write(codec, 0x0B, 0, in sbz_exit_chip()
8813 sbz_region2_exit(codec); in sbz_exit_chip()
8816 static void r3d_exit_chip(struct hda_codec *codec) in r3d_exit_chip() argument
8818 ca0132_clear_unsolicited(codec); in r3d_exit_chip()
8819 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in r3d_exit_chip()
8820 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); in r3d_exit_chip()
8823 static void ae5_exit_chip(struct hda_codec *codec) in ae5_exit_chip() argument
8825 chipio_set_stream_control(codec, 0x03, 0); in ae5_exit_chip()
8826 chipio_set_stream_control(codec, 0x04, 0); in ae5_exit_chip()
8828 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae5_exit_chip()
8829 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8830 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8831 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae5_exit_chip()
8832 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae5_exit_chip()
8833 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x00); in ae5_exit_chip()
8834 ca0113_mmio_gpio_set(codec, 0, false); in ae5_exit_chip()
8835 ca0113_mmio_gpio_set(codec, 1, false); in ae5_exit_chip()
8837 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae5_exit_chip()
8838 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae5_exit_chip()
8840 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_exit_chip()
8842 chipio_set_stream_control(codec, 0x18, 0); in ae5_exit_chip()
8843 chipio_set_stream_control(codec, 0x0c, 0); in ae5_exit_chip()
8845 snd_hda_codec_write(codec, 0x01, 0, 0x724, 0x83); in ae5_exit_chip()
8848 static void ae7_exit_chip(struct hda_codec *codec) in ae7_exit_chip() argument
8850 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
8851 chipio_set_stream_source_dest(codec, 0x21, 0xc8, 0xc8); in ae7_exit_chip()
8852 chipio_set_stream_channels(codec, 0x21, 0); in ae7_exit_chip()
8853 chipio_set_control_param(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_exit_chip()
8854 chipio_set_control_param(codec, 0x20, 0x01); in ae7_exit_chip()
8856 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_exit_chip()
8858 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
8859 chipio_set_stream_control(codec, 0x0c, 0); in ae7_exit_chip()
8861 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_exit_chip()
8862 snd_hda_codec_write(codec, 0x15, 0, 0x724, 0x83); in ae7_exit_chip()
8863 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_exit_chip()
8864 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_exit_chip()
8865 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x00); in ae7_exit_chip()
8866 ca0113_mmio_gpio_set(codec, 0, false); in ae7_exit_chip()
8867 ca0113_mmio_gpio_set(codec, 1, false); in ae7_exit_chip()
8868 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae7_exit_chip()
8870 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae7_exit_chip()
8871 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae7_exit_chip()
8874 static void zxr_exit_chip(struct hda_codec *codec) in zxr_exit_chip() argument
8876 chipio_set_stream_control(codec, 0x03, 0); in zxr_exit_chip()
8877 chipio_set_stream_control(codec, 0x04, 0); in zxr_exit_chip()
8878 chipio_set_stream_control(codec, 0x14, 0); in zxr_exit_chip()
8879 chipio_set_stream_control(codec, 0x0C, 0); in zxr_exit_chip()
8881 chipio_set_conn_rate(codec, 0x41, SR_192_000); in zxr_exit_chip()
8882 chipio_set_conn_rate(codec, 0x91, SR_192_000); in zxr_exit_chip()
8884 chipio_write(codec, 0x18a020, 0x00000083); in zxr_exit_chip()
8886 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in zxr_exit_chip()
8887 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in zxr_exit_chip()
8889 ca0132_clear_unsolicited(codec); in zxr_exit_chip()
8890 sbz_set_pin_ctl_default(codec); in zxr_exit_chip()
8891 snd_hda_codec_write(codec, 0x0B, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); in zxr_exit_chip()
8893 ca0113_mmio_gpio_set(codec, 5, false); in zxr_exit_chip()
8894 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
8895 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
8896 ca0113_mmio_gpio_set(codec, 0, false); in zxr_exit_chip()
8897 ca0113_mmio_gpio_set(codec, 4, true); in zxr_exit_chip()
8898 ca0113_mmio_gpio_set(codec, 0, true); in zxr_exit_chip()
8899 ca0113_mmio_gpio_set(codec, 5, true); in zxr_exit_chip()
8900 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
8901 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
8904 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
8908 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
8909 dsp_reset(codec); in ca0132_exit_chip()
8920 static void sbz_dsp_startup_check(struct hda_codec *codec) in sbz_dsp_startup_check() argument
8922 struct ca0132_spec *spec = codec->spec; in sbz_dsp_startup_check()
8935 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
8943 codec_dbg(codec, "Startup Check: %d ", failure); in sbz_dsp_startup_check()
8945 codec_info(codec, "DSP not initialized properly. Attempting to fix."); in sbz_dsp_startup_check()
8952 codec_info(codec, "Reloading... Tries left: %d", reload); in sbz_dsp_startup_check()
8953 sbz_exit_chip(codec); in sbz_dsp_startup_check()
8955 codec->patch_ops.init(codec); in sbz_dsp_startup_check()
8958 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
8969 codec_info(codec, "DSP fixed."); in sbz_dsp_startup_check()
8974 …codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to c… in sbz_dsp_startup_check()
8985 static void ca0132_alt_vol_setup(struct hda_codec *codec) in ca0132_alt_vol_setup() argument
8987 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8988 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8989 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8990 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8991 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8992 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
8993 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
8994 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9000 static void sbz_pre_dsp_setup(struct hda_codec *codec) in sbz_pre_dsp_setup() argument
9002 struct ca0132_spec *spec = codec->spec; in sbz_pre_dsp_setup()
9007 chipio_write(codec, 0x18b0a4, 0x000000c2); in sbz_pre_dsp_setup()
9009 snd_hda_codec_write(codec, 0x11, 0, in sbz_pre_dsp_setup()
9013 static void r3d_pre_dsp_setup(struct hda_codec *codec) in r3d_pre_dsp_setup() argument
9015 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3d_pre_dsp_setup()
9017 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
9019 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
9021 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3d_pre_dsp_setup()
9024 snd_hda_codec_write(codec, 0x11, 0, in r3d_pre_dsp_setup()
9028 static void r3di_pre_dsp_setup(struct hda_codec *codec) in r3di_pre_dsp_setup() argument
9030 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3di_pre_dsp_setup()
9032 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9034 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9036 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9039 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9041 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9043 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9045 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in r3di_pre_dsp_setup()
9048 snd_hda_codec_write(codec, 0x11, 0, in r3di_pre_dsp_setup()
9092 static void ca0132_mmio_init_sbz(struct hda_codec *codec) in ca0132_mmio_init_sbz() argument
9094 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_sbz()
9142 static void ca0132_mmio_init_ae5(struct hda_codec *codec) in ca0132_mmio_init_ae5() argument
9144 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_ae5()
9174 static void ca0132_mmio_init(struct hda_codec *codec) in ca0132_mmio_init() argument
9176 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init()
9182 ca0132_mmio_init_sbz(codec); in ca0132_mmio_init()
9185 ca0132_mmio_init_ae5(codec); in ca0132_mmio_init()
9204 * eventually resets the codec with the 0x7ff verb. Not quite sure why it does
9207 static void ae5_register_set(struct hda_codec *codec) in ae5_register_set() argument
9209 struct ca0132_spec *spec = codec->spec; in ae5_register_set()
9217 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
9219 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
9223 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_register_set()
9224 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
9226 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ae5_register_set()
9255 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9256 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_register_set()
9258 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_register_set()
9261 chipio_8051_write_direct(codec, 0x90, 0x00); in ae5_register_set()
9262 chipio_8051_write_direct(codec, 0x90, 0x10); in ae5_register_set()
9265 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9267 chipio_write(codec, 0x18b0a4, 0x000000c2); in ae5_register_set()
9269 snd_hda_codec_write(codec, 0x01, 0, 0x7ff, 0x00); in ae5_register_set()
9270 snd_hda_codec_write(codec, 0x01, 0, 0x7ff, 0x00); in ae5_register_set()
9278 static void ca0132_alt_init(struct hda_codec *codec) in ca0132_alt_init() argument
9280 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init()
9282 ca0132_alt_vol_setup(codec); in ca0132_alt_init()
9286 codec_dbg(codec, "SBZ alt_init"); in ca0132_alt_init()
9287 ca0132_gpio_init(codec); in ca0132_alt_init()
9288 sbz_pre_dsp_setup(codec); in ca0132_alt_init()
9289 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9290 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9293 codec_dbg(codec, "R3DI alt_init"); in ca0132_alt_init()
9294 ca0132_gpio_init(codec); in ca0132_alt_init()
9295 ca0132_gpio_setup(codec); in ca0132_alt_init()
9296 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); in ca0132_alt_init()
9297 r3di_pre_dsp_setup(codec); in ca0132_alt_init()
9298 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9299 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); in ca0132_alt_init()
9302 r3d_pre_dsp_setup(codec); in ca0132_alt_init()
9303 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9304 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9307 ca0132_gpio_init(codec); in ca0132_alt_init()
9308 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
9310 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
9312 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9313 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9314 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9315 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9318 ca0132_gpio_init(codec); in ca0132_alt_init()
9319 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
9321 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_alt_init()
9323 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9324 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9325 chipio_write(codec, 0x18b008, 0x000000f8); in ca0132_alt_init()
9326 chipio_write(codec, 0x18b008, 0x000000f0); in ca0132_alt_init()
9327 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9328 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9331 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9332 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9339 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
9341 struct ca0132_spec *spec = codec->spec; in ca0132_init()
9348 * there's only two reasons for it. One, the codec has awaken from a in ca0132_init()
9357 dsp_loaded = dspload_is_loaded(codec); in ca0132_init()
9363 sbz_dsp_startup_check(codec); in ca0132_init()
9373 ca0132_mmio_init(codec); in ca0132_init()
9375 snd_hda_power_up_pm(codec); in ca0132_init()
9378 ae5_register_set(codec); in ca0132_init()
9380 ca0132_init_unsol(codec); in ca0132_init()
9381 ca0132_init_params(codec); in ca0132_init()
9382 ca0132_init_flags(codec); in ca0132_init()
9384 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
9387 ca0132_alt_init(codec); in ca0132_init()
9389 ca0132_download_dsp(codec); in ca0132_init()
9391 ca0132_refresh_widget_caps(codec); in ca0132_init()
9396 r3d_setup_defaults(codec); in ca0132_init()
9400 sbz_setup_defaults(codec); in ca0132_init()
9403 ae5_setup_defaults(codec); in ca0132_init()
9406 ae7_setup_defaults(codec); in ca0132_init()
9409 ca0132_setup_defaults(codec); in ca0132_init()
9410 ca0132_init_analog_mic2(codec); in ca0132_init()
9411 ca0132_init_dmic(codec); in ca0132_init()
9416 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
9418 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
9421 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
9423 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
9426 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
9427 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9429 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9434 ca0132_gpio_setup(codec); in ca0132_init()
9436 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
9438 ca0132_alt_select_out(codec); in ca0132_init()
9439 ca0132_alt_select_in(codec); in ca0132_init()
9441 ca0132_select_out(codec); in ca0132_init()
9442 ca0132_select_mic(codec); in ca0132_init()
9445 snd_hda_jack_report_sync(codec); in ca0132_init()
9453 ca0132_pe_switch_set(codec); in ca0132_init()
9456 snd_hda_power_down_pm(codec); in ca0132_init()
9461 static int dbpro_init(struct hda_codec *codec) in dbpro_init() argument
9463 struct ca0132_spec *spec = codec->spec; in dbpro_init()
9467 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in dbpro_init()
9468 init_input(codec, cfg->dig_in_pin, spec->dig_in); in dbpro_init()
9471 init_input(codec, spec->input_pins[i], spec->adcs[i]); in dbpro_init()
9476 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
9478 struct ca0132_spec *spec = codec->spec; in ca0132_free()
9481 snd_hda_power_up(codec); in ca0132_free()
9484 sbz_exit_chip(codec); in ca0132_free()
9487 zxr_exit_chip(codec); in ca0132_free()
9490 r3d_exit_chip(codec); in ca0132_free()
9493 ae5_exit_chip(codec); in ca0132_free()
9496 ae7_exit_chip(codec); in ca0132_free()
9499 r3di_gpio_shutdown(codec); in ca0132_free()
9505 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
9506 ca0132_exit_chip(codec); in ca0132_free()
9508 snd_hda_power_down(codec); in ca0132_free()
9511 pci_iounmap(codec->bus->pci, spec->mem_base); in ca0132_free()
9514 kfree(codec->spec); in ca0132_free()
9517 static void dbpro_free(struct hda_codec *codec) in dbpro_free() argument
9519 struct ca0132_spec *spec = codec->spec; in dbpro_free()
9521 zxr_dbpro_power_state_shutdown(codec); in dbpro_free()
9524 kfree(codec->spec); in dbpro_free()
9527 static void ca0132_reboot_notify(struct hda_codec *codec) in ca0132_reboot_notify() argument
9529 codec->patch_ops.free(codec); in ca0132_reboot_notify()
9533 static int ca0132_suspend(struct hda_codec *codec) in ca0132_suspend() argument
9535 struct ca0132_spec *spec = codec->spec; in ca0132_suspend()
9561 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
9563 struct ca0132_spec *spec = codec->spec; in ca0132_config()
9579 codec_dbg(codec, "%s: QUIRK_ALIENWARE applied.\n", __func__); in ca0132_config()
9580 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
9583 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); in ca0132_config()
9584 snd_hda_apply_pincfgs(codec, sbz_pincfgs); in ca0132_config()
9587 codec_dbg(codec, "%s: QUIRK_ZXR applied.\n", __func__); in ca0132_config()
9588 snd_hda_apply_pincfgs(codec, zxr_pincfgs); in ca0132_config()
9591 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); in ca0132_config()
9592 snd_hda_apply_pincfgs(codec, r3d_pincfgs); in ca0132_config()
9595 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); in ca0132_config()
9596 snd_hda_apply_pincfgs(codec, r3di_pincfgs); in ca0132_config()
9599 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__); in ca0132_config()
9600 snd_hda_apply_pincfgs(codec, ae5_pincfgs); in ca0132_config()
9603 codec_dbg(codec, "%s: QUIRK_AE7 applied.\n", __func__); in ca0132_config()
9604 snd_hda_apply_pincfgs(codec, ae7_pincfgs); in ca0132_config()
9761 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
9765 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
9806 * Sound Blaster Z cards. However, they have different HDA codec subsystem
9810 static void sbz_detect_quirk(struct hda_codec *codec) in sbz_detect_quirk() argument
9812 struct ca0132_spec *spec = codec->spec; in sbz_detect_quirk()
9814 switch (codec->core.subsystem_id) { in sbz_detect_quirk()
9827 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
9833 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
9838 codec->spec = spec; in patch_ca0132()
9839 spec->codec = codec; in patch_ca0132()
9841 /* Detect codec quirk */ in patch_ca0132()
9842 quirk = snd_pci_quirk_lookup(codec->bus->pci, ca0132_quirks); in patch_ca0132()
9848 sbz_detect_quirk(codec); in patch_ca0132()
9851 codec->patch_ops = dbpro_patch_ops; in patch_ca0132()
9853 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
9855 codec->pcm_format_first = 1; in patch_ca0132()
9856 codec->no_sticky_stream = 1; in patch_ca0132()
9866 snd_hda_codec_set_name(codec, "Sound Blaster Z"); in patch_ca0132()
9870 snd_hda_codec_set_name(codec, "Sound Blaster ZxR"); in patch_ca0132()
9876 snd_hda_codec_set_name(codec, "Recon3D"); in patch_ca0132()
9880 snd_hda_codec_set_name(codec, "Recon3Di"); in patch_ca0132()
9884 snd_hda_codec_set_name(codec, "Sound BlasterX AE-5"); in patch_ca0132()
9888 snd_hda_codec_set_name(codec, "Sound Blaster AE-7"); in patch_ca0132()
9920 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); in patch_ca0132()
9922 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); in patch_ca0132()
9933 ca0132_init_chip(codec); in patch_ca0132()
9935 ca0132_config(codec); in patch_ca0132()
9937 err = ca0132_prepare_verbs(codec); in patch_ca0132()
9941 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()
9948 ca0132_free(codec); in patch_ca0132()
9962 MODULE_DESCRIPTION("Creative Sound Core3D codec");