Lines Matching refs:codec
1135 struct hda_codec *codec; member
1181 #define ca0132_quirk(spec) ((spec)->codec->fixup_id)
1527 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
1531 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
1537 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
1540 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
1544 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
1551 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
1556 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
1565 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
1578 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
1581 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
1588 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
1593 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
1605 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
1607 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
1611 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
1615 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
1629 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
1636 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
1641 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
1650 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
1652 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
1656 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
1660 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
1665 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
1681 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
1684 struct ca0132_spec *spec = codec->spec; in chipio_write()
1690 err = chipio_write_address(codec, chip_addx); in chipio_write()
1694 return chipio_write_data(codec, data); in chipio_write()
1701 static int chipio_write_no_mutex(struct hda_codec *codec, in chipio_write_no_mutex() argument
1708 err = chipio_write_address(codec, chip_addx); in chipio_write_no_mutex()
1712 err = chipio_write_data(codec, data); in chipio_write_no_mutex()
1724 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
1729 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
1733 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
1737 return chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
1744 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
1747 struct ca0132_spec *spec = codec->spec; in chipio_read()
1753 err = chipio_write_address(codec, chip_addx); in chipio_read()
1757 return chipio_read_data(codec, data); in chipio_read()
1763 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1772 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1779 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1782 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1787 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1791 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1792 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1795 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1805 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, in chipio_set_control_param_no_mutex() argument
1812 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1815 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param_no_mutex()
1816 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1819 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1829 static void chipio_set_stream_source_dest(struct hda_codec *codec, in chipio_set_stream_source_dest() argument
1832 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1834 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1836 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1843 static void chipio_set_stream_channels(struct hda_codec *codec, in chipio_set_stream_channels() argument
1846 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1848 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1855 static void chipio_set_stream_control(struct hda_codec *codec, in chipio_set_stream_control() argument
1858 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1860 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1867 static void chipio_get_stream_control(struct hda_codec *codec, in chipio_get_stream_control() argument
1870 chipio_set_control_param_no_mutex(codec, in chipio_get_stream_control()
1872 *enable = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_get_stream_control()
1880 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, in chipio_set_conn_rate_no_mutex() argument
1883 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1885 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1892 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1895 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1896 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1905 static void chipio_8051_write_direct(struct hda_codec *codec, in chipio_8051_write_direct() argument
1911 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, verb, addr); in chipio_8051_write_direct()
1922 static void chipio_8051_set_address(struct hda_codec *codec, unsigned int addr) in chipio_8051_set_address() argument
1928 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_address()
1933 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_address()
1937 static void chipio_8051_set_data(struct hda_codec *codec, unsigned int data) in chipio_8051_set_data() argument
1940 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_data()
1944 static unsigned int chipio_8051_get_data(struct hda_codec *codec) in chipio_8051_get_data() argument
1946 return snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_get_data()
1951 static void chipio_8051_set_data_pll(struct hda_codec *codec, unsigned int data) in chipio_8051_set_data_pll() argument
1954 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_data_pll()
1958 static void chipio_8051_write_exram(struct hda_codec *codec, in chipio_8051_write_exram() argument
1961 struct ca0132_spec *spec = codec->spec; in chipio_8051_write_exram()
1965 chipio_8051_set_address(codec, addr); in chipio_8051_write_exram()
1966 chipio_8051_set_data(codec, data); in chipio_8051_write_exram()
1969 static void chipio_8051_write_exram_no_mutex(struct hda_codec *codec, in chipio_8051_write_exram_no_mutex() argument
1972 chipio_8051_set_address(codec, addr); in chipio_8051_write_exram_no_mutex()
1973 chipio_8051_set_data(codec, data); in chipio_8051_write_exram_no_mutex()
1977 static void chipio_8051_read_exram(struct hda_codec *codec, in chipio_8051_read_exram() argument
1980 chipio_8051_set_address(codec, addr); in chipio_8051_read_exram()
1981 *data = chipio_8051_get_data(codec); in chipio_8051_read_exram()
1984 static void chipio_8051_write_pll_pmu(struct hda_codec *codec, in chipio_8051_write_pll_pmu() argument
1987 struct ca0132_spec *spec = codec->spec; in chipio_8051_write_pll_pmu()
1991 chipio_8051_set_address(codec, addr & 0xff); in chipio_8051_write_pll_pmu()
1992 chipio_8051_set_data_pll(codec, data); in chipio_8051_write_pll_pmu()
1995 static void chipio_8051_write_pll_pmu_no_mutex(struct hda_codec *codec, in chipio_8051_write_pll_pmu_no_mutex() argument
1998 chipio_8051_set_address(codec, addr & 0xff); in chipio_8051_write_pll_pmu_no_mutex()
1999 chipio_8051_set_data_pll(codec, data); in chipio_8051_write_pll_pmu_no_mutex()
2005 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
2007 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
2011 chipio_8051_write_pll_pmu_no_mutex(codec, 0x00, 0xff); in chipio_enable_clocks()
2012 chipio_8051_write_pll_pmu_no_mutex(codec, 0x05, 0x0b); in chipio_enable_clocks()
2013 chipio_8051_write_pll_pmu_no_mutex(codec, 0x06, 0xff); in chipio_enable_clocks()
2019 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
2027 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
2039 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
2045 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
2057 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
2059 struct ca0132_spec *spec = codec->spec; in dspio_write()
2062 dspio_write_wait(codec); in dspio_write()
2065 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
2070 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
2076 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
2086 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
2097 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
2106 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
2110 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
2114 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
2119 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
2125 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
2139 status = dspio_read(codec, buffer++); in dspio_read_multiple()
2148 status = dspio_read(codec, &dummy); in dspio_read_multiple()
2218 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
2226 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
2230 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
2232 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
2236 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
2243 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
2254 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
2261 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
2300 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
2344 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
2361 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
2366 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
2379 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
2384 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
2403 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
2406 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
2409 codec_dbg(codec, "NULL reply\n"); in dspio_scp()
2416 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
2426 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
2429 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, in dspio_set_param()
2433 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
2436 return dspio_set_param(codec, mod_id, 0x20, req, &data, in dspio_set_uint_param()
2443 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
2448 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
2449 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_alloc_dma_chan()
2454 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
2459 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
2463 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
2464 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
2472 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
2477 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
2478 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
2480 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_free_dma_chan()
2485 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
2489 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
2497 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
2503 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
2513 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2520 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2532 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
2537 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
2539 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
2544 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
2575 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
2579 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
2585 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
2597 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
2600 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
2604 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
2605 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
2612 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
2619 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
2622 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
2626 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2629 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
2639 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
2641 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2644 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
2647 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
2651 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2654 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
2660 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
2662 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2666 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
2668 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2671 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
2674 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
2676 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2679 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
2682 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
2684 codec_dbg(codec, in dsp_dma_setup_common()
2690 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
2698 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
2716 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
2719 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
2725 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
2729 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
2743 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
2746 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
2749 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
2754 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
2757 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
2760 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
2768 status = chipio_write(codec, in dsp_dma_setup()
2771 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
2774 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
2776 codec_dbg(codec, in dsp_dma_setup()
2781 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
2789 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
2795 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
2798 status = chipio_read(codec, in dsp_dma_start()
2802 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
2805 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
2811 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
2814 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
2817 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
2825 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
2831 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
2834 status = chipio_read(codec, in dsp_dma_stop()
2838 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
2841 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
2846 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
2849 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
2852 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
2868 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
2878 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2886 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2890 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2894 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2898 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2909 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
2913 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2917 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
2921 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2929 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2935 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2938 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2942 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2945 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2950 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2961 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2967 return dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2973 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2977 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2979 status = dsp_free_router_ports(codec); in dsp_free_ports()
2981 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2984 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2993 struct hda_codec *codec; member
3005 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
3025 struct hda_codec *codec = dma->codec; in dma_reset() local
3026 struct ca0132_spec *spec = codec->spec; in dma_reset()
3030 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
3032 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
3057 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
3089 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
3140 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
3148 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
3155 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
3157 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
3180 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
3216 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
3217 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3221 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
3230 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
3237 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
3247 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
3260 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
3268 codec_dbg(codec, in dspxfr_one_seg()
3275 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
3289 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
3293 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
3296 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
3303 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
3307 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
3310 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
3311 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
3318 status = chipio_write_multiple(codec, in dspxfr_one_seg()
3327 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3335 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
3343 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
3356 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
3376 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
3383 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
3405 dma_engine->codec = codec; in dspxfr_image()
3406 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
3413 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
3417 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
3421 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
3430 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
3432 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
3439 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
3442 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
3447 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3450 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
3456 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
3460 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
3474 status = dsp_free_ports(codec); in dspxfr_image()
3479 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3484 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
3487 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
3497 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
3499 struct ca0132_spec *spec = codec->spec; in dspload_post_setup()
3500 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
3503 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
3504 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
3507 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
3529 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
3540 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
3557 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
3559 status = dsp_reset(codec); in dspload_image()
3564 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
3565 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
3571 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
3573 dspload_post_setup(codec); in dspload_image()
3574 status = dsp_set_run_state(codec); in dspload_image()
3577 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
3584 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
3589 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
3596 #define dspload_is_loaded(codec) false argument
3599 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
3604 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
3605 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
3611 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
3630 static void ca0113_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, in ca0113_mmio_gpio_set() argument
3633 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_gpio_set()
3650 static void ca0113_mmio_command_set(struct hda_codec *codec, unsigned int group, in ca0113_mmio_command_set() argument
3653 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set()
3689 static void ca0113_mmio_command_set_type2(struct hda_codec *codec, in ca0113_mmio_command_set_type2() argument
3692 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set_type2()
3729 static void ca0132_gpio_init(struct hda_codec *codec) in ca0132_gpio_init() argument
3731 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_init()
3737 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3738 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ca0132_gpio_init()
3739 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); in ca0132_gpio_init()
3742 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3743 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); in ca0132_gpio_init()
3752 static void ca0132_gpio_setup(struct hda_codec *codec) in ca0132_gpio_setup() argument
3754 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_setup()
3758 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3760 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3762 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3764 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3768 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3770 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3772 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3822 static void r3di_gpio_mic_set(struct hda_codec *codec, in r3di_gpio_mic_set() argument
3828 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_mic_set()
3838 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_mic_set()
3842 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, in r3di_gpio_dsp_status_set() argument
3848 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_dsp_status_set()
3853 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3860 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3867 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3875 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
3880 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
3882 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
3888 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
3891 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
3901 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
3907 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
3910 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
3935 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
3938 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
3939 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
3943 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
3948 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
3949 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
3954 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
3957 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
3958 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
3962 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
3965 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
3966 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
3973 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
3978 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
3985 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
3988 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
3993 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
3998 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
4001 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
4211 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
4218 CLASS(snd_hda_power, pm)(codec); in tuning_ctl_set()
4219 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, in tuning_ctl_set()
4232 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
4233 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
4258 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
4259 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
4272 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
4293 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
4294 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
4307 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
4328 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
4329 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
4342 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
4350 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
4387 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
4390 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
4396 err = add_tuning_control(codec, in add_tuning_ctls()
4408 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
4410 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
4430 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
4432 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
4439 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
4441 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_select_out()
4446 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
4457 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
4460 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4465 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4470 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4472 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4474 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4476 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4480 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4482 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4485 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4487 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4490 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
4493 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4498 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4503 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4505 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4507 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4509 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4513 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4515 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4518 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4520 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4527 static int ae5_headphone_gain_set(struct hda_codec *codec, long val);
4528 static int zxr_headphone_gain_set(struct hda_codec *codec, long val);
4529 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
4531 static void ae5_mmio_select_out(struct hda_codec *codec) in ae5_mmio_select_out() argument
4533 struct ca0132_spec *spec = codec->spec; in ae5_mmio_select_out()
4543 ca0113_mmio_command_set(codec, out_cmds->group[i], in ae5_mmio_select_out()
4548 static int ca0132_alt_set_full_range_speaker(struct hda_codec *codec) in ca0132_alt_set_full_range_speaker() argument
4550 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_full_range_speaker()
4562 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4569 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4574 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4584 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4593 static int ca0132_alt_surround_set_bass_redirection(struct hda_codec *codec, in ca0132_alt_surround_set_bass_redirection() argument
4596 struct ca0132_spec *spec = codec->spec; in ca0132_alt_surround_set_bass_redirection()
4606 err = dspio_set_uint_param(codec, 0x96, SPEAKER_BASS_REDIRECT, tmp); in ca0132_alt_surround_set_bass_redirection()
4613 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_surround_set_bass_redirection()
4626 static void ca0132_alt_select_out_get_quirk_data(struct hda_codec *codec, in ca0132_alt_select_out_get_quirk_data() argument
4629 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_get_quirk_data()
4642 static int ca0132_alt_select_out_quirk_set(struct hda_codec *codec) in ca0132_alt_select_out_quirk_set() argument
4646 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_quirk_set()
4650 ca0132_alt_select_out_get_quirk_data(codec, &quirk_data); in ca0132_alt_select_out_quirk_set()
4656 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_set()
4659 gpio_data = snd_hda_codec_read(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4667 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4673 ca0113_mmio_gpio_set(codec, out_info->mmio_gpio_pin[i], in ca0132_alt_select_out_quirk_set()
4680 err = dspio_set_uint_param(codec, in ca0132_alt_select_out_quirk_set()
4689 chipio_set_control_param(codec, 0x0d, out_info->dac2port); in ca0132_alt_select_out_quirk_set()
4692 chipio_write(codec, out_info->chipio_write_addr, in ca0132_alt_select_out_quirk_set()
4699 ae5_headphone_gain_set(codec, 2); in ca0132_alt_select_out_quirk_set()
4701 zxr_headphone_gain_set(codec, 0); in ca0132_alt_select_out_quirk_set()
4704 ae5_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4707 zxr_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4715 static void ca0132_set_out_node_pincfg(struct hda_codec *codec, hda_nid_t nid, in ca0132_set_out_node_pincfg() argument
4720 pin_ctl = snd_hda_codec_read(codec, nid, 0, in ca0132_set_out_node_pincfg()
4725 snd_hda_set_pin_ctl(codec, nid, pin_ctl); in ca0132_set_out_node_pincfg()
4736 static int ca0132_alt_select_out(struct hda_codec *codec) in ca0132_alt_select_out() argument
4738 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out()
4746 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_out()
4748 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_alt_select_out()
4758 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || in ca0132_alt_select_out()
4759 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); in ca0132_alt_select_out()
4771 err = dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_MUTE, FLOAT_ONE); in ca0132_alt_select_out()
4775 err = ca0132_alt_select_out_quirk_set(codec); in ca0132_alt_select_out()
4781 codec_dbg(codec, "%s speaker\n", __func__); in ca0132_alt_select_out()
4784 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4788 ca0132_set_out_node_pincfg(codec, spec->out_pins[1], 0, 0); in ca0132_alt_select_out()
4790 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 1, 0); in ca0132_alt_select_out()
4792 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 1, 0); in ca0132_alt_select_out()
4794 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 1, 0); in ca0132_alt_select_out()
4806 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_alt_select_out()
4812 codec_dbg(codec, "%s hp\n", __func__); in ca0132_alt_select_out()
4813 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4817 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 0, 0); in ca0132_alt_select_out()
4818 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 0, 0); in ca0132_alt_select_out()
4819 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 0, 0); in ca0132_alt_select_out()
4822 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) in ca0132_alt_select_out()
4824 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) in ca0132_alt_select_out()
4827 ca0132_set_out_node_pincfg(codec, headphone_nid, 1, 1); in ca0132_alt_select_out()
4830 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4832 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); in ca0132_alt_select_out()
4844 ca0132_effects_set(codec, X_BASS, in ca0132_alt_select_out()
4848 err = dspio_set_uint_param(codec, 0x8f, 0x01, FLOAT_ZERO); in ca0132_alt_select_out()
4856 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4862 err = ca0132_alt_surround_set_bass_redirection(codec, in ca0132_alt_select_out()
4865 err = ca0132_alt_surround_set_bass_redirection(codec, 0); in ca0132_alt_select_out()
4870 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4876 err = ca0132_alt_set_full_range_speaker(codec); in ca0132_alt_select_out()
4891 ca0132_alt_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4893 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4895 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
4898 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
4902 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
4903 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
4904 static void resume_mic1(struct hda_codec *codec, unsigned int oldval);
4905 static int stop_mic1(struct hda_codec *codec);
4906 static int ca0132_cvoice_switch_set(struct hda_codec *codec);
4907 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val);
4912 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
4914 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
4923 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
4924 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
4925 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
4930 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4932 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4934 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
4935 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
4940 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4942 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4944 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
4950 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) in ca0132_alt_set_vipsource() argument
4952 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_vipsource()
4958 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_set_vipsource()
4960 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_set_vipsource()
4961 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_set_vipsource()
4966 codec_dbg(codec, "%s: off.", __func__); in ca0132_alt_set_vipsource()
4967 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_alt_set_vipsource()
4970 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
4972 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_set_vipsource()
4973 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_set_vipsource()
4975 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_set_vipsource()
4987 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
4990 codec_dbg(codec, "%s: on.", __func__); in ca0132_alt_set_vipsource()
4991 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_alt_set_vipsource()
4992 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_alt_set_vipsource()
4994 chipio_set_conn_rate(codec, 0x0F, SR_16_000); in ca0132_alt_set_vipsource()
5000 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
5003 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
5006 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_alt_set_vipsource()
5009 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_set_vipsource()
5010 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_set_vipsource()
5021 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
5023 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
5027 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
5029 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_select_mic()
5034 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
5046 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
5047 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
5048 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
5050 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
5055 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
5056 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
5057 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
5059 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
5071 static int ca0132_alt_select_in(struct hda_codec *codec) in ca0132_alt_select_in() argument
5073 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_in()
5076 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_in()
5078 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_alt_select_in()
5080 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_select_in()
5081 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_select_in()
5090 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
5097 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
5101 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5105 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5107 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5109 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5111 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5118 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5119 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5121 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5123 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5125 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5126 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5129 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5130 chipio_write(codec, 0x18B09C, 0x0000000C); in ca0132_alt_select_in()
5133 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5134 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5137 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5138 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5143 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5146 ca0132_mic_boost_set(codec, 0); in ca0132_alt_select_in()
5150 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
5153 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
5156 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5159 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5160 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5162 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5164 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5170 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5171 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5173 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5179 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5184 chipio_write(codec, 0x18B098, 0x00000000); in ca0132_alt_select_in()
5185 chipio_write(codec, 0x18B09C, 0x00000000); in ca0132_alt_select_in()
5190 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5191 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5197 ca0113_mmio_gpio_set(codec, 0, true); in ca0132_alt_select_in()
5198 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_in()
5202 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); in ca0132_alt_select_in()
5206 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5214 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5215 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5217 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5219 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5221 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5222 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5226 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5227 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5230 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5231 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5236 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5239 ca0132_cvoice_switch_set(codec); in ca0132_alt_select_in()
5247 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
5251 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
5275 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
5277 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
5288 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
5297 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
5299 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
5344 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_effects_set()
5363 dspio_set_uint_param(codec, 0x47, 0x00, tmp); in ca0132_effects_set()
5372 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
5376 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
5388 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
5390 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
5394 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
5398 ca0132_alt_select_out(codec); in ca0132_pe_switch_set()
5404 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
5410 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
5412 struct ca0132_spec *spec = codec->spec; in stop_mic1()
5413 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
5416 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
5423 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
5425 struct ca0132_spec *spec = codec->spec; in resume_mic1()
5428 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
5436 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
5438 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
5443 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
5450 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
5453 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
5456 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
5458 ret |= ca0132_alt_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5460 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5461 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
5465 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
5467 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
5471 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5474 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5480 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) in ca0132_alt_mic_boost_set() argument
5482 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_set()
5485 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_alt_mic_boost_set()
5490 static int ae5_headphone_gain_set(struct hda_codec *codec, long val) in ae5_headphone_gain_set() argument
5495 ca0113_mmio_command_set(codec, 0x48, 0x11 + i, in ae5_headphone_gain_set()
5504 static int zxr_headphone_gain_set(struct hda_codec *codec, long val) in zxr_headphone_gain_set() argument
5506 ca0113_mmio_gpio_set(codec, 1, val); in zxr_headphone_gain_set()
5514 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
5519 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
5527 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5529 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5538 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5544 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5546 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5551 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5556 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
5562 guard(mutex)(&codec->control_mutex); in ca0132_vnode_switch_set()
5574 static void ca0132_alt_bass_redirection_xover_set(struct hda_codec *codec, in ca0132_alt_bass_redirection_xover_set() argument
5577 CLASS(snd_hda_power, pm)(codec); in ca0132_alt_bass_redirection_xover_set()
5579 dspio_set_param(codec, 0x96, 0x20, SPEAKER_BASS_REDIRECT_XOVER_FREQ, in ca0132_alt_bass_redirection_xover_set()
5592 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_slider_ctl_set() argument
5606 CLASS(snd_hda_power, pm)(codec); in ca0132_alt_slider_ctl_set()
5612 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5621 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5632 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_ctl_get() local
5633 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_ctl_get()
5648 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_slider_ctl_get() local
5649 struct ca0132_spec *spec = codec->spec; in ca0132_alt_slider_ctl_get()
5691 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_put() local
5692 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_put()
5711 ca0132_alt_bass_redirection_xover_set(codec, *cur_val); in ca0132_alt_xbass_xover_slider_put()
5713 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); in ca0132_alt_xbass_xover_slider_put()
5721 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_effect_slider_put() local
5722 struct ca0132_spec *spec = codec->spec; in ca0132_alt_effect_slider_put()
5735 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); in ca0132_alt_effect_slider_put()
5768 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_get() local
5769 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_get()
5778 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_put() local
5779 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_put()
5786 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", in ca0132_alt_mic_boost_put()
5792 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_mic_boost_put()
5822 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_get() local
5823 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_get()
5832 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_put() local
5833 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_put()
5840 codec_dbg(codec, "ae5_headphone_gain: boost=%d\n", in ae5_headphone_gain_put()
5846 ae5_headphone_gain_set(codec, spec->ae5_headphone_gain_val); in ae5_headphone_gain_put()
5875 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_get() local
5876 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_get()
5885 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_put() local
5886 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_put()
5893 codec_dbg(codec, "ae5_sound_filter: %s\n", in ae5_sound_filter_put()
5898 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, in ae5_sound_filter_put()
5925 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_get() local
5926 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_get()
5935 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_put() local
5936 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_put()
5950 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", in ca0132_alt_input_source_put()
5955 ca0132_alt_select_in(codec); in ca0132_alt_input_source_put()
5977 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_get() local
5978 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_get()
5987 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_put() local
5988 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_put()
5996 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", in ca0132_alt_output_select_put()
6004 ca0132_alt_select_out(codec); in ca0132_alt_output_select_put()
6028 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_get() local
6029 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_get()
6038 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_put() local
6039 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_put()
6046 codec_dbg(codec, "ca0132_alt_speaker_channels: sel=%d, channels=%s\n", in ca0132_alt_speaker_channel_cfg_put()
6052 ca0132_alt_select_out(codec); in ca0132_alt_speaker_channel_cfg_put()
6081 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_get() local
6082 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_get()
6091 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_put() local
6092 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_put()
6101 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", in ca0132_alt_svm_setting_put()
6121 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_alt_svm_setting_put()
6145 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_get() local
6146 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_get()
6155 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_put() local
6156 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_put()
6164 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, in ca0132_alt_eq_preset_put()
6171 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, in ca0132_alt_eq_preset_put()
6202 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
6203 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
6212 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
6213 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
6220 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
6228 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
6238 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
6247 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
6248 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
6299 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
6300 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
6305 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
6308 CLASS(snd_hda_power, pm)(codec); in ca0132_switch_put()
6325 return ca0132_pe_switch_set(codec); in ca0132_switch_put()
6331 return ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
6338 return ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
6346 return ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6350 return ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6359 return zxr_headphone_gain_set(codec, *valp); in ca0132_switch_put()
6367 ca0132_alt_set_full_range_speaker(codec); in ca0132_switch_put()
6375 ca0132_alt_surround_set_bass_redirection(codec, *valp); in ca0132_switch_put()
6391 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) in ca0132_alt_dsp_volume_put() argument
6393 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_volume_put()
6404 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6411 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6416 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6424 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
6425 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
6436 scoped_guard(mutex, &codec->control_mutex) { in ca0132_volume_info()
6446 scoped_guard(mutex, &codec->control_mutex) { in ca0132_volume_info()
6462 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
6463 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
6483 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
6484 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
6503 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
6508 CLASS(snd_hda_power, pm)(codec); in ca0132_volume_put()
6509 guard(mutex)(&codec->control_mutex); in ca0132_volume_put()
6528 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_volume_put() local
6529 struct ca0132_spec *spec = codec->spec; in ca0132_alt_volume_put()
6554 CLASS(snd_hda_power, pm)(codec); in ca0132_alt_volume_put()
6555 ca0132_alt_dsp_volume_put(codec, vnid); in ca0132_alt_volume_put()
6556 guard(mutex)(&codec->control_mutex); in ca0132_alt_volume_put()
6563 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
6564 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
6575 scoped_guard(mutex, &codec->control_mutex) { in ca0132_volume_tlv()
6585 scoped_guard(mutex, &codec->control_mutex) { in ca0132_volume_tlv()
6599 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_add_effect_slider() argument
6626 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in ca0132_alt_add_effect_slider()
6634 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
6637 struct ca0132_spec *spec = codec->spec; in add_fx_switch()
6650 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
6653 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
6661 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
6665 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) in add_ca0132_alt_eq_presets() argument
6673 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, in add_ca0132_alt_eq_presets()
6674 snd_ctl_new1(&knew, codec)); in add_ca0132_alt_eq_presets()
6682 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) in ca0132_alt_add_svm_enum() argument
6690 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, in ca0132_alt_add_svm_enum()
6691 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_svm_enum()
6699 static int ca0132_alt_add_output_enum(struct hda_codec *codec) in ca0132_alt_add_output_enum() argument
6707 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, in ca0132_alt_add_output_enum()
6708 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_output_enum()
6716 static int ca0132_alt_add_speaker_channel_cfg_enum(struct hda_codec *codec) in ca0132_alt_add_speaker_channel_cfg_enum() argument
6724 return snd_hda_ctl_add(codec, SPEAKER_CHANNEL_CFG_ENUM, in ca0132_alt_add_speaker_channel_cfg_enum()
6725 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_speaker_channel_cfg_enum()
6733 static int ca0132_alt_add_front_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_front_full_range_switch() argument
6739 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_FRONT, in ca0132_alt_add_front_full_range_switch()
6740 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_front_full_range_switch()
6743 static int ca0132_alt_add_rear_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_rear_full_range_switch() argument
6749 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_REAR, in ca0132_alt_add_rear_full_range_switch()
6750 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_rear_full_range_switch()
6759 static int ca0132_alt_add_bass_redirection_crossover(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_crossover() argument
6771 return snd_hda_ctl_add(codec, BASS_REDIRECTION_XOVER, in ca0132_alt_add_bass_redirection_crossover()
6772 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_crossover()
6775 static int ca0132_alt_add_bass_redirection_switch(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_switch() argument
6782 return snd_hda_ctl_add(codec, BASS_REDIRECTION, in ca0132_alt_add_bass_redirection_switch()
6783 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_switch()
6791 static int ca0132_alt_add_input_enum(struct hda_codec *codec) in ca0132_alt_add_input_enum() argument
6799 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, in ca0132_alt_add_input_enum()
6800 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_input_enum()
6807 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) in ca0132_alt_add_mic_boost_enum() argument
6815 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, in ca0132_alt_add_mic_boost_enum()
6816 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_mic_boost_enum()
6825 static int ae5_add_headphone_gain_enum(struct hda_codec *codec) in ae5_add_headphone_gain_enum() argument
6833 return snd_hda_ctl_add(codec, AE5_HEADPHONE_GAIN_ENUM, in ae5_add_headphone_gain_enum()
6834 snd_ctl_new1(&knew, codec)); in ae5_add_headphone_gain_enum()
6842 static int ae5_add_sound_filter_enum(struct hda_codec *codec) in ae5_add_sound_filter_enum() argument
6850 return snd_hda_ctl_add(codec, AE5_SOUND_FILTER_ENUM, in ae5_add_sound_filter_enum()
6851 snd_ctl_new1(&knew, codec)); in ae5_add_sound_filter_enum()
6854 static int zxr_add_headphone_gain_switch(struct hda_codec *codec) in zxr_add_headphone_gain_switch() argument
6860 return snd_hda_ctl_add(codec, ZXR_HEADPHONE_GAIN, in zxr_add_headphone_gain_switch()
6861 snd_ctl_new1(&knew, codec)); in zxr_add_headphone_gain_switch()
6891 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) in ca0132_alt_add_chmap_ctls() argument
6896 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in ca0132_alt_add_chmap_ctls()
6908 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); in ca0132_alt_add_chmap_ctls()
6984 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
6986 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
6992 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
6998 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, in ca0132_build_controls()
7000 snd_hda_add_vmaster(codec, "Master Playback Volume", in ca0132_build_controls()
7003 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", in ca0132_build_controls()
7023 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
7035 err = ca0132_alt_add_svm_enum(codec); in ca0132_build_controls()
7039 err = add_ca0132_alt_eq_presets(codec); in ca0132_build_controls()
7043 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
7048 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
7055 err = ca0132_alt_add_effect_slider(codec, in ca0132_build_controls()
7063 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, in ca0132_build_controls()
7069 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
7074 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
7079 err = add_voicefx(codec); in ca0132_build_controls()
7089 err = ca0132_alt_add_output_enum(codec); in ca0132_build_controls()
7092 err = ca0132_alt_add_speaker_channel_cfg_enum(codec); in ca0132_build_controls()
7095 err = ca0132_alt_add_front_full_range_switch(codec); in ca0132_build_controls()
7098 err = ca0132_alt_add_rear_full_range_switch(codec); in ca0132_build_controls()
7101 err = ca0132_alt_add_bass_redirection_crossover(codec); in ca0132_build_controls()
7104 err = ca0132_alt_add_bass_redirection_switch(codec); in ca0132_build_controls()
7107 err = ca0132_alt_add_mic_boost_enum(codec); in ca0132_build_controls()
7115 err = ca0132_alt_add_input_enum(codec); in ca0132_build_controls()
7124 err = ae5_add_headphone_gain_enum(codec); in ca0132_build_controls()
7127 err = ae5_add_sound_filter_enum(codec); in ca0132_build_controls()
7132 err = zxr_add_headphone_gain_switch(codec); in ca0132_build_controls()
7141 add_tuning_ctls(codec); in ca0132_build_controls()
7144 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
7149 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
7153 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
7160 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
7166 ca0132_alt_add_chmap_ctls(codec); in ca0132_build_controls()
7171 static int dbpro_build_controls(struct hda_codec *codec) in dbpro_build_controls() argument
7173 struct ca0132_spec *spec = codec->spec; in dbpro_build_controls()
7177 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in dbpro_build_controls()
7184 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in dbpro_build_controls()
7235 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
7237 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
7240 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
7258 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
7267 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
7277 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
7295 static int dbpro_build_pcms(struct hda_codec *codec) in dbpro_build_pcms() argument
7297 struct ca0132_spec *spec = codec->spec; in dbpro_build_pcms()
7300 info = snd_hda_codec_pcm_new(codec, "CA0132 Alt Analog"); in dbpro_build_pcms()
7311 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in dbpro_build_pcms()
7329 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
7332 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
7333 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
7334 snd_hda_codec_write(codec, pin, 0, in init_output()
7338 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
7339 snd_hda_codec_write(codec, dac, 0, in init_output()
7343 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
7346 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
7347 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
7348 snd_hda_codec_write(codec, pin, 0, in init_input()
7352 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
7353 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
7357 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7359 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7364 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
7368 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
7370 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
7376 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
7378 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
7383 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
7385 oldval = stop_mic1(codec); in ca0132_set_dmic()
7386 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
7390 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7394 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7398 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
7402 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7407 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7411 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
7413 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
7414 resume_mic1(codec, oldval); in ca0132_set_dmic()
7420 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
7422 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
7435 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7445 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7461 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7468 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
7470 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
7474 chipio_8051_write_exram_no_mutex(codec, 0x1920, 0x00); in ca0132_init_analog_mic2()
7475 chipio_8051_write_exram_no_mutex(codec, 0x192d, 0x00); in ca0132_init_analog_mic2()
7478 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
7480 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
7483 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
7484 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
7487 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7490 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7493 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7494 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7500 static void ca0132_alt_free_active_dma_channels(struct hda_codec *codec) in ca0132_alt_free_active_dma_channels() argument
7506 status = chipio_read(codec, DSPDMAC_CHNLSTART_MODULE_OFFSET, &tmp); in ca0132_alt_free_active_dma_channels()
7515 codec_dbg(codec, "%s: Failed to read active DSP DMA channel register.\n", in ca0132_alt_free_active_dma_channels()
7525 if (dsp_is_dma_active(codec, i)) { in ca0132_alt_free_active_dma_channels()
7526 status = dspio_free_dma_chan(codec, i); in ca0132_alt_free_active_dma_channels()
7528 codec_dbg(codec, "%s: Failed to free active DSP DMA channel %d.\n", in ca0132_alt_free_active_dma_channels()
7555 static void ca0132_alt_start_dsp_audio_streams(struct hda_codec *codec) in ca0132_alt_start_dsp_audio_streams() argument
7558 struct ca0132_spec *spec = codec->spec; in ca0132_alt_start_dsp_audio_streams()
7567 chipio_get_stream_control(codec, dsp_dma_stream_ids[i], &tmp); in ca0132_alt_start_dsp_audio_streams()
7570 chipio_set_stream_control(codec, in ca0132_alt_start_dsp_audio_streams()
7581 ca0132_alt_free_active_dma_channels(codec); in ca0132_alt_start_dsp_audio_streams()
7586 chipio_set_stream_channels(codec, 0x0c, 6); in ca0132_alt_start_dsp_audio_streams()
7589 chipio_set_stream_control(codec, in ca0132_alt_start_dsp_audio_streams()
7641 static void chipio_remap_stream(struct hda_codec *codec, in chipio_remap_stream() argument
7647 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, in chipio_remap_stream()
7659 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, in chipio_remap_stream()
7668 codec_info(codec, "%s: Stream 0x%02x ports aren't allocated, remap failed!\n", in chipio_remap_stream()
7678 chipio_write_no_mutex(codec, in chipio_remap_stream()
7684 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in chipio_remap_stream()
7708 static void ca0132_alt_init_speaker_tuning(struct hda_codec *codec) in ca0132_alt_init_speaker_tuning() argument
7710 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_speaker_tuning()
7731 dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_ENABLE_CENTER_EQ, tmp); in ca0132_alt_init_speaker_tuning()
7736 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7741 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7745 dspio_set_uint_param(codec, 0x96, in ca0132_alt_init_speaker_tuning()
7752 static void ca0132_alt_init_analog_mics(struct hda_codec *codec) in ca0132_alt_init_analog_mics() argument
7754 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_analog_mics()
7758 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_init_analog_mics()
7759 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_init_analog_mics()
7761 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7765 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_init_analog_mics()
7768 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in ca0132_alt_init_analog_mics()
7769 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in ca0132_alt_init_analog_mics()
7771 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7773 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_alt_init_analog_mics()
7782 static void sbz_connect_streams(struct hda_codec *codec) in sbz_connect_streams() argument
7784 struct ca0132_spec *spec = codec->spec; in sbz_connect_streams()
7788 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); in sbz_connect_streams()
7791 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); in sbz_connect_streams()
7794 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); in sbz_connect_streams()
7795 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); in sbz_connect_streams()
7796 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); in sbz_connect_streams()
7797 chipio_set_stream_channels(codec, 0x14, 2); in sbz_connect_streams()
7798 chipio_set_stream_control(codec, 0x14, 1); in sbz_connect_streams()
7800 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); in sbz_connect_streams()
7809 static void sbz_chipio_startup_data(struct hda_codec *codec) in sbz_chipio_startup_data() argument
7812 struct ca0132_spec *spec = codec->spec; in sbz_chipio_startup_data()
7815 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); in sbz_chipio_startup_data()
7818 chipio_remap_stream(codec, &stream_remap_data[0]); in sbz_chipio_startup_data()
7836 chipio_remap_stream(codec, dsp_out_remap_data); in sbz_chipio_startup_data()
7838 codec_dbg(codec, "Startup Data exited, mutex released.\n"); in sbz_chipio_startup_data()
7841 static void ca0132_alt_dsp_initial_mic_setup(struct hda_codec *codec) in ca0132_alt_dsp_initial_mic_setup() argument
7843 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_initial_mic_setup()
7846 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_dsp_initial_mic_setup()
7847 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_dsp_initial_mic_setup()
7849 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7850 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7853 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_dsp_initial_mic_setup()
7855 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_dsp_initial_mic_setup()
7856 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_dsp_initial_mic_setup()
7860 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7861 chipio_write(codec, 0x18b09C, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7864 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7865 chipio_write(codec, 0x18b09c, 0x0000004c); in ca0132_alt_dsp_initial_mic_setup()
7872 static void ae5_post_dsp_register_set(struct hda_codec *codec) in ae5_post_dsp_register_set() argument
7874 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_register_set()
7876 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_post_dsp_register_set()
7877 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae5_post_dsp_register_set()
7892 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x3f); in ae5_post_dsp_register_set()
7893 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_post_dsp_register_set()
7894 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_register_set()
7897 static void ae5_post_dsp_param_setup(struct hda_codec *codec) in ae5_post_dsp_param_setup() argument
7904 chipio_set_control_param(codec, 3, 0); in ae5_post_dsp_param_setup()
7909 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae5_post_dsp_param_setup()
7911 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae5_post_dsp_param_setup()
7912 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_post_dsp_param_setup()
7914 chipio_8051_write_exram(codec, 0xfa92, 0x22); in ae5_post_dsp_param_setup()
7917 static void ae5_post_dsp_pll_setup(struct hda_codec *codec) in ae5_post_dsp_pll_setup() argument
7919 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); in ae5_post_dsp_pll_setup()
7920 chipio_8051_write_pll_pmu(codec, 0x45, 0xcc); in ae5_post_dsp_pll_setup()
7921 chipio_8051_write_pll_pmu(codec, 0x40, 0xcb); in ae5_post_dsp_pll_setup()
7922 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); in ae5_post_dsp_pll_setup()
7923 chipio_8051_write_pll_pmu(codec, 0x51, 0x8d); in ae5_post_dsp_pll_setup()
7926 static void ae5_post_dsp_stream_setup(struct hda_codec *codec) in ae5_post_dsp_stream_setup() argument
7928 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_stream_setup()
7932 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae5_post_dsp_stream_setup()
7934 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae5_post_dsp_stream_setup()
7936 chipio_set_stream_source_dest(codec, 0x5, 0x43, 0x0); in ae5_post_dsp_stream_setup()
7938 chipio_set_stream_source_dest(codec, 0x18, 0x9, 0xd0); in ae5_post_dsp_stream_setup()
7939 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae5_post_dsp_stream_setup()
7940 chipio_set_stream_channels(codec, 0x18, 6); in ae5_post_dsp_stream_setup()
7941 chipio_set_stream_control(codec, 0x18, 1); in ae5_post_dsp_stream_setup()
7943 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae5_post_dsp_stream_setup()
7945 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); in ae5_post_dsp_stream_setup()
7947 ca0113_mmio_command_set(codec, 0x48, 0x01, 0x80); in ae5_post_dsp_stream_setup()
7950 static void ae5_post_dsp_startup_data(struct hda_codec *codec) in ae5_post_dsp_startup_data() argument
7952 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_startup_data()
7956 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae5_post_dsp_startup_data()
7957 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae5_post_dsp_startup_data()
7958 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae5_post_dsp_startup_data()
7959 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae5_post_dsp_startup_data()
7961 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7962 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae5_post_dsp_startup_data()
7963 ca0113_mmio_command_set(codec, 0x48, 0x0b, 0x12); in ae5_post_dsp_startup_data()
7964 ca0113_mmio_command_set(codec, 0x48, 0x04, 0x00); in ae5_post_dsp_startup_data()
7965 ca0113_mmio_command_set(codec, 0x48, 0x06, 0x48); in ae5_post_dsp_startup_data()
7966 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
7967 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_startup_data()
7968 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7969 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7970 ca0113_mmio_gpio_set(codec, 0, true); in ae5_post_dsp_startup_data()
7971 ca0113_mmio_gpio_set(codec, 1, true); in ae5_post_dsp_startup_data()
7972 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x80); in ae5_post_dsp_startup_data()
7974 chipio_write_no_mutex(codec, 0x18b03c, 0x00000012); in ae5_post_dsp_startup_data()
7976 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
7977 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
7980 static void ae7_post_dsp_setup_ports(struct hda_codec *codec) in ae7_post_dsp_setup_ports() argument
7982 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_setup_ports()
7987 chipio_remap_stream(codec, &stream_remap_data[1]); in ae7_post_dsp_setup_ports()
7989 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_post_dsp_setup_ports()
7990 ca0113_mmio_command_set(codec, 0x48, 0x0d, 0x40); in ae7_post_dsp_setup_ports()
7991 ca0113_mmio_command_set(codec, 0x48, 0x17, 0x00); in ae7_post_dsp_setup_ports()
7992 ca0113_mmio_command_set(codec, 0x48, 0x19, 0x00); in ae7_post_dsp_setup_ports()
7993 ca0113_mmio_command_set(codec, 0x48, 0x11, 0xff); in ae7_post_dsp_setup_ports()
7994 ca0113_mmio_command_set(codec, 0x48, 0x12, 0xff); in ae7_post_dsp_setup_ports()
7995 ca0113_mmio_command_set(codec, 0x48, 0x13, 0xff); in ae7_post_dsp_setup_ports()
7996 ca0113_mmio_command_set(codec, 0x48, 0x14, 0x7f); in ae7_post_dsp_setup_ports()
7999 static void ae7_post_dsp_asi_stream_setup(struct hda_codec *codec) in ae7_post_dsp_asi_stream_setup() argument
8001 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_stream_setup()
8005 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae7_post_dsp_asi_stream_setup()
8006 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_post_dsp_asi_stream_setup()
8008 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae7_post_dsp_asi_stream_setup()
8010 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_stream_setup()
8011 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_stream_setup()
8013 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_stream_setup()
8014 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_stream_setup()
8015 chipio_set_stream_control(codec, 0x18, 1); in ae7_post_dsp_asi_stream_setup()
8017 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae7_post_dsp_asi_stream_setup()
8020 static void ae7_post_dsp_pll_setup(struct hda_codec *codec) in ae7_post_dsp_pll_setup() argument
8031 chipio_8051_write_pll_pmu_no_mutex(codec, addr[i], data[i]); in ae7_post_dsp_pll_setup()
8034 static void ae7_post_dsp_asi_setup_ports(struct hda_codec *codec) in ae7_post_dsp_asi_setup_ports() argument
8036 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_setup_ports()
8047 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); in ae7_post_dsp_asi_setup_ports()
8049 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
8050 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
8051 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae7_post_dsp_asi_setup_ports()
8052 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae7_post_dsp_asi_setup_ports()
8054 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
8055 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
8058 ca0113_mmio_command_set(codec, 0x48, target[i], data[i]); in ae7_post_dsp_asi_setup_ports()
8060 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
8061 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
8062 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
8064 chipio_set_stream_source_dest(codec, 0x21, 0x64, 0x56); in ae7_post_dsp_asi_setup_ports()
8065 chipio_set_stream_channels(codec, 0x21, 2); in ae7_post_dsp_asi_setup_ports()
8066 chipio_set_conn_rate_no_mutex(codec, 0x56, SR_8_000); in ae7_post_dsp_asi_setup_ports()
8068 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_post_dsp_asi_setup_ports()
8074 chipio_set_control_param_no_mutex(codec, 0x20, 0x21); in ae7_post_dsp_asi_setup_ports()
8076 chipio_write_no_mutex(codec, 0x18b038, 0x00000088); in ae7_post_dsp_asi_setup_ports()
8087 ca0113_mmio_gpio_set(codec, 0, 1); in ae7_post_dsp_asi_setup_ports()
8088 ca0113_mmio_gpio_set(codec, 1, 1); in ae7_post_dsp_asi_setup_ports()
8090 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
8091 chipio_write_no_mutex(codec, 0x18b03c, 0x00000000); in ae7_post_dsp_asi_setup_ports()
8092 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
8093 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
8095 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_setup_ports()
8096 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_setup_ports()
8098 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_setup_ports()
8099 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_setup_ports()
8105 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
8106 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
8114 static void ae7_post_dsp_asi_setup(struct hda_codec *codec) in ae7_post_dsp_asi_setup() argument
8116 chipio_8051_write_direct(codec, 0x93, 0x10); in ae7_post_dsp_asi_setup()
8118 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae7_post_dsp_asi_setup()
8120 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup()
8121 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_post_dsp_asi_setup()
8123 chipio_set_control_param(codec, 3, 3); in ae7_post_dsp_asi_setup()
8124 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae7_post_dsp_asi_setup()
8126 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae7_post_dsp_asi_setup()
8127 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_post_dsp_asi_setup()
8128 snd_hda_codec_write(codec, 0x17, 0, 0x794, 0x00); in ae7_post_dsp_asi_setup()
8130 chipio_8051_write_exram(codec, 0xfa92, 0x22); in ae7_post_dsp_asi_setup()
8132 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup()
8133 ae7_post_dsp_asi_stream_setup(codec); in ae7_post_dsp_asi_setup()
8135 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); in ae7_post_dsp_asi_setup()
8137 ae7_post_dsp_asi_setup_ports(codec); in ae7_post_dsp_asi_setup()
8143 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
8145 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
8157 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
8165 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
8168 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
8172 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
8173 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
8177 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
8181 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
8188 static void r3d_setup_defaults(struct hda_codec *codec) in r3d_setup_defaults() argument
8190 struct ca0132_spec *spec = codec->spec; in r3d_setup_defaults()
8198 ca0132_alt_init_analog_mics(codec); in r3d_setup_defaults()
8199 ca0132_alt_start_dsp_audio_streams(codec); in r3d_setup_defaults()
8203 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in r3d_setup_defaults()
8207 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in r3d_setup_defaults()
8208 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in r3d_setup_defaults()
8211 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in r3d_setup_defaults()
8214 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); in r3d_setup_defaults()
8218 ca0113_mmio_gpio_set(codec, 2, false); in r3d_setup_defaults()
8219 ca0113_mmio_gpio_set(codec, 4, true); in r3d_setup_defaults()
8226 dspio_set_uint_param(codec, in r3d_setup_defaults()
8238 static void sbz_setup_defaults(struct hda_codec *codec) in sbz_setup_defaults() argument
8240 struct ca0132_spec *spec = codec->spec; in sbz_setup_defaults()
8248 ca0132_alt_init_analog_mics(codec); in sbz_setup_defaults()
8249 ca0132_alt_start_dsp_audio_streams(codec); in sbz_setup_defaults()
8250 sbz_connect_streams(codec); in sbz_setup_defaults()
8251 sbz_chipio_startup_data(codec); in sbz_setup_defaults()
8258 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in sbz_setup_defaults()
8259 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in sbz_setup_defaults()
8263 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in sbz_setup_defaults()
8267 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in sbz_setup_defaults()
8268 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in sbz_setup_defaults()
8271 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in sbz_setup_defaults()
8273 ca0132_alt_dsp_initial_mic_setup(codec); in sbz_setup_defaults()
8279 dspio_set_uint_param(codec, in sbz_setup_defaults()
8286 ca0132_alt_init_speaker_tuning(codec); in sbz_setup_defaults()
8292 static void ae5_setup_defaults(struct hda_codec *codec) in ae5_setup_defaults() argument
8294 struct ca0132_spec *spec = codec->spec; in ae5_setup_defaults()
8302 ca0132_alt_init_analog_mics(codec); in ae5_setup_defaults()
8303 ca0132_alt_start_dsp_audio_streams(codec); in ae5_setup_defaults()
8307 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ae5_setup_defaults()
8308 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ae5_setup_defaults()
8309 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae5_setup_defaults()
8310 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae5_setup_defaults()
8312 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_setup_defaults()
8313 ca0113_mmio_gpio_set(codec, 0, false); in ae5_setup_defaults()
8314 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae5_setup_defaults()
8318 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae5_setup_defaults()
8319 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae5_setup_defaults()
8323 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae5_setup_defaults()
8327 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae5_setup_defaults()
8328 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae5_setup_defaults()
8331 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae5_setup_defaults()
8333 ca0132_alt_dsp_initial_mic_setup(codec); in ae5_setup_defaults()
8334 ae5_post_dsp_register_set(codec); in ae5_setup_defaults()
8335 ae5_post_dsp_param_setup(codec); in ae5_setup_defaults()
8336 ae5_post_dsp_pll_setup(codec); in ae5_setup_defaults()
8337 ae5_post_dsp_stream_setup(codec); in ae5_setup_defaults()
8338 ae5_post_dsp_startup_data(codec); in ae5_setup_defaults()
8344 dspio_set_uint_param(codec, in ae5_setup_defaults()
8351 ca0132_alt_init_speaker_tuning(codec); in ae5_setup_defaults()
8357 static void ae7_setup_defaults(struct hda_codec *codec) in ae7_setup_defaults() argument
8359 struct ca0132_spec *spec = codec->spec; in ae7_setup_defaults()
8367 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8368 ca0132_alt_start_dsp_audio_streams(codec); in ae7_setup_defaults()
8369 ae7_post_dsp_setup_ports(codec); in ae7_setup_defaults()
8372 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8374 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8377 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_setup_defaults()
8380 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae7_setup_defaults()
8381 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae7_setup_defaults()
8383 ca0113_mmio_gpio_set(codec, 0, false); in ae7_setup_defaults()
8387 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae7_setup_defaults()
8388 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae7_setup_defaults()
8392 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae7_setup_defaults()
8396 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae7_setup_defaults()
8397 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae7_setup_defaults()
8400 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae7_setup_defaults()
8401 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae7_setup_defaults()
8407 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8409 ae7_post_dsp_asi_setup(codec); in ae7_setup_defaults()
8415 ca0113_mmio_gpio_set(codec, 0, true); in ae7_setup_defaults()
8416 ca0113_mmio_gpio_set(codec, 1, true); in ae7_setup_defaults()
8419 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x04); in ae7_setup_defaults()
8420 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x04); in ae7_setup_defaults()
8421 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x80); in ae7_setup_defaults()
8427 dspio_set_uint_param(codec, in ae7_setup_defaults()
8434 ca0132_alt_init_speaker_tuning(codec); in ae7_setup_defaults()
8440 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
8442 struct ca0132_spec *spec = codec->spec; in ca0132_init_flags()
8445 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); in ca0132_init_flags()
8446 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); in ca0132_init_flags()
8447 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); in ca0132_init_flags()
8448 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); in ca0132_init_flags()
8449 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); in ca0132_init_flags()
8450 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8451 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); in ca0132_init_flags()
8452 chipio_set_control_flag(codec, in ca0132_init_flags()
8454 chipio_set_control_flag(codec, in ca0132_init_flags()
8457 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8458 chipio_set_control_flag(codec, in ca0132_init_flags()
8460 chipio_set_control_flag(codec, in ca0132_init_flags()
8462 chipio_set_control_flag(codec, in ca0132_init_flags()
8464 chipio_set_control_flag(codec, in ca0132_init_flags()
8466 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
8473 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
8475 struct ca0132_spec *spec = codec->spec; in ca0132_init_params()
8478 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_init_params()
8479 chipio_set_conn_rate(codec, 0x0B, SR_48_000); in ca0132_init_params()
8480 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); in ca0132_init_params()
8481 chipio_set_control_param(codec, 0, 0); in ca0132_init_params()
8482 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_init_params()
8485 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
8486 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
8489 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
8491 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
8492 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
8493 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
8494 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
8495 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
8496 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
8498 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
8499 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
8500 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
8503 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
8506 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp_images()
8519 codec->card->dev) != 0) in ca0132_download_dsp_images()
8520 codec_dbg(codec, "Desktop firmware not found."); in ca0132_download_dsp_images()
8522 codec_dbg(codec, "Desktop firmware selected."); in ca0132_download_dsp_images()
8526 codec->card->dev) != 0) in ca0132_download_dsp_images()
8527 codec_dbg(codec, "Recon3Di alt firmware not detected."); in ca0132_download_dsp_images()
8529 codec_dbg(codec, "Recon3Di firmware selected."); in ca0132_download_dsp_images()
8539 codec_dbg(codec, "Default firmware selected."); in ca0132_download_dsp_images()
8541 codec->card->dev) != 0) in ca0132_download_dsp_images()
8546 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
8547 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
8551 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
8559 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
8561 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
8570 chipio_enable_clocks(codec); in ca0132_download_dsp()
8574 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
8582 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
8585 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
8588 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
8590 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
8591 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_process_dsp_response()
8593 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
8597 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
8600 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
8602 struct ca0132_spec *spec = codec->spec; in hp_callback()
8608 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
8614 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
8616 struct ca0132_spec *spec = codec->spec; in amic_callback()
8619 ca0132_alt_select_in(codec); in amic_callback()
8621 ca0132_select_mic(codec); in amic_callback()
8624 static void ca0132_setup_unsol(struct hda_codec *codec) in ca0132_setup_unsol() argument
8626 struct ca0132_spec *spec = codec->spec; in ca0132_setup_unsol()
8627 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_setup_unsol()
8628 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_setup_unsol()
8630 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_setup_unsol()
8634 snd_hda_jack_detect_enable_callback(codec, in ca0132_setup_unsol()
8713 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
8715 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
8729 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_chip()
8730 chipio_write_no_mutex(codec, 0x18b0a4, 0x000000c2); in ca0132_init_chip()
8732 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_init_chip()
8734 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_init_chip()
8790 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
8798 static void r3di_gpio_shutdown(struct hda_codec *codec) in r3di_gpio_shutdown() argument
8800 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); in r3di_gpio_shutdown()
8806 static void sbz_region2_exit(struct hda_codec *codec) in sbz_region2_exit() argument
8808 struct ca0132_spec *spec = codec->spec; in sbz_region2_exit()
8816 ca0113_mmio_gpio_set(codec, 0, false); in sbz_region2_exit()
8817 ca0113_mmio_gpio_set(codec, 1, false); in sbz_region2_exit()
8818 ca0113_mmio_gpio_set(codec, 4, true); in sbz_region2_exit()
8819 ca0113_mmio_gpio_set(codec, 5, false); in sbz_region2_exit()
8820 ca0113_mmio_gpio_set(codec, 7, false); in sbz_region2_exit()
8823 static void sbz_set_pin_ctl_default(struct hda_codec *codec) in sbz_set_pin_ctl_default() argument
8828 snd_hda_codec_write(codec, 0x11, 0, in sbz_set_pin_ctl_default()
8832 snd_hda_codec_write(codec, pins[i], 0, in sbz_set_pin_ctl_default()
8836 static void ca0132_clear_unsolicited(struct hda_codec *codec) in ca0132_clear_unsolicited() argument
8842 snd_hda_codec_write(codec, pins[i], 0, in ca0132_clear_unsolicited()
8848 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, in sbz_gpio_shutdown_commands() argument
8852 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8855 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8859 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8863 static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec) in zxr_dbpro_power_state_shutdown() argument
8869 snd_hda_codec_write(codec, pins[i], 0, in zxr_dbpro_power_state_shutdown()
8873 static void sbz_exit_chip(struct hda_codec *codec) in sbz_exit_chip() argument
8875 chipio_set_stream_control(codec, 0x03, 0); in sbz_exit_chip()
8876 chipio_set_stream_control(codec, 0x04, 0); in sbz_exit_chip()
8879 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); in sbz_exit_chip()
8880 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); in sbz_exit_chip()
8881 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); in sbz_exit_chip()
8883 chipio_set_stream_control(codec, 0x14, 0); in sbz_exit_chip()
8884 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8886 chipio_set_conn_rate(codec, 0x41, SR_192_000); in sbz_exit_chip()
8887 chipio_set_conn_rate(codec, 0x91, SR_192_000); in sbz_exit_chip()
8889 chipio_write(codec, 0x18a020, 0x00000083); in sbz_exit_chip()
8891 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); in sbz_exit_chip()
8892 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); in sbz_exit_chip()
8893 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); in sbz_exit_chip()
8895 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8897 chipio_set_control_param(codec, 0x0D, 0x24); in sbz_exit_chip()
8899 ca0132_clear_unsolicited(codec); in sbz_exit_chip()
8900 sbz_set_pin_ctl_default(codec); in sbz_exit_chip()
8902 snd_hda_codec_write(codec, 0x0B, 0, in sbz_exit_chip()
8905 sbz_region2_exit(codec); in sbz_exit_chip()
8908 static void r3d_exit_chip(struct hda_codec *codec) in r3d_exit_chip() argument
8910 ca0132_clear_unsolicited(codec); in r3d_exit_chip()
8911 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in r3d_exit_chip()
8912 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); in r3d_exit_chip()
8915 static void ae5_exit_chip(struct hda_codec *codec) in ae5_exit_chip() argument
8917 chipio_set_stream_control(codec, 0x03, 0); in ae5_exit_chip()
8918 chipio_set_stream_control(codec, 0x04, 0); in ae5_exit_chip()
8920 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae5_exit_chip()
8921 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8922 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8923 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae5_exit_chip()
8924 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae5_exit_chip()
8925 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x00); in ae5_exit_chip()
8926 ca0113_mmio_gpio_set(codec, 0, false); in ae5_exit_chip()
8927 ca0113_mmio_gpio_set(codec, 1, false); in ae5_exit_chip()
8929 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae5_exit_chip()
8930 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae5_exit_chip()
8932 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_exit_chip()
8934 chipio_set_stream_control(codec, 0x18, 0); in ae5_exit_chip()
8935 chipio_set_stream_control(codec, 0x0c, 0); in ae5_exit_chip()
8937 snd_hda_codec_write(codec, 0x01, 0, 0x724, 0x83); in ae5_exit_chip()
8940 static void ae7_exit_chip(struct hda_codec *codec) in ae7_exit_chip() argument
8942 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
8943 chipio_set_stream_source_dest(codec, 0x21, 0xc8, 0xc8); in ae7_exit_chip()
8944 chipio_set_stream_channels(codec, 0x21, 0); in ae7_exit_chip()
8945 chipio_set_control_param(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_exit_chip()
8946 chipio_set_control_param(codec, 0x20, 0x01); in ae7_exit_chip()
8948 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_exit_chip()
8950 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
8951 chipio_set_stream_control(codec, 0x0c, 0); in ae7_exit_chip()
8953 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_exit_chip()
8954 snd_hda_codec_write(codec, 0x15, 0, 0x724, 0x83); in ae7_exit_chip()
8955 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_exit_chip()
8956 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_exit_chip()
8957 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x00); in ae7_exit_chip()
8958 ca0113_mmio_gpio_set(codec, 0, false); in ae7_exit_chip()
8959 ca0113_mmio_gpio_set(codec, 1, false); in ae7_exit_chip()
8960 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae7_exit_chip()
8962 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae7_exit_chip()
8963 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae7_exit_chip()
8966 static void zxr_exit_chip(struct hda_codec *codec) in zxr_exit_chip() argument
8968 chipio_set_stream_control(codec, 0x03, 0); in zxr_exit_chip()
8969 chipio_set_stream_control(codec, 0x04, 0); in zxr_exit_chip()
8970 chipio_set_stream_control(codec, 0x14, 0); in zxr_exit_chip()
8971 chipio_set_stream_control(codec, 0x0C, 0); in zxr_exit_chip()
8973 chipio_set_conn_rate(codec, 0x41, SR_192_000); in zxr_exit_chip()
8974 chipio_set_conn_rate(codec, 0x91, SR_192_000); in zxr_exit_chip()
8976 chipio_write(codec, 0x18a020, 0x00000083); in zxr_exit_chip()
8978 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in zxr_exit_chip()
8979 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in zxr_exit_chip()
8981 ca0132_clear_unsolicited(codec); in zxr_exit_chip()
8982 sbz_set_pin_ctl_default(codec); in zxr_exit_chip()
8983 snd_hda_codec_write(codec, 0x0B, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); in zxr_exit_chip()
8985 ca0113_mmio_gpio_set(codec, 5, false); in zxr_exit_chip()
8986 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
8987 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
8988 ca0113_mmio_gpio_set(codec, 0, false); in zxr_exit_chip()
8989 ca0113_mmio_gpio_set(codec, 4, true); in zxr_exit_chip()
8990 ca0113_mmio_gpio_set(codec, 0, true); in zxr_exit_chip()
8991 ca0113_mmio_gpio_set(codec, 5, true); in zxr_exit_chip()
8992 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
8993 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
8996 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
9000 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
9001 dsp_reset(codec); in ca0132_exit_chip()
9012 static void sbz_dsp_startup_check(struct hda_codec *codec) in sbz_dsp_startup_check() argument
9014 struct ca0132_spec *spec = codec->spec; in sbz_dsp_startup_check()
9027 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
9035 codec_dbg(codec, "Startup Check: %d ", failure); in sbz_dsp_startup_check()
9037 codec_info(codec, "DSP not initialized properly. Attempting to fix."); in sbz_dsp_startup_check()
9044 codec_info(codec, "Reloading... Tries left: %d", reload); in sbz_dsp_startup_check()
9045 sbz_exit_chip(codec); in sbz_dsp_startup_check()
9047 snd_hda_codec_init(codec); in sbz_dsp_startup_check()
9050 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
9061 codec_info(codec, "DSP fixed."); in sbz_dsp_startup_check()
9066 …codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to c… in sbz_dsp_startup_check()
9077 static void ca0132_alt_vol_setup(struct hda_codec *codec) in ca0132_alt_vol_setup() argument
9079 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9080 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9081 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9082 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9083 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9084 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9085 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9086 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9092 static void sbz_pre_dsp_setup(struct hda_codec *codec) in sbz_pre_dsp_setup() argument
9094 struct ca0132_spec *spec = codec->spec; in sbz_pre_dsp_setup()
9099 chipio_write(codec, 0x18b0a4, 0x000000c2); in sbz_pre_dsp_setup()
9101 snd_hda_codec_write(codec, 0x11, 0, in sbz_pre_dsp_setup()
9105 static void r3d_pre_dsp_setup(struct hda_codec *codec) in r3d_pre_dsp_setup() argument
9107 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3d_pre_dsp_setup()
9109 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); in r3d_pre_dsp_setup()
9111 snd_hda_codec_write(codec, 0x11, 0, in r3d_pre_dsp_setup()
9115 static void r3di_pre_dsp_setup(struct hda_codec *codec) in r3di_pre_dsp_setup() argument
9117 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3di_pre_dsp_setup()
9119 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); in r3di_pre_dsp_setup()
9120 chipio_8051_write_exram(codec, 0x1920, 0x00); in r3di_pre_dsp_setup()
9121 chipio_8051_write_exram(codec, 0x1921, 0x40); in r3di_pre_dsp_setup()
9123 snd_hda_codec_write(codec, 0x11, 0, in r3di_pre_dsp_setup()
9132 static void zxr_pre_dsp_setup(struct hda_codec *codec) in zxr_pre_dsp_setup() argument
9138 chipio_write(codec, 0x189000, 0x0001f100); in zxr_pre_dsp_setup()
9140 chipio_write(codec, 0x18900c, 0x0001f100); in zxr_pre_dsp_setup()
9149 chipio_8051_write_exram(codec, 0xfa92, 0x22); in zxr_pre_dsp_setup()
9151 chipio_8051_write_pll_pmu(codec, 0x51, 0x98); in zxr_pre_dsp_setup()
9153 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x82); in zxr_pre_dsp_setup()
9154 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 3); in zxr_pre_dsp_setup()
9156 chipio_write(codec, 0x18902c, 0x00000000); in zxr_pre_dsp_setup()
9158 chipio_write(codec, 0x18902c, 0x00000003); in zxr_pre_dsp_setup()
9162 chipio_8051_write_pll_pmu(codec, addr[i], data[i]); in zxr_pre_dsp_setup()
9205 static void ca0132_mmio_init_sbz(struct hda_codec *codec) in ca0132_mmio_init_sbz() argument
9207 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_sbz()
9255 static void ca0132_mmio_init_ae5(struct hda_codec *codec) in ca0132_mmio_init_ae5() argument
9257 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_ae5()
9287 static void ca0132_mmio_init(struct hda_codec *codec) in ca0132_mmio_init() argument
9289 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init()
9295 ca0132_mmio_init_sbz(codec); in ca0132_mmio_init()
9298 ca0132_mmio_init_ae5(codec); in ca0132_mmio_init()
9320 static void ae5_register_set(struct hda_codec *codec) in ae5_register_set() argument
9322 struct ca0132_spec *spec = codec->spec; in ae5_register_set()
9330 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); in ae5_register_set()
9332 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_register_set()
9333 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae5_register_set()
9361 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9362 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_register_set()
9364 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_register_set()
9367 chipio_8051_write_direct(codec, 0x90, 0x00); in ae5_register_set()
9368 chipio_8051_write_direct(codec, 0x90, 0x10); in ae5_register_set()
9371 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9379 static void ca0132_alt_init(struct hda_codec *codec) in ca0132_alt_init() argument
9381 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init()
9383 ca0132_alt_vol_setup(codec); in ca0132_alt_init()
9387 codec_dbg(codec, "SBZ alt_init"); in ca0132_alt_init()
9388 ca0132_gpio_init(codec); in ca0132_alt_init()
9389 sbz_pre_dsp_setup(codec); in ca0132_alt_init()
9390 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9391 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9394 codec_dbg(codec, "R3DI alt_init"); in ca0132_alt_init()
9395 ca0132_gpio_init(codec); in ca0132_alt_init()
9396 ca0132_gpio_setup(codec); in ca0132_alt_init()
9397 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); in ca0132_alt_init()
9398 r3di_pre_dsp_setup(codec); in ca0132_alt_init()
9399 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9400 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); in ca0132_alt_init()
9403 r3d_pre_dsp_setup(codec); in ca0132_alt_init()
9404 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9405 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9408 ca0132_gpio_init(codec); in ca0132_alt_init()
9409 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9410 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9411 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9412 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9413 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9416 ca0132_gpio_init(codec); in ca0132_alt_init()
9417 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9418 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9419 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9420 chipio_write(codec, 0x18b008, 0x000000f8); in ca0132_alt_init()
9421 chipio_write(codec, 0x18b008, 0x000000f0); in ca0132_alt_init()
9422 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9423 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9426 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9427 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9428 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9429 zxr_pre_dsp_setup(codec); in ca0132_alt_init()
9436 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
9438 struct ca0132_spec *spec = codec->spec; in ca0132_init()
9454 dsp_loaded = dspload_is_loaded(codec); in ca0132_init()
9460 sbz_dsp_startup_check(codec); in ca0132_init()
9470 ca0132_mmio_init(codec); in ca0132_init()
9472 CLASS(snd_hda_power_pm, pm)(codec); in ca0132_init()
9475 ae5_register_set(codec); in ca0132_init()
9477 ca0132_init_params(codec); in ca0132_init()
9478 ca0132_init_flags(codec); in ca0132_init()
9480 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
9483 ca0132_alt_init(codec); in ca0132_init()
9485 ca0132_download_dsp(codec); in ca0132_init()
9487 ca0132_refresh_widget_caps(codec); in ca0132_init()
9492 r3d_setup_defaults(codec); in ca0132_init()
9496 sbz_setup_defaults(codec); in ca0132_init()
9499 ae5_setup_defaults(codec); in ca0132_init()
9502 ae7_setup_defaults(codec); in ca0132_init()
9505 ca0132_setup_defaults(codec); in ca0132_init()
9506 ca0132_init_analog_mic2(codec); in ca0132_init()
9507 ca0132_init_dmic(codec); in ca0132_init()
9512 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
9514 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
9517 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
9519 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
9522 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
9523 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9525 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9530 ca0132_gpio_setup(codec); in ca0132_init()
9532 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
9534 ca0132_alt_select_out(codec); in ca0132_init()
9535 ca0132_alt_select_in(codec); in ca0132_init()
9537 ca0132_select_out(codec); in ca0132_init()
9538 ca0132_select_mic(codec); in ca0132_init()
9541 snd_hda_jack_report_sync(codec); in ca0132_init()
9549 ca0132_pe_switch_set(codec); in ca0132_init()
9555 static int dbpro_init(struct hda_codec *codec) in dbpro_init() argument
9557 struct ca0132_spec *spec = codec->spec; in dbpro_init()
9561 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in dbpro_init()
9562 init_input(codec, cfg->dig_in_pin, spec->dig_in); in dbpro_init()
9565 init_input(codec, spec->input_pins[i], spec->adcs[i]); in dbpro_init()
9570 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
9572 struct ca0132_spec *spec = codec->spec; in ca0132_free()
9575 snd_hda_power_up(codec); in ca0132_free()
9578 sbz_exit_chip(codec); in ca0132_free()
9581 zxr_exit_chip(codec); in ca0132_free()
9584 r3d_exit_chip(codec); in ca0132_free()
9587 ae5_exit_chip(codec); in ca0132_free()
9590 ae7_exit_chip(codec); in ca0132_free()
9593 r3di_gpio_shutdown(codec); in ca0132_free()
9599 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
9600 ca0132_exit_chip(codec); in ca0132_free()
9602 snd_hda_power_down(codec); in ca0132_free()
9605 pci_iounmap(codec->bus->pci, spec->mem_base); in ca0132_free()
9608 kfree(codec->spec); in ca0132_free()
9611 static void dbpro_free(struct hda_codec *codec) in dbpro_free() argument
9613 struct ca0132_spec *spec = codec->spec; in dbpro_free()
9615 zxr_dbpro_power_state_shutdown(codec); in dbpro_free()
9618 kfree(codec->spec); in dbpro_free()
9621 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
9623 struct ca0132_spec *spec = codec->spec; in ca0132_config()
9639 codec_dbg(codec, "%s: QUIRK_ALIENWARE applied.\n", __func__); in ca0132_config()
9640 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
9643 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); in ca0132_config()
9644 snd_hda_apply_pincfgs(codec, sbz_pincfgs); in ca0132_config()
9647 codec_dbg(codec, "%s: QUIRK_ZXR applied.\n", __func__); in ca0132_config()
9648 snd_hda_apply_pincfgs(codec, zxr_pincfgs); in ca0132_config()
9651 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); in ca0132_config()
9652 snd_hda_apply_pincfgs(codec, r3d_pincfgs); in ca0132_config()
9655 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); in ca0132_config()
9656 snd_hda_apply_pincfgs(codec, r3di_pincfgs); in ca0132_config()
9659 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__); in ca0132_config()
9660 snd_hda_apply_pincfgs(codec, ae5_pincfgs); in ca0132_config()
9663 codec_dbg(codec, "%s: QUIRK_AE7 applied.\n", __func__); in ca0132_config()
9664 snd_hda_apply_pincfgs(codec, ae7_pincfgs); in ca0132_config()
9824 (snd_hda_query_pin_caps(codec, spec->unsol_tag_hp) & AC_PINCAP_PRES_DETECT) && in ca0132_config()
9825 !(get_defcfg_misc(snd_hda_codec_get_pincfg(codec, spec->unsol_tag_hp)) & in ca0132_config()
9830 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
9834 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
9877 static void sbz_detect_quirk(struct hda_codec *codec) in sbz_detect_quirk() argument
9879 switch (codec->core.subsystem_id) { in sbz_detect_quirk()
9881 codec->fixup_id = QUIRK_ZXR; in sbz_detect_quirk()
9884 codec->fixup_id = QUIRK_ZXR_DBPRO; in sbz_detect_quirk()
9887 codec->fixup_id = QUIRK_SBZ; in sbz_detect_quirk()
9892 static void ca0132_codec_remove(struct hda_codec *codec) in ca0132_codec_remove() argument
9894 struct ca0132_spec *spec = codec->spec; in ca0132_codec_remove()
9897 return dbpro_free(codec); in ca0132_codec_remove()
9899 return ca0132_free(codec); in ca0132_codec_remove()
9902 static int ca0132_codec_probe(struct hda_codec *codec, in ca0132_codec_probe() argument
9908 codec_dbg(codec, "%s\n", __func__); in ca0132_codec_probe()
9913 codec->spec = spec; in ca0132_codec_probe()
9914 spec->codec = codec; in ca0132_codec_probe()
9917 snd_hda_pick_fixup(codec, ca0132_quirk_models, ca0132_quirks, NULL); in ca0132_codec_probe()
9919 sbz_detect_quirk(codec); in ca0132_codec_probe()
9921 codec->pcm_format_first = 1; in ca0132_codec_probe()
9922 codec->no_sticky_stream = 1; in ca0132_codec_probe()
9932 snd_hda_codec_set_name(codec, "Sound Blaster Z"); in ca0132_codec_probe()
9936 snd_hda_codec_set_name(codec, "Sound Blaster ZxR"); in ca0132_codec_probe()
9942 snd_hda_codec_set_name(codec, "Recon3D"); in ca0132_codec_probe()
9946 snd_hda_codec_set_name(codec, "Recon3Di"); in ca0132_codec_probe()
9950 snd_hda_codec_set_name(codec, "Sound BlasterX AE-5"); in ca0132_codec_probe()
9954 snd_hda_codec_set_name(codec, "Sound Blaster AE-7"); in ca0132_codec_probe()
9986 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); in ca0132_codec_probe()
9988 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); in ca0132_codec_probe()
9989 codec->fixup_id = QUIRK_NONE; in ca0132_codec_probe()
9999 ca0132_init_chip(codec); in ca0132_codec_probe()
10001 ca0132_config(codec); in ca0132_codec_probe()
10003 err = ca0132_prepare_verbs(codec); in ca0132_codec_probe()
10007 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in ca0132_codec_probe()
10011 ca0132_setup_unsol(codec); in ca0132_codec_probe()
10016 ca0132_codec_remove(codec); in ca0132_codec_probe()
10020 static int ca0132_codec_build_controls(struct hda_codec *codec) in ca0132_codec_build_controls() argument
10022 struct ca0132_spec *spec = codec->spec; in ca0132_codec_build_controls()
10025 return dbpro_build_controls(codec); in ca0132_codec_build_controls()
10027 return ca0132_build_controls(codec); in ca0132_codec_build_controls()
10030 static int ca0132_codec_build_pcms(struct hda_codec *codec) in ca0132_codec_build_pcms() argument
10032 struct ca0132_spec *spec = codec->spec; in ca0132_codec_build_pcms()
10035 return dbpro_build_pcms(codec); in ca0132_codec_build_pcms()
10037 return ca0132_build_pcms(codec); in ca0132_codec_build_pcms()
10040 static int ca0132_codec_init(struct hda_codec *codec) in ca0132_codec_init() argument
10042 struct ca0132_spec *spec = codec->spec; in ca0132_codec_init()
10045 return dbpro_init(codec); in ca0132_codec_init()
10047 return ca0132_init(codec); in ca0132_codec_init()
10050 static int ca0132_codec_suspend(struct hda_codec *codec) in ca0132_codec_suspend() argument
10052 struct ca0132_spec *spec = codec->spec; in ca0132_codec_suspend()