Lines Matching full:codec
1135 struct hda_codec *codec; member
1181 #define ca0132_quirk(spec) ((spec)->codec->fixup_id)
1525 * CA0132 codec access
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 err = chipio_write_data(codec, data); in chipio_write()
1707 static int chipio_write_no_mutex(struct hda_codec *codec, in chipio_write_no_mutex() argument
1714 err = chipio_write_address(codec, chip_addx); in chipio_write_no_mutex()
1718 err = chipio_write_data(codec, data); in chipio_write_no_mutex()
1730 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
1735 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
1739 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
1743 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
1754 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
1757 struct ca0132_spec *spec = codec->spec; in chipio_read()
1763 err = chipio_write_address(codec, chip_addx); in chipio_read()
1767 err = chipio_read_data(codec, data); in chipio_read()
1779 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1788 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1795 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1798 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1803 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1807 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1808 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1811 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1822 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, in chipio_set_control_param_no_mutex() argument
1829 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1832 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param_no_mutex()
1833 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1836 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param_no_mutex()
1846 static void chipio_set_stream_source_dest(struct hda_codec *codec, in chipio_set_stream_source_dest() argument
1849 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1851 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1853 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_source_dest()
1860 static void chipio_set_stream_channels(struct hda_codec *codec, in chipio_set_stream_channels() argument
1863 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1865 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_channels()
1872 static void chipio_set_stream_control(struct hda_codec *codec, in chipio_set_stream_control() argument
1875 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1877 chipio_set_control_param_no_mutex(codec, in chipio_set_stream_control()
1884 static void chipio_get_stream_control(struct hda_codec *codec, in chipio_get_stream_control() argument
1887 chipio_set_control_param_no_mutex(codec, in chipio_get_stream_control()
1889 *enable = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_get_stream_control()
1897 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, in chipio_set_conn_rate_no_mutex() argument
1900 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1902 chipio_set_control_param_no_mutex(codec, in chipio_set_conn_rate_no_mutex()
1909 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1912 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1913 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1922 static void chipio_8051_write_direct(struct hda_codec *codec, in chipio_8051_write_direct() argument
1928 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, verb, addr); in chipio_8051_write_direct()
1939 static void chipio_8051_set_address(struct hda_codec *codec, unsigned int addr) in chipio_8051_set_address() argument
1945 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_address()
1950 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_address()
1954 static void chipio_8051_set_data(struct hda_codec *codec, unsigned int data) in chipio_8051_set_data() argument
1957 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_data()
1961 static unsigned int chipio_8051_get_data(struct hda_codec *codec) in chipio_8051_get_data() argument
1963 return snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_get_data()
1968 static void chipio_8051_set_data_pll(struct hda_codec *codec, unsigned int data) in chipio_8051_set_data_pll() argument
1971 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_8051_set_data_pll()
1975 static void chipio_8051_write_exram(struct hda_codec *codec, in chipio_8051_write_exram() argument
1978 struct ca0132_spec *spec = codec->spec; in chipio_8051_write_exram()
1982 chipio_8051_set_address(codec, addr); in chipio_8051_write_exram()
1983 chipio_8051_set_data(codec, data); in chipio_8051_write_exram()
1988 static void chipio_8051_write_exram_no_mutex(struct hda_codec *codec, in chipio_8051_write_exram_no_mutex() argument
1991 chipio_8051_set_address(codec, addr); in chipio_8051_write_exram_no_mutex()
1992 chipio_8051_set_data(codec, data); in chipio_8051_write_exram_no_mutex()
1996 static void chipio_8051_read_exram(struct hda_codec *codec, in chipio_8051_read_exram() argument
1999 chipio_8051_set_address(codec, addr); in chipio_8051_read_exram()
2000 *data = chipio_8051_get_data(codec); in chipio_8051_read_exram()
2003 static void chipio_8051_write_pll_pmu(struct hda_codec *codec, in chipio_8051_write_pll_pmu() argument
2006 struct ca0132_spec *spec = codec->spec; in chipio_8051_write_pll_pmu()
2010 chipio_8051_set_address(codec, addr & 0xff); in chipio_8051_write_pll_pmu()
2011 chipio_8051_set_data_pll(codec, data); in chipio_8051_write_pll_pmu()
2016 static void chipio_8051_write_pll_pmu_no_mutex(struct hda_codec *codec, in chipio_8051_write_pll_pmu_no_mutex() argument
2019 chipio_8051_set_address(codec, addr & 0xff); in chipio_8051_write_pll_pmu_no_mutex()
2020 chipio_8051_set_data_pll(codec, data); in chipio_8051_write_pll_pmu_no_mutex()
2026 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
2028 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
2032 chipio_8051_write_pll_pmu_no_mutex(codec, 0x00, 0xff); in chipio_enable_clocks()
2033 chipio_8051_write_pll_pmu_no_mutex(codec, 0x05, 0x0b); in chipio_enable_clocks()
2034 chipio_8051_write_pll_pmu_no_mutex(codec, 0x06, 0xff); in chipio_enable_clocks()
2042 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
2050 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
2062 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
2068 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
2080 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
2082 struct ca0132_spec *spec = codec->spec; in dspio_write()
2085 dspio_write_wait(codec); in dspio_write()
2088 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
2093 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
2099 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
2111 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
2122 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
2131 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
2135 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
2139 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
2144 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
2150 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
2164 status = dspio_read(codec, buffer++); in dspio_read_multiple()
2173 status = dspio_read(codec, &dummy); in dspio_read_multiple()
2243 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
2251 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
2255 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
2257 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
2261 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
2268 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
2279 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
2286 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
2325 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
2357 * @codec: the HDA codec
2369 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
2386 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
2391 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
2404 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
2409 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
2428 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
2431 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
2434 codec_dbg(codec, "NULL reply\n"); in dspio_scp()
2441 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
2451 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
2454 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, in dspio_set_param()
2458 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
2461 return dspio_set_param(codec, mod_id, 0x20, req, &data, in dspio_set_uint_param()
2468 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
2473 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
2474 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_alloc_dma_chan()
2479 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
2484 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
2488 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
2489 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
2497 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
2502 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
2503 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
2505 status = dspio_scp(codec, MASTERCONTROL, 0x20, in dspio_free_dma_chan()
2510 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
2514 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
2522 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
2528 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
2538 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2545 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
2557 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
2562 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
2564 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
2569 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
2600 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
2604 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
2610 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
2622 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
2625 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
2629 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
2630 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
2637 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
2644 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
2647 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
2651 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2654 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
2664 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
2666 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
2669 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
2672 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
2676 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2679 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
2685 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
2687 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
2691 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
2693 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2696 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
2699 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
2701 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
2704 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
2707 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
2709 codec_dbg(codec, in dsp_dma_setup_common()
2715 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
2723 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
2741 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
2744 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
2750 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
2754 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
2768 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
2771 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
2774 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
2779 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
2782 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
2785 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
2793 status = chipio_write(codec, in dsp_dma_setup()
2796 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
2799 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
2801 codec_dbg(codec, in dsp_dma_setup()
2806 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
2814 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
2820 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
2823 status = chipio_read(codec, in dsp_dma_start()
2827 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
2830 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
2836 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
2839 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
2842 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
2850 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
2856 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
2859 status = chipio_read(codec, in dsp_dma_stop()
2863 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
2866 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
2871 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
2874 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
2877 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
2885 * @codec: the HDA codec
2893 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
2903 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2911 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2915 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2919 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
2923 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
2934 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
2938 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2942 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
2946 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
2954 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2960 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2963 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2967 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2970 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2975 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2986 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2992 return dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2998 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
3002 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
3004 status = dsp_free_router_ports(codec); in dsp_free_ports()
3006 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
3009 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
3018 struct hda_codec *codec; member
3030 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
3051 struct hda_codec *codec = dma->codec; in dma_reset() local
3052 struct ca0132_spec *spec = codec->spec; in dma_reset()
3056 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
3058 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
3083 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
3115 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
3166 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
3174 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
3181 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
3183 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
3195 * @codec: the HDA codec
3206 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
3242 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
3243 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3247 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
3256 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
3263 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
3273 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
3286 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
3294 codec_dbg(codec, in dspxfr_one_seg()
3301 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
3315 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
3319 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
3322 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
3329 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
3333 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
3336 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
3337 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
3344 status = chipio_write_multiple(codec, in dspxfr_one_seg()
3353 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
3361 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
3369 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
3382 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
3392 * @codec: the HDA codec
3402 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
3409 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
3431 dma_engine->codec = codec; in dspxfr_image()
3432 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
3439 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
3443 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
3447 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
3456 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
3458 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
3465 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
3468 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
3473 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3476 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
3482 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
3486 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
3500 status = dsp_free_ports(codec); in dspxfr_image()
3505 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
3510 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
3513 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
3523 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
3525 struct ca0132_spec *spec = codec->spec; in dspload_post_setup()
3526 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
3529 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
3530 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
3533 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
3540 * @codec: the HDA codec
3555 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
3566 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
3583 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
3585 status = dsp_reset(codec); in dspload_image()
3590 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
3591 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
3597 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
3599 dspload_post_setup(codec); in dspload_image()
3600 status = dsp_set_run_state(codec); in dspload_image()
3603 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
3610 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
3615 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
3622 #define dspload_is_loaded(codec) false argument
3625 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
3630 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
3631 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
3637 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
3656 static void ca0113_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, in ca0113_mmio_gpio_set() argument
3659 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_gpio_set()
3676 static void ca0113_mmio_command_set(struct hda_codec *codec, unsigned int group, in ca0113_mmio_command_set() argument
3679 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set()
3715 static void ca0113_mmio_command_set_type2(struct hda_codec *codec, in ca0113_mmio_command_set_type2() argument
3718 struct ca0132_spec *spec = codec->spec; in ca0113_mmio_command_set_type2()
3755 static void ca0132_gpio_init(struct hda_codec *codec) in ca0132_gpio_init() argument
3757 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_init()
3763 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3764 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ca0132_gpio_init()
3765 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); in ca0132_gpio_init()
3768 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ca0132_gpio_init()
3769 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); in ca0132_gpio_init()
3778 static void ca0132_gpio_setup(struct hda_codec *codec) in ca0132_gpio_setup() argument
3780 struct ca0132_spec *spec = codec->spec; in ca0132_gpio_setup()
3784 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3786 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3788 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3790 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3794 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3796 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3798 snd_hda_codec_write(codec, 0x01, 0, in ca0132_gpio_setup()
3848 static void r3di_gpio_mic_set(struct hda_codec *codec, in r3di_gpio_mic_set() argument
3854 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_mic_set()
3864 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_mic_set()
3868 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, in r3di_gpio_dsp_status_set() argument
3874 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); in r3di_gpio_dsp_status_set()
3879 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3886 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3893 snd_hda_codec_write(codec, codec->core.afg, 0, in r3di_gpio_dsp_status_set()
3901 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
3906 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
3908 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
3914 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
3917 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
3927 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
3933 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
3936 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
3961 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
3964 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
3965 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
3969 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
3974 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
3975 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
3980 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
3983 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
3984 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
3988 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
3991 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
3992 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
3999 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
4004 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
4011 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
4014 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
4019 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
4024 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
4027 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
4237 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
4248 snd_hda_power_up(codec); in tuning_ctl_set()
4249 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, in tuning_ctl_set()
4252 snd_hda_power_down(codec); in tuning_ctl_set()
4260 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
4261 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
4286 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
4287 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
4300 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
4321 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
4322 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
4335 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
4356 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
4357 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
4370 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
4378 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
4415 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
4418 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
4424 err = add_tuning_control(codec, in add_tuning_ctls()
4436 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
4438 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
4458 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
4460 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
4467 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
4469 snd_hda_power_up_pm(codec); in ca0132_select_out()
4474 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
4485 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
4488 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4493 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4498 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4500 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4502 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4504 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4508 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4510 snd_hda_set_pin_ctl(codec, spec->out_pins[1], 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 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
4521 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
4526 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
4531 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4533 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4535 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
4537 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
4541 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
4543 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
4546 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
4548 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
4553 snd_hda_power_down_pm(codec); in ca0132_select_out()
4558 static int ae5_headphone_gain_set(struct hda_codec *codec, long val);
4559 static int zxr_headphone_gain_set(struct hda_codec *codec, long val);
4560 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
4562 static void ae5_mmio_select_out(struct hda_codec *codec) in ae5_mmio_select_out() argument
4564 struct ca0132_spec *spec = codec->spec; in ae5_mmio_select_out()
4574 ca0113_mmio_command_set(codec, out_cmds->group[i], in ae5_mmio_select_out()
4579 static int ca0132_alt_set_full_range_speaker(struct hda_codec *codec) in ca0132_alt_set_full_range_speaker() argument
4581 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_full_range_speaker()
4593 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4600 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4605 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4615 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_set_full_range_speaker()
4624 static int ca0132_alt_surround_set_bass_redirection(struct hda_codec *codec, in ca0132_alt_surround_set_bass_redirection() argument
4627 struct ca0132_spec *spec = codec->spec; in ca0132_alt_surround_set_bass_redirection()
4637 err = dspio_set_uint_param(codec, 0x96, SPEAKER_BASS_REDIRECT, tmp); in ca0132_alt_surround_set_bass_redirection()
4644 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_surround_set_bass_redirection()
4657 static void ca0132_alt_select_out_get_quirk_data(struct hda_codec *codec, in ca0132_alt_select_out_get_quirk_data() argument
4660 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_get_quirk_data()
4673 static int ca0132_alt_select_out_quirk_set(struct hda_codec *codec) in ca0132_alt_select_out_quirk_set() argument
4677 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out_quirk_set()
4681 ca0132_alt_select_out_get_quirk_data(codec, &quirk_data); in ca0132_alt_select_out_quirk_set()
4687 ae5_mmio_select_out(codec); in ca0132_alt_select_out_quirk_set()
4690 gpio_data = snd_hda_codec_read(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4698 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_alt_select_out_quirk_set()
4704 ca0113_mmio_gpio_set(codec, out_info->mmio_gpio_pin[i], in ca0132_alt_select_out_quirk_set()
4711 err = dspio_set_uint_param(codec, in ca0132_alt_select_out_quirk_set()
4720 chipio_set_control_param(codec, 0x0d, out_info->dac2port); in ca0132_alt_select_out_quirk_set()
4723 chipio_write(codec, out_info->chipio_write_addr, in ca0132_alt_select_out_quirk_set()
4730 ae5_headphone_gain_set(codec, 2); in ca0132_alt_select_out_quirk_set()
4732 zxr_headphone_gain_set(codec, 0); in ca0132_alt_select_out_quirk_set()
4735 ae5_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4738 zxr_headphone_gain_set(codec, in ca0132_alt_select_out_quirk_set()
4746 static void ca0132_set_out_node_pincfg(struct hda_codec *codec, hda_nid_t nid, in ca0132_set_out_node_pincfg() argument
4751 pin_ctl = snd_hda_codec_read(codec, nid, 0, in ca0132_set_out_node_pincfg()
4756 snd_hda_set_pin_ctl(codec, nid, pin_ctl); in ca0132_set_out_node_pincfg()
4767 static int ca0132_alt_select_out(struct hda_codec *codec) in ca0132_alt_select_out() argument
4769 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_out()
4777 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_out()
4779 snd_hda_power_up_pm(codec); in ca0132_alt_select_out()
4789 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || in ca0132_alt_select_out()
4790 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); in ca0132_alt_select_out()
4802 err = dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_MUTE, FLOAT_ONE); in ca0132_alt_select_out()
4806 if (ca0132_alt_select_out_quirk_set(codec) < 0) in ca0132_alt_select_out()
4811 codec_dbg(codec, "%s speaker\n", __func__); in ca0132_alt_select_out()
4814 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4818 ca0132_set_out_node_pincfg(codec, spec->out_pins[1], 0, 0); in ca0132_alt_select_out()
4820 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 1, 0); in ca0132_alt_select_out()
4822 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 1, 0); in ca0132_alt_select_out()
4824 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 1, 0); in ca0132_alt_select_out()
4836 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_alt_select_out()
4842 codec_dbg(codec, "%s hp\n", __func__); in ca0132_alt_select_out()
4843 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_alt_select_out()
4847 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 0, 0); in ca0132_alt_select_out()
4848 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 0, 0); in ca0132_alt_select_out()
4849 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 0, 0); in ca0132_alt_select_out()
4852 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) in ca0132_alt_select_out()
4854 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) in ca0132_alt_select_out()
4857 ca0132_set_out_node_pincfg(codec, headphone_nid, 1, 1); in ca0132_alt_select_out()
4860 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); in ca0132_alt_select_out()
4862 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); in ca0132_alt_select_out()
4874 ca0132_effects_set(codec, X_BASS, in ca0132_alt_select_out()
4878 err = dspio_set_uint_param(codec, 0x8f, 0x01, FLOAT_ZERO); in ca0132_alt_select_out()
4886 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4892 err = ca0132_alt_surround_set_bass_redirection(codec, in ca0132_alt_select_out()
4895 err = ca0132_alt_surround_set_bass_redirection(codec, 0); in ca0132_alt_select_out()
4898 err = dspio_set_uint_param(codec, 0x96, in ca0132_alt_select_out()
4904 err = ca0132_alt_set_full_range_speaker(codec); in ca0132_alt_select_out()
4910 snd_hda_power_down_pm(codec); in ca0132_alt_select_out()
4922 ca0132_alt_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4924 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
4926 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
4929 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
4933 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
4934 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
4935 static void resume_mic1(struct hda_codec *codec, unsigned int oldval);
4936 static int stop_mic1(struct hda_codec *codec);
4937 static int ca0132_cvoice_switch_set(struct hda_codec *codec);
4938 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val);
4943 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
4945 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
4954 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
4955 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
4956 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
4961 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4963 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4965 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
4966 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
4971 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
4973 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
4975 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
4981 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) in ca0132_alt_set_vipsource() argument
4983 struct ca0132_spec *spec = codec->spec; in ca0132_alt_set_vipsource()
4989 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_set_vipsource()
4991 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_set_vipsource()
4992 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_set_vipsource()
4997 codec_dbg(codec, "%s: off.", __func__); in ca0132_alt_set_vipsource()
4998 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_alt_set_vipsource()
5001 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
5003 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_set_vipsource()
5004 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_set_vipsource()
5006 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_set_vipsource()
5018 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
5021 codec_dbg(codec, "%s: on.", __func__); in ca0132_alt_set_vipsource()
5022 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_alt_set_vipsource()
5023 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_alt_set_vipsource()
5025 chipio_set_conn_rate(codec, 0x0F, SR_16_000); in ca0132_alt_set_vipsource()
5031 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_set_vipsource()
5034 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_alt_set_vipsource()
5037 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_alt_set_vipsource()
5040 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_set_vipsource()
5041 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_set_vipsource()
5052 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
5054 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
5058 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
5060 snd_hda_power_up_pm(codec); in ca0132_select_mic()
5065 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
5077 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
5078 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
5079 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
5081 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
5086 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
5087 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
5088 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
5090 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
5093 snd_hda_power_down_pm(codec); in ca0132_select_mic()
5104 static int ca0132_alt_select_in(struct hda_codec *codec) in ca0132_alt_select_in() argument
5106 struct ca0132_spec *spec = codec->spec; in ca0132_alt_select_in()
5109 codec_dbg(codec, "%s\n", __func__); in ca0132_alt_select_in()
5111 snd_hda_power_up_pm(codec); in ca0132_alt_select_in()
5113 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_select_in()
5114 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_select_in()
5123 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
5130 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
5134 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5138 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5140 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5142 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5144 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5151 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5152 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5154 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5156 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5158 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5159 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5162 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5163 chipio_write(codec, 0x18B09C, 0x0000000C); in ca0132_alt_select_in()
5166 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5167 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5170 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5171 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5176 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5179 ca0132_mic_boost_set(codec, 0); in ca0132_alt_select_in()
5183 ca0113_mmio_gpio_set(codec, 0, false); in ca0132_alt_select_in()
5186 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); in ca0132_alt_select_in()
5189 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ca0132_alt_select_in()
5192 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5193 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, in ca0132_alt_select_in()
5195 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, in ca0132_alt_select_in()
5197 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); in ca0132_alt_select_in()
5203 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5204 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5206 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5212 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5217 chipio_write(codec, 0x18B098, 0x00000000); in ca0132_alt_select_in()
5218 chipio_write(codec, 0x18B09C, 0x00000000); in ca0132_alt_select_in()
5223 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5224 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5230 ca0113_mmio_gpio_set(codec, 0, true); in ca0132_alt_select_in()
5231 ca0113_mmio_gpio_set(codec, 5, false); in ca0132_alt_select_in()
5235 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); in ca0132_alt_select_in()
5239 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); in ca0132_alt_select_in()
5247 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_select_in()
5248 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_select_in()
5250 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_select_in()
5252 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_select_in()
5254 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_select_in()
5255 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_select_in()
5259 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5260 chipio_write(codec, 0x18B09C, 0x000000CC); in ca0132_alt_select_in()
5263 chipio_write(codec, 0x18B098, 0x0000000C); in ca0132_alt_select_in()
5264 chipio_write(codec, 0x18B09C, 0x0000004C); in ca0132_alt_select_in()
5269 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_select_in()
5272 ca0132_cvoice_switch_set(codec); in ca0132_alt_select_in()
5274 snd_hda_power_down_pm(codec); in ca0132_alt_select_in()
5281 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
5285 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
5309 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
5311 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
5322 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
5331 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
5333 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
5378 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_effects_set()
5397 dspio_set_uint_param(codec, 0x47, 0x00, tmp); in ca0132_effects_set()
5406 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
5410 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
5422 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
5424 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
5428 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
5432 ca0132_alt_select_out(codec); in ca0132_pe_switch_set()
5438 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
5444 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
5446 struct ca0132_spec *spec = codec->spec; in stop_mic1()
5447 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
5450 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
5457 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
5459 struct ca0132_spec *spec = codec->spec; in resume_mic1()
5462 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
5470 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
5472 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
5477 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
5484 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
5487 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
5490 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
5492 ret |= ca0132_alt_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5494 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
5495 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
5499 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
5501 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
5505 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5508 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
5514 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) in ca0132_alt_mic_boost_set() argument
5516 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_set()
5519 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_alt_mic_boost_set()
5524 static int ae5_headphone_gain_set(struct hda_codec *codec, long val) in ae5_headphone_gain_set() argument
5529 ca0113_mmio_command_set(codec, 0x48, 0x11 + i, in ae5_headphone_gain_set()
5538 static int zxr_headphone_gain_set(struct hda_codec *codec, long val) in zxr_headphone_gain_set() argument
5540 ca0113_mmio_gpio_set(codec, 1, val); in zxr_headphone_gain_set()
5548 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
5553 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
5561 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5563 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5572 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5578 ca0132_alt_select_out(codec); in ca0132_vnode_switch_set()
5580 ca0132_select_out(codec); in ca0132_vnode_switch_set()
5585 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
5590 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
5596 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
5602 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
5609 static void ca0132_alt_bass_redirection_xover_set(struct hda_codec *codec, in ca0132_alt_bass_redirection_xover_set() argument
5612 snd_hda_power_up(codec); in ca0132_alt_bass_redirection_xover_set()
5614 dspio_set_param(codec, 0x96, 0x20, SPEAKER_BASS_REDIRECT_XOVER_FREQ, in ca0132_alt_bass_redirection_xover_set()
5617 snd_hda_power_down(codec); in ca0132_alt_bass_redirection_xover_set()
5629 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_slider_ctl_set() argument
5643 snd_hda_power_up(codec); in ca0132_alt_slider_ctl_set()
5649 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5658 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, in ca0132_alt_slider_ctl_set()
5663 snd_hda_power_down(codec); in ca0132_alt_slider_ctl_set()
5671 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_ctl_get() local
5672 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_ctl_get()
5687 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_slider_ctl_get() local
5688 struct ca0132_spec *spec = codec->spec; in ca0132_alt_slider_ctl_get()
5730 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_xbass_xover_slider_put() local
5731 struct ca0132_spec *spec = codec->spec; in ca0132_alt_xbass_xover_slider_put()
5750 ca0132_alt_bass_redirection_xover_set(codec, *cur_val); in ca0132_alt_xbass_xover_slider_put()
5752 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); in ca0132_alt_xbass_xover_slider_put()
5760 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_effect_slider_put() local
5761 struct ca0132_spec *spec = codec->spec; in ca0132_alt_effect_slider_put()
5774 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); in ca0132_alt_effect_slider_put()
5807 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_get() local
5808 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_get()
5817 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_mic_boost_put() local
5818 struct ca0132_spec *spec = codec->spec; in ca0132_alt_mic_boost_put()
5825 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", in ca0132_alt_mic_boost_put()
5831 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); in ca0132_alt_mic_boost_put()
5861 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_get() local
5862 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_get()
5871 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_headphone_gain_put() local
5872 struct ca0132_spec *spec = codec->spec; in ae5_headphone_gain_put()
5879 codec_dbg(codec, "ae5_headphone_gain: boost=%d\n", in ae5_headphone_gain_put()
5885 ae5_headphone_gain_set(codec, spec->ae5_headphone_gain_val); in ae5_headphone_gain_put()
5914 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_get() local
5915 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_get()
5924 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ae5_sound_filter_put() local
5925 struct ca0132_spec *spec = codec->spec; in ae5_sound_filter_put()
5932 codec_dbg(codec, "ae5_sound_filter: %s\n", in ae5_sound_filter_put()
5937 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, in ae5_sound_filter_put()
5964 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_get() local
5965 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_get()
5974 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_input_source_put() local
5975 struct ca0132_spec *spec = codec->spec; in ca0132_alt_input_source_put()
5989 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", in ca0132_alt_input_source_put()
5994 ca0132_alt_select_in(codec); in ca0132_alt_input_source_put()
6016 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_get() local
6017 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_get()
6026 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_output_select_put() local
6027 struct ca0132_spec *spec = codec->spec; in ca0132_alt_output_select_put()
6035 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", in ca0132_alt_output_select_put()
6043 ca0132_alt_select_out(codec); in ca0132_alt_output_select_put()
6067 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_get() local
6068 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_get()
6077 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_speaker_channel_cfg_put() local
6078 struct ca0132_spec *spec = codec->spec; in ca0132_alt_speaker_channel_cfg_put()
6085 codec_dbg(codec, "ca0132_alt_speaker_channels: sel=%d, channels=%s\n", in ca0132_alt_speaker_channel_cfg_put()
6091 ca0132_alt_select_out(codec); in ca0132_alt_speaker_channel_cfg_put()
6120 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_get() local
6121 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_get()
6130 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_svm_setting_put() local
6131 struct ca0132_spec *spec = codec->spec; in ca0132_alt_svm_setting_put()
6140 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", in ca0132_alt_svm_setting_put()
6160 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_alt_svm_setting_put()
6184 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_get() local
6185 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_get()
6194 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_eq_preset_put() local
6195 struct ca0132_spec *spec = codec->spec; in ca0132_alt_eq_preset_put()
6203 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, in ca0132_alt_eq_preset_put()
6210 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, in ca0132_alt_eq_preset_put()
6241 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
6242 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
6251 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
6252 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
6259 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
6267 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
6277 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
6286 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
6287 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
6338 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
6339 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
6345 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
6348 snd_hda_power_up(codec); in ca0132_switch_put()
6366 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
6373 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
6381 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
6390 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6394 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
6403 changed = zxr_headphone_gain_set(codec, *valp); in ca0132_switch_put()
6413 ca0132_alt_set_full_range_speaker(codec); in ca0132_switch_put()
6421 ca0132_alt_surround_set_bass_redirection(codec, *valp); in ca0132_switch_put()
6427 snd_hda_power_down(codec); in ca0132_switch_put()
6439 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) in ca0132_alt_dsp_volume_put() argument
6441 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_volume_put()
6452 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6459 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6464 dspio_set_uint_param(codec, in ca0132_alt_dsp_volume_put()
6472 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
6473 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
6484 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
6489 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
6494 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
6499 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
6510 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
6511 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
6531 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
6532 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
6551 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
6556 snd_hda_power_up(codec); in ca0132_volume_put()
6557 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
6563 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
6564 snd_hda_power_down(codec); in ca0132_volume_put()
6578 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_alt_volume_put() local
6579 struct ca0132_spec *spec = codec->spec; in ca0132_alt_volume_put()
6605 snd_hda_power_up(codec); in ca0132_alt_volume_put()
6606 ca0132_alt_dsp_volume_put(codec, vnid); in ca0132_alt_volume_put()
6607 mutex_lock(&codec->control_mutex); in ca0132_alt_volume_put()
6609 mutex_unlock(&codec->control_mutex); in ca0132_alt_volume_put()
6610 snd_hda_power_down(codec); in ca0132_alt_volume_put()
6618 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
6619 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
6630 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6635 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6640 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
6645 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
6654 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, in ca0132_alt_add_effect_slider() argument
6681 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in ca0132_alt_add_effect_slider()
6689 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
6692 struct ca0132_spec *spec = codec->spec; in add_fx_switch()
6705 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
6708 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
6716 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
6720 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) in add_ca0132_alt_eq_presets() argument
6728 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, in add_ca0132_alt_eq_presets()
6729 snd_ctl_new1(&knew, codec)); in add_ca0132_alt_eq_presets()
6737 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) in ca0132_alt_add_svm_enum() argument
6745 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, in ca0132_alt_add_svm_enum()
6746 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_svm_enum()
6754 static int ca0132_alt_add_output_enum(struct hda_codec *codec) in ca0132_alt_add_output_enum() argument
6762 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, in ca0132_alt_add_output_enum()
6763 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_output_enum()
6771 static int ca0132_alt_add_speaker_channel_cfg_enum(struct hda_codec *codec) in ca0132_alt_add_speaker_channel_cfg_enum() argument
6779 return snd_hda_ctl_add(codec, SPEAKER_CHANNEL_CFG_ENUM, in ca0132_alt_add_speaker_channel_cfg_enum()
6780 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_speaker_channel_cfg_enum()
6788 static int ca0132_alt_add_front_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_front_full_range_switch() argument
6794 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_FRONT, in ca0132_alt_add_front_full_range_switch()
6795 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_front_full_range_switch()
6798 static int ca0132_alt_add_rear_full_range_switch(struct hda_codec *codec) in ca0132_alt_add_rear_full_range_switch() argument
6804 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_REAR, in ca0132_alt_add_rear_full_range_switch()
6805 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_rear_full_range_switch()
6814 static int ca0132_alt_add_bass_redirection_crossover(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_crossover() argument
6826 return snd_hda_ctl_add(codec, BASS_REDIRECTION_XOVER, in ca0132_alt_add_bass_redirection_crossover()
6827 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_crossover()
6830 static int ca0132_alt_add_bass_redirection_switch(struct hda_codec *codec) in ca0132_alt_add_bass_redirection_switch() argument
6837 return snd_hda_ctl_add(codec, BASS_REDIRECTION, in ca0132_alt_add_bass_redirection_switch()
6838 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_bass_redirection_switch()
6846 static int ca0132_alt_add_input_enum(struct hda_codec *codec) in ca0132_alt_add_input_enum() argument
6854 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, in ca0132_alt_add_input_enum()
6855 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_input_enum()
6862 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) in ca0132_alt_add_mic_boost_enum() argument
6870 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, in ca0132_alt_add_mic_boost_enum()
6871 snd_ctl_new1(&knew, codec)); in ca0132_alt_add_mic_boost_enum()
6880 static int ae5_add_headphone_gain_enum(struct hda_codec *codec) in ae5_add_headphone_gain_enum() argument
6888 return snd_hda_ctl_add(codec, AE5_HEADPHONE_GAIN_ENUM, in ae5_add_headphone_gain_enum()
6889 snd_ctl_new1(&knew, codec)); in ae5_add_headphone_gain_enum()
6897 static int ae5_add_sound_filter_enum(struct hda_codec *codec) in ae5_add_sound_filter_enum() argument
6905 return snd_hda_ctl_add(codec, AE5_SOUND_FILTER_ENUM, in ae5_add_sound_filter_enum()
6906 snd_ctl_new1(&knew, codec)); in ae5_add_sound_filter_enum()
6909 static int zxr_add_headphone_gain_switch(struct hda_codec *codec) in zxr_add_headphone_gain_switch() argument
6915 return snd_hda_ctl_add(codec, ZXR_HEADPHONE_GAIN, in zxr_add_headphone_gain_switch()
6916 snd_ctl_new1(&knew, codec)); in zxr_add_headphone_gain_switch()
6946 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) in ca0132_alt_add_chmap_ctls() argument
6951 list_for_each_entry(pcm, &codec->pcm_list_head, list) { in ca0132_alt_add_chmap_ctls()
6963 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); in ca0132_alt_add_chmap_ctls()
7039 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
7041 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
7047 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
7053 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, in ca0132_build_controls()
7055 snd_hda_add_vmaster(codec, "Master Playback Volume", in ca0132_build_controls()
7058 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", in ca0132_build_controls()
7078 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
7085 * If codec has use_alt_controls set to true, add effect level sliders, in ca0132_build_controls()
7090 err = ca0132_alt_add_svm_enum(codec); in ca0132_build_controls()
7094 err = add_ca0132_alt_eq_presets(codec); in ca0132_build_controls()
7098 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
7103 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
7110 err = ca0132_alt_add_effect_slider(codec, in ca0132_build_controls()
7118 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, in ca0132_build_controls()
7124 err = add_fx_switch(codec, PLAY_ENHANCEMENT, in ca0132_build_controls()
7129 err = add_fx_switch(codec, CRYSTAL_VOICE, in ca0132_build_controls()
7134 err = add_voicefx(codec); in ca0132_build_controls()
7139 * If the codec uses alt_functions, you need the enumerated controls in ca0132_build_controls()
7144 err = ca0132_alt_add_output_enum(codec); in ca0132_build_controls()
7147 err = ca0132_alt_add_speaker_channel_cfg_enum(codec); in ca0132_build_controls()
7150 err = ca0132_alt_add_front_full_range_switch(codec); in ca0132_build_controls()
7153 err = ca0132_alt_add_rear_full_range_switch(codec); in ca0132_build_controls()
7156 err = ca0132_alt_add_bass_redirection_crossover(codec); in ca0132_build_controls()
7159 err = ca0132_alt_add_bass_redirection_switch(codec); in ca0132_build_controls()
7162 err = ca0132_alt_add_mic_boost_enum(codec); in ca0132_build_controls()
7170 err = ca0132_alt_add_input_enum(codec); in ca0132_build_controls()
7179 err = ae5_add_headphone_gain_enum(codec); in ca0132_build_controls()
7182 err = ae5_add_sound_filter_enum(codec); in ca0132_build_controls()
7187 err = zxr_add_headphone_gain_switch(codec); in ca0132_build_controls()
7196 add_tuning_ctls(codec); in ca0132_build_controls()
7199 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
7204 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
7208 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
7215 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
7221 ca0132_alt_add_chmap_ctls(codec); in ca0132_build_controls()
7226 static int dbpro_build_controls(struct hda_codec *codec) in dbpro_build_controls() argument
7228 struct ca0132_spec *spec = codec->spec; in dbpro_build_controls()
7232 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in dbpro_build_controls()
7239 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in dbpro_build_controls()
7290 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
7292 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
7295 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
7313 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
7322 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
7332 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
7350 static int dbpro_build_pcms(struct hda_codec *codec) in dbpro_build_pcms() argument
7352 struct ca0132_spec *spec = codec->spec; in dbpro_build_pcms()
7355 info = snd_hda_codec_pcm_new(codec, "CA0132 Alt Analog"); in dbpro_build_pcms()
7366 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in dbpro_build_pcms()
7384 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
7387 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
7388 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
7389 snd_hda_codec_write(codec, pin, 0, in init_output()
7393 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
7394 snd_hda_codec_write(codec, dac, 0, in init_output()
7398 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
7401 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
7402 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
7403 snd_hda_codec_write(codec, pin, 0, in init_input()
7407 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
7408 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
7412 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7414 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
7419 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
7423 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
7425 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
7431 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
7433 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
7438 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
7440 oldval = stop_mic1(codec); in ca0132_set_dmic()
7441 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
7445 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7449 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7453 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
7457 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
7462 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
7466 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
7468 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
7469 resume_mic1(codec, oldval); in ca0132_set_dmic()
7475 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
7477 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
7490 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7500 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7516 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
7523 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
7525 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
7529 chipio_8051_write_exram_no_mutex(codec, 0x1920, 0x00); in ca0132_init_analog_mic2()
7530 chipio_8051_write_exram_no_mutex(codec, 0x192d, 0x00); in ca0132_init_analog_mic2()
7535 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
7537 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
7540 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
7541 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
7544 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7547 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
7550 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7551 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
7557 static void ca0132_alt_free_active_dma_channels(struct hda_codec *codec) in ca0132_alt_free_active_dma_channels() argument
7563 status = chipio_read(codec, DSPDMAC_CHNLSTART_MODULE_OFFSET, &tmp); in ca0132_alt_free_active_dma_channels()
7572 codec_dbg(codec, "%s: Failed to read active DSP DMA channel register.\n", in ca0132_alt_free_active_dma_channels()
7582 if (dsp_is_dma_active(codec, i)) { in ca0132_alt_free_active_dma_channels()
7583 status = dspio_free_dma_chan(codec, i); in ca0132_alt_free_active_dma_channels()
7585 codec_dbg(codec, "%s: Failed to free active DSP DMA channel %d.\n", in ca0132_alt_free_active_dma_channels()
7612 static void ca0132_alt_start_dsp_audio_streams(struct hda_codec *codec) in ca0132_alt_start_dsp_audio_streams() argument
7615 struct ca0132_spec *spec = codec->spec; in ca0132_alt_start_dsp_audio_streams()
7625 chipio_get_stream_control(codec, dsp_dma_stream_ids[i], &tmp); in ca0132_alt_start_dsp_audio_streams()
7628 chipio_set_stream_control(codec, in ca0132_alt_start_dsp_audio_streams()
7640 ca0132_alt_free_active_dma_channels(codec); in ca0132_alt_start_dsp_audio_streams()
7645 chipio_set_stream_channels(codec, 0x0c, 6); in ca0132_alt_start_dsp_audio_streams()
7648 chipio_set_stream_control(codec, in ca0132_alt_start_dsp_audio_streams()
7702 static void chipio_remap_stream(struct hda_codec *codec, in chipio_remap_stream() argument
7708 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, in chipio_remap_stream()
7720 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, in chipio_remap_stream()
7729 codec_info(codec, "%s: Stream 0x%02x ports aren't allocated, remap failed!\n", in chipio_remap_stream()
7739 chipio_write_no_mutex(codec, in chipio_remap_stream()
7745 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); in chipio_remap_stream()
7769 static void ca0132_alt_init_speaker_tuning(struct hda_codec *codec) in ca0132_alt_init_speaker_tuning() argument
7771 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_speaker_tuning()
7792 dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_ENABLE_CENTER_EQ, tmp); in ca0132_alt_init_speaker_tuning()
7797 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7802 dspio_set_uint_param(codec, 0x96, i, tmp); in ca0132_alt_init_speaker_tuning()
7806 dspio_set_uint_param(codec, 0x96, in ca0132_alt_init_speaker_tuning()
7813 static void ca0132_alt_init_analog_mics(struct hda_codec *codec) in ca0132_alt_init_analog_mics() argument
7815 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init_analog_mics()
7819 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_init_analog_mics()
7820 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_init_analog_mics()
7822 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7826 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_init_analog_mics()
7829 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); in ca0132_alt_init_analog_mics()
7830 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); in ca0132_alt_init_analog_mics()
7832 chipio_set_conn_rate(codec, 0x0F, SR_96_000); in ca0132_alt_init_analog_mics()
7834 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_alt_init_analog_mics()
7843 static void sbz_connect_streams(struct hda_codec *codec) in sbz_connect_streams() argument
7845 struct ca0132_spec *spec = codec->spec; in sbz_connect_streams()
7849 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); in sbz_connect_streams()
7852 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); in sbz_connect_streams()
7855 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); in sbz_connect_streams()
7856 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); in sbz_connect_streams()
7857 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); in sbz_connect_streams()
7858 chipio_set_stream_channels(codec, 0x14, 2); in sbz_connect_streams()
7859 chipio_set_stream_control(codec, 0x14, 1); in sbz_connect_streams()
7861 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); in sbz_connect_streams()
7872 static void sbz_chipio_startup_data(struct hda_codec *codec) in sbz_chipio_startup_data() argument
7875 struct ca0132_spec *spec = codec->spec; in sbz_chipio_startup_data()
7878 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); in sbz_chipio_startup_data()
7881 chipio_remap_stream(codec, &stream_remap_data[0]); in sbz_chipio_startup_data()
7899 chipio_remap_stream(codec, dsp_out_remap_data); in sbz_chipio_startup_data()
7901 codec_dbg(codec, "Startup Data exited, mutex released.\n"); in sbz_chipio_startup_data()
7905 static void ca0132_alt_dsp_initial_mic_setup(struct hda_codec *codec) in ca0132_alt_dsp_initial_mic_setup() argument
7907 struct ca0132_spec *spec = codec->spec; in ca0132_alt_dsp_initial_mic_setup()
7910 chipio_set_stream_control(codec, 0x03, 0); in ca0132_alt_dsp_initial_mic_setup()
7911 chipio_set_stream_control(codec, 0x04, 0); in ca0132_alt_dsp_initial_mic_setup()
7913 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7914 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_alt_dsp_initial_mic_setup()
7917 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_alt_dsp_initial_mic_setup()
7919 chipio_set_stream_control(codec, 0x03, 1); in ca0132_alt_dsp_initial_mic_setup()
7920 chipio_set_stream_control(codec, 0x04, 1); in ca0132_alt_dsp_initial_mic_setup()
7924 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7925 chipio_write(codec, 0x18b09C, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7928 chipio_write(codec, 0x18b098, 0x0000000c); in ca0132_alt_dsp_initial_mic_setup()
7929 chipio_write(codec, 0x18b09c, 0x0000004c); in ca0132_alt_dsp_initial_mic_setup()
7936 static void ae5_post_dsp_register_set(struct hda_codec *codec) in ae5_post_dsp_register_set() argument
7938 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_register_set()
7940 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_post_dsp_register_set()
7941 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae5_post_dsp_register_set()
7956 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x3f); in ae5_post_dsp_register_set()
7957 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_post_dsp_register_set()
7958 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_register_set()
7961 static void ae5_post_dsp_param_setup(struct hda_codec *codec) in ae5_post_dsp_param_setup() argument
7968 chipio_set_control_param(codec, 3, 0); in ae5_post_dsp_param_setup()
7973 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae5_post_dsp_param_setup()
7975 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae5_post_dsp_param_setup()
7976 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_post_dsp_param_setup()
7978 chipio_8051_write_exram(codec, 0xfa92, 0x22); in ae5_post_dsp_param_setup()
7981 static void ae5_post_dsp_pll_setup(struct hda_codec *codec) in ae5_post_dsp_pll_setup() argument
7983 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); in ae5_post_dsp_pll_setup()
7984 chipio_8051_write_pll_pmu(codec, 0x45, 0xcc); in ae5_post_dsp_pll_setup()
7985 chipio_8051_write_pll_pmu(codec, 0x40, 0xcb); in ae5_post_dsp_pll_setup()
7986 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); in ae5_post_dsp_pll_setup()
7987 chipio_8051_write_pll_pmu(codec, 0x51, 0x8d); in ae5_post_dsp_pll_setup()
7990 static void ae5_post_dsp_stream_setup(struct hda_codec *codec) in ae5_post_dsp_stream_setup() argument
7992 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_stream_setup()
7996 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae5_post_dsp_stream_setup()
7998 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae5_post_dsp_stream_setup()
8000 chipio_set_stream_source_dest(codec, 0x5, 0x43, 0x0); in ae5_post_dsp_stream_setup()
8002 chipio_set_stream_source_dest(codec, 0x18, 0x9, 0xd0); in ae5_post_dsp_stream_setup()
8003 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae5_post_dsp_stream_setup()
8004 chipio_set_stream_channels(codec, 0x18, 6); in ae5_post_dsp_stream_setup()
8005 chipio_set_stream_control(codec, 0x18, 1); in ae5_post_dsp_stream_setup()
8007 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae5_post_dsp_stream_setup()
8009 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); in ae5_post_dsp_stream_setup()
8011 ca0113_mmio_command_set(codec, 0x48, 0x01, 0x80); in ae5_post_dsp_stream_setup()
8016 static void ae5_post_dsp_startup_data(struct hda_codec *codec) in ae5_post_dsp_startup_data() argument
8018 struct ca0132_spec *spec = codec->spec; in ae5_post_dsp_startup_data()
8022 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae5_post_dsp_startup_data()
8023 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae5_post_dsp_startup_data()
8024 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae5_post_dsp_startup_data()
8025 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae5_post_dsp_startup_data()
8027 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
8028 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae5_post_dsp_startup_data()
8029 ca0113_mmio_command_set(codec, 0x48, 0x0b, 0x12); in ae5_post_dsp_startup_data()
8030 ca0113_mmio_command_set(codec, 0x48, 0x04, 0x00); in ae5_post_dsp_startup_data()
8031 ca0113_mmio_command_set(codec, 0x48, 0x06, 0x48); in ae5_post_dsp_startup_data()
8032 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); in ae5_post_dsp_startup_data()
8033 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_post_dsp_startup_data()
8034 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
8035 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
8036 ca0113_mmio_gpio_set(codec, 0, true); in ae5_post_dsp_startup_data()
8037 ca0113_mmio_gpio_set(codec, 1, true); in ae5_post_dsp_startup_data()
8038 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x80); in ae5_post_dsp_startup_data()
8040 chipio_write_no_mutex(codec, 0x18b03c, 0x00000012); in ae5_post_dsp_startup_data()
8042 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae5_post_dsp_startup_data()
8043 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae5_post_dsp_startup_data()
8048 static void ae7_post_dsp_setup_ports(struct hda_codec *codec) in ae7_post_dsp_setup_ports() argument
8050 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_setup_ports()
8055 chipio_remap_stream(codec, &stream_remap_data[1]); in ae7_post_dsp_setup_ports()
8057 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_post_dsp_setup_ports()
8058 ca0113_mmio_command_set(codec, 0x48, 0x0d, 0x40); in ae7_post_dsp_setup_ports()
8059 ca0113_mmio_command_set(codec, 0x48, 0x17, 0x00); in ae7_post_dsp_setup_ports()
8060 ca0113_mmio_command_set(codec, 0x48, 0x19, 0x00); in ae7_post_dsp_setup_ports()
8061 ca0113_mmio_command_set(codec, 0x48, 0x11, 0xff); in ae7_post_dsp_setup_ports()
8062 ca0113_mmio_command_set(codec, 0x48, 0x12, 0xff); in ae7_post_dsp_setup_ports()
8063 ca0113_mmio_command_set(codec, 0x48, 0x13, 0xff); in ae7_post_dsp_setup_ports()
8064 ca0113_mmio_command_set(codec, 0x48, 0x14, 0x7f); in ae7_post_dsp_setup_ports()
8069 static void ae7_post_dsp_asi_stream_setup(struct hda_codec *codec) in ae7_post_dsp_asi_stream_setup() argument
8071 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_stream_setup()
8075 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); in ae7_post_dsp_asi_stream_setup()
8076 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_post_dsp_asi_stream_setup()
8078 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); in ae7_post_dsp_asi_stream_setup()
8080 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_stream_setup()
8081 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_stream_setup()
8083 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_stream_setup()
8084 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_stream_setup()
8085 chipio_set_stream_control(codec, 0x18, 1); in ae7_post_dsp_asi_stream_setup()
8087 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); in ae7_post_dsp_asi_stream_setup()
8092 static void ae7_post_dsp_pll_setup(struct hda_codec *codec) in ae7_post_dsp_pll_setup() argument
8103 chipio_8051_write_pll_pmu_no_mutex(codec, addr[i], data[i]); in ae7_post_dsp_pll_setup()
8106 static void ae7_post_dsp_asi_setup_ports(struct hda_codec *codec) in ae7_post_dsp_asi_setup_ports() argument
8108 struct ca0132_spec *spec = codec->spec; in ae7_post_dsp_asi_setup_ports()
8119 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); in ae7_post_dsp_asi_setup_ports()
8121 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
8122 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); in ae7_post_dsp_asi_setup_ports()
8123 chipio_write_no_mutex(codec, 0x189024, 0x00014004); in ae7_post_dsp_asi_setup_ports()
8124 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); in ae7_post_dsp_asi_setup_ports()
8126 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
8127 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
8130 ca0113_mmio_command_set(codec, 0x48, target[i], data[i]); in ae7_post_dsp_asi_setup_ports()
8132 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
8133 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
8134 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
8136 chipio_set_stream_source_dest(codec, 0x21, 0x64, 0x56); in ae7_post_dsp_asi_setup_ports()
8137 chipio_set_stream_channels(codec, 0x21, 2); in ae7_post_dsp_asi_setup_ports()
8138 chipio_set_conn_rate_no_mutex(codec, 0x56, SR_8_000); in ae7_post_dsp_asi_setup_ports()
8140 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_post_dsp_asi_setup_ports()
8146 chipio_set_control_param_no_mutex(codec, 0x20, 0x21); in ae7_post_dsp_asi_setup_ports()
8148 chipio_write_no_mutex(codec, 0x18b038, 0x00000088); in ae7_post_dsp_asi_setup_ports()
8159 ca0113_mmio_gpio_set(codec, 0, 1); in ae7_post_dsp_asi_setup_ports()
8160 ca0113_mmio_gpio_set(codec, 1, 1); in ae7_post_dsp_asi_setup_ports()
8162 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup_ports()
8163 chipio_write_no_mutex(codec, 0x18b03c, 0x00000000); in ae7_post_dsp_asi_setup_ports()
8164 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); in ae7_post_dsp_asi_setup_ports()
8165 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); in ae7_post_dsp_asi_setup_ports()
8167 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); in ae7_post_dsp_asi_setup_ports()
8168 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); in ae7_post_dsp_asi_setup_ports()
8170 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); in ae7_post_dsp_asi_setup_ports()
8171 chipio_set_stream_channels(codec, 0x18, 6); in ae7_post_dsp_asi_setup_ports()
8177 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup_ports()
8178 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); in ae7_post_dsp_asi_setup_ports()
8188 static void ae7_post_dsp_asi_setup(struct hda_codec *codec) in ae7_post_dsp_asi_setup() argument
8190 chipio_8051_write_direct(codec, 0x93, 0x10); in ae7_post_dsp_asi_setup()
8192 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae7_post_dsp_asi_setup()
8194 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_post_dsp_asi_setup()
8195 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_post_dsp_asi_setup()
8197 chipio_set_control_param(codec, 3, 3); in ae7_post_dsp_asi_setup()
8198 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); in ae7_post_dsp_asi_setup()
8200 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); in ae7_post_dsp_asi_setup()
8201 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_post_dsp_asi_setup()
8202 snd_hda_codec_write(codec, 0x17, 0, 0x794, 0x00); in ae7_post_dsp_asi_setup()
8204 chipio_8051_write_exram(codec, 0xfa92, 0x22); in ae7_post_dsp_asi_setup()
8206 ae7_post_dsp_pll_setup(codec); in ae7_post_dsp_asi_setup()
8207 ae7_post_dsp_asi_stream_setup(codec); in ae7_post_dsp_asi_setup()
8209 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); in ae7_post_dsp_asi_setup()
8211 ae7_post_dsp_asi_setup_ports(codec); in ae7_post_dsp_asi_setup()
8217 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
8219 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
8231 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
8239 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
8242 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
8246 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
8247 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
8251 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
8255 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
8262 static void r3d_setup_defaults(struct hda_codec *codec) in r3d_setup_defaults() argument
8264 struct ca0132_spec *spec = codec->spec; in r3d_setup_defaults()
8272 ca0132_alt_init_analog_mics(codec); in r3d_setup_defaults()
8273 ca0132_alt_start_dsp_audio_streams(codec); in r3d_setup_defaults()
8277 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in r3d_setup_defaults()
8281 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in r3d_setup_defaults()
8282 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in r3d_setup_defaults()
8285 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in r3d_setup_defaults()
8288 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); in r3d_setup_defaults()
8292 ca0113_mmio_gpio_set(codec, 2, false); in r3d_setup_defaults()
8293 ca0113_mmio_gpio_set(codec, 4, true); in r3d_setup_defaults()
8300 dspio_set_uint_param(codec, in r3d_setup_defaults()
8312 static void sbz_setup_defaults(struct hda_codec *codec) in sbz_setup_defaults() argument
8314 struct ca0132_spec *spec = codec->spec; in sbz_setup_defaults()
8322 ca0132_alt_init_analog_mics(codec); in sbz_setup_defaults()
8323 ca0132_alt_start_dsp_audio_streams(codec); in sbz_setup_defaults()
8324 sbz_connect_streams(codec); in sbz_setup_defaults()
8325 sbz_chipio_startup_data(codec); in sbz_setup_defaults()
8332 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in sbz_setup_defaults()
8333 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in sbz_setup_defaults()
8337 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in sbz_setup_defaults()
8341 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in sbz_setup_defaults()
8342 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in sbz_setup_defaults()
8345 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in sbz_setup_defaults()
8347 ca0132_alt_dsp_initial_mic_setup(codec); in sbz_setup_defaults()
8353 dspio_set_uint_param(codec, in sbz_setup_defaults()
8360 ca0132_alt_init_speaker_tuning(codec); in sbz_setup_defaults()
8366 static void ae5_setup_defaults(struct hda_codec *codec) in ae5_setup_defaults() argument
8368 struct ca0132_spec *spec = codec->spec; in ae5_setup_defaults()
8376 ca0132_alt_init_analog_mics(codec); in ae5_setup_defaults()
8377 ca0132_alt_start_dsp_audio_streams(codec); in ae5_setup_defaults()
8381 dspio_set_uint_param(codec, 0x96, 0x29, tmp); in ae5_setup_defaults()
8382 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); in ae5_setup_defaults()
8383 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae5_setup_defaults()
8384 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae5_setup_defaults()
8386 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_setup_defaults()
8387 ca0113_mmio_gpio_set(codec, 0, false); in ae5_setup_defaults()
8388 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae5_setup_defaults()
8392 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae5_setup_defaults()
8393 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae5_setup_defaults()
8397 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae5_setup_defaults()
8401 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae5_setup_defaults()
8402 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae5_setup_defaults()
8405 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae5_setup_defaults()
8407 ca0132_alt_dsp_initial_mic_setup(codec); in ae5_setup_defaults()
8408 ae5_post_dsp_register_set(codec); in ae5_setup_defaults()
8409 ae5_post_dsp_param_setup(codec); in ae5_setup_defaults()
8410 ae5_post_dsp_pll_setup(codec); in ae5_setup_defaults()
8411 ae5_post_dsp_stream_setup(codec); in ae5_setup_defaults()
8412 ae5_post_dsp_startup_data(codec); in ae5_setup_defaults()
8418 dspio_set_uint_param(codec, in ae5_setup_defaults()
8425 ca0132_alt_init_speaker_tuning(codec); in ae5_setup_defaults()
8431 static void ae7_setup_defaults(struct hda_codec *codec) in ae7_setup_defaults() argument
8433 struct ca0132_spec *spec = codec->spec; in ae7_setup_defaults()
8441 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8442 ca0132_alt_start_dsp_audio_streams(codec); in ae7_setup_defaults()
8443 ae7_post_dsp_setup_ports(codec); in ae7_setup_defaults()
8446 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8448 dspio_set_uint_param(codec, 0x96, in ae7_setup_defaults()
8451 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae7_setup_defaults()
8454 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); in ae7_setup_defaults()
8455 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); in ae7_setup_defaults()
8457 ca0113_mmio_gpio_set(codec, 0, false); in ae7_setup_defaults()
8461 dspio_set_uint_param(codec, 0x37, 0x08, tmp); in ae7_setup_defaults()
8462 dspio_set_uint_param(codec, 0x37, 0x10, tmp); in ae7_setup_defaults()
8466 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ae7_setup_defaults()
8470 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ae7_setup_defaults()
8471 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ae7_setup_defaults()
8474 dspio_set_uint_param(codec, 0x32, 0x00, tmp); in ae7_setup_defaults()
8475 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); in ae7_setup_defaults()
8481 ca0132_alt_init_analog_mics(codec); in ae7_setup_defaults()
8483 ae7_post_dsp_asi_setup(codec); in ae7_setup_defaults()
8489 ca0113_mmio_gpio_set(codec, 0, true); in ae7_setup_defaults()
8490 ca0113_mmio_gpio_set(codec, 1, true); in ae7_setup_defaults()
8493 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x04); in ae7_setup_defaults()
8494 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x04); in ae7_setup_defaults()
8495 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x80); in ae7_setup_defaults()
8501 dspio_set_uint_param(codec, in ae7_setup_defaults()
8508 ca0132_alt_init_speaker_tuning(codec); in ae7_setup_defaults()
8514 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
8516 struct ca0132_spec *spec = codec->spec; in ca0132_init_flags()
8519 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); in ca0132_init_flags()
8520 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); in ca0132_init_flags()
8521 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); in ca0132_init_flags()
8522 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); in ca0132_init_flags()
8523 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); in ca0132_init_flags()
8524 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8525 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); in ca0132_init_flags()
8526 chipio_set_control_flag(codec, in ca0132_init_flags()
8528 chipio_set_control_flag(codec, in ca0132_init_flags()
8531 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
8532 chipio_set_control_flag(codec, in ca0132_init_flags()
8534 chipio_set_control_flag(codec, in ca0132_init_flags()
8536 chipio_set_control_flag(codec, in ca0132_init_flags()
8538 chipio_set_control_flag(codec, in ca0132_init_flags()
8540 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
8547 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
8549 struct ca0132_spec *spec = codec->spec; in ca0132_init_params()
8552 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_init_params()
8553 chipio_set_conn_rate(codec, 0x0B, SR_48_000); in ca0132_init_params()
8554 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); in ca0132_init_params()
8555 chipio_set_control_param(codec, 0, 0); in ca0132_init_params()
8556 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_init_params()
8559 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
8560 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
8563 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
8565 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
8566 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
8567 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
8568 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
8569 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
8570 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
8572 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
8573 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
8574 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
8577 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
8580 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp_images()
8593 codec->card->dev) != 0) in ca0132_download_dsp_images()
8594 codec_dbg(codec, "Desktop firmware not found."); in ca0132_download_dsp_images()
8596 codec_dbg(codec, "Desktop firmware selected."); in ca0132_download_dsp_images()
8600 codec->card->dev) != 0) in ca0132_download_dsp_images()
8601 codec_dbg(codec, "Recon3Di alt firmware not detected."); in ca0132_download_dsp_images()
8603 codec_dbg(codec, "Recon3Di firmware selected."); in ca0132_download_dsp_images()
8610 * exists for your particular codec. in ca0132_download_dsp_images()
8613 codec_dbg(codec, "Default firmware selected."); in ca0132_download_dsp_images()
8615 codec->card->dev) != 0) in ca0132_download_dsp_images()
8620 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
8621 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
8625 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
8633 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
8635 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
8644 chipio_enable_clocks(codec); in ca0132_download_dsp()
8648 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
8656 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
8659 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
8662 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
8664 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
8665 snd_hda_power_up_pm(codec); in ca0132_process_dsp_response()
8667 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
8671 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
8672 snd_hda_power_down_pm(codec); in ca0132_process_dsp_response()
8675 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
8677 struct ca0132_spec *spec = codec->spec; in hp_callback()
8683 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
8689 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
8691 struct ca0132_spec *spec = codec->spec; in amic_callback()
8694 ca0132_alt_select_in(codec); in amic_callback()
8696 ca0132_select_mic(codec); in amic_callback()
8699 static void ca0132_setup_unsol(struct hda_codec *codec) in ca0132_setup_unsol() argument
8701 struct ca0132_spec *spec = codec->spec; in ca0132_setup_unsol()
8702 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_setup_unsol()
8703 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_setup_unsol()
8705 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_setup_unsol()
8709 snd_hda_jack_detect_enable_callback(codec, in ca0132_setup_unsol()
8788 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
8790 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
8804 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_chip()
8805 chipio_write_no_mutex(codec, 0x18b0a4, 0x000000c2); in ca0132_init_chip()
8807 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_init_chip()
8809 snd_hda_codec_write(codec, codec->core.afg, 0, in ca0132_init_chip()
8865 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
8873 static void r3di_gpio_shutdown(struct hda_codec *codec) in r3di_gpio_shutdown() argument
8875 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); in r3di_gpio_shutdown()
8881 static void sbz_region2_exit(struct hda_codec *codec) in sbz_region2_exit() argument
8883 struct ca0132_spec *spec = codec->spec; in sbz_region2_exit()
8891 ca0113_mmio_gpio_set(codec, 0, false); in sbz_region2_exit()
8892 ca0113_mmio_gpio_set(codec, 1, false); in sbz_region2_exit()
8893 ca0113_mmio_gpio_set(codec, 4, true); in sbz_region2_exit()
8894 ca0113_mmio_gpio_set(codec, 5, false); in sbz_region2_exit()
8895 ca0113_mmio_gpio_set(codec, 7, false); in sbz_region2_exit()
8898 static void sbz_set_pin_ctl_default(struct hda_codec *codec) in sbz_set_pin_ctl_default() argument
8903 snd_hda_codec_write(codec, 0x11, 0, in sbz_set_pin_ctl_default()
8907 snd_hda_codec_write(codec, pins[i], 0, in sbz_set_pin_ctl_default()
8911 static void ca0132_clear_unsolicited(struct hda_codec *codec) in ca0132_clear_unsolicited() argument
8917 snd_hda_codec_write(codec, pins[i], 0, in ca0132_clear_unsolicited()
8923 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, in sbz_gpio_shutdown_commands() argument
8927 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8930 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8934 snd_hda_codec_write(codec, 0x01, 0, in sbz_gpio_shutdown_commands()
8938 static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec) in zxr_dbpro_power_state_shutdown() argument
8944 snd_hda_codec_write(codec, pins[i], 0, in zxr_dbpro_power_state_shutdown()
8948 static void sbz_exit_chip(struct hda_codec *codec) in sbz_exit_chip() argument
8950 chipio_set_stream_control(codec, 0x03, 0); in sbz_exit_chip()
8951 chipio_set_stream_control(codec, 0x04, 0); in sbz_exit_chip()
8954 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); in sbz_exit_chip()
8955 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); in sbz_exit_chip()
8956 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); in sbz_exit_chip()
8958 chipio_set_stream_control(codec, 0x14, 0); in sbz_exit_chip()
8959 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8961 chipio_set_conn_rate(codec, 0x41, SR_192_000); in sbz_exit_chip()
8962 chipio_set_conn_rate(codec, 0x91, SR_192_000); in sbz_exit_chip()
8964 chipio_write(codec, 0x18a020, 0x00000083); in sbz_exit_chip()
8966 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); in sbz_exit_chip()
8967 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); in sbz_exit_chip()
8968 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); in sbz_exit_chip()
8970 chipio_set_stream_control(codec, 0x0C, 0); in sbz_exit_chip()
8972 chipio_set_control_param(codec, 0x0D, 0x24); in sbz_exit_chip()
8974 ca0132_clear_unsolicited(codec); in sbz_exit_chip()
8975 sbz_set_pin_ctl_default(codec); in sbz_exit_chip()
8977 snd_hda_codec_write(codec, 0x0B, 0, in sbz_exit_chip()
8980 sbz_region2_exit(codec); in sbz_exit_chip()
8983 static void r3d_exit_chip(struct hda_codec *codec) in r3d_exit_chip() argument
8985 ca0132_clear_unsolicited(codec); in r3d_exit_chip()
8986 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in r3d_exit_chip()
8987 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); in r3d_exit_chip()
8990 static void ae5_exit_chip(struct hda_codec *codec) in ae5_exit_chip() argument
8992 chipio_set_stream_control(codec, 0x03, 0); in ae5_exit_chip()
8993 chipio_set_stream_control(codec, 0x04, 0); in ae5_exit_chip()
8995 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae5_exit_chip()
8996 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8997 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_exit_chip()
8998 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae5_exit_chip()
8999 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae5_exit_chip()
9000 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x00); in ae5_exit_chip()
9001 ca0113_mmio_gpio_set(codec, 0, false); in ae5_exit_chip()
9002 ca0113_mmio_gpio_set(codec, 1, false); in ae5_exit_chip()
9004 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae5_exit_chip()
9005 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae5_exit_chip()
9007 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae5_exit_chip()
9009 chipio_set_stream_control(codec, 0x18, 0); in ae5_exit_chip()
9010 chipio_set_stream_control(codec, 0x0c, 0); in ae5_exit_chip()
9012 snd_hda_codec_write(codec, 0x01, 0, 0x724, 0x83); in ae5_exit_chip()
9015 static void ae7_exit_chip(struct hda_codec *codec) in ae7_exit_chip() argument
9017 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
9018 chipio_set_stream_source_dest(codec, 0x21, 0xc8, 0xc8); in ae7_exit_chip()
9019 chipio_set_stream_channels(codec, 0x21, 0); in ae7_exit_chip()
9020 chipio_set_control_param(codec, CONTROL_PARAM_NODE_ID, 0x09); in ae7_exit_chip()
9021 chipio_set_control_param(codec, 0x20, 0x01); in ae7_exit_chip()
9023 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); in ae7_exit_chip()
9025 chipio_set_stream_control(codec, 0x18, 0); in ae7_exit_chip()
9026 chipio_set_stream_control(codec, 0x0c, 0); in ae7_exit_chip()
9028 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); in ae7_exit_chip()
9029 snd_hda_codec_write(codec, 0x15, 0, 0x724, 0x83); in ae7_exit_chip()
9030 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae7_exit_chip()
9031 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); in ae7_exit_chip()
9032 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x00); in ae7_exit_chip()
9033 ca0113_mmio_gpio_set(codec, 0, false); in ae7_exit_chip()
9034 ca0113_mmio_gpio_set(codec, 1, false); in ae7_exit_chip()
9035 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ae7_exit_chip()
9037 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in ae7_exit_chip()
9038 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in ae7_exit_chip()
9041 static void zxr_exit_chip(struct hda_codec *codec) in zxr_exit_chip() argument
9043 chipio_set_stream_control(codec, 0x03, 0); in zxr_exit_chip()
9044 chipio_set_stream_control(codec, 0x04, 0); in zxr_exit_chip()
9045 chipio_set_stream_control(codec, 0x14, 0); in zxr_exit_chip()
9046 chipio_set_stream_control(codec, 0x0C, 0); in zxr_exit_chip()
9048 chipio_set_conn_rate(codec, 0x41, SR_192_000); in zxr_exit_chip()
9049 chipio_set_conn_rate(codec, 0x91, SR_192_000); in zxr_exit_chip()
9051 chipio_write(codec, 0x18a020, 0x00000083); in zxr_exit_chip()
9053 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); in zxr_exit_chip()
9054 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); in zxr_exit_chip()
9056 ca0132_clear_unsolicited(codec); in zxr_exit_chip()
9057 sbz_set_pin_ctl_default(codec); in zxr_exit_chip()
9058 snd_hda_codec_write(codec, 0x0B, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); in zxr_exit_chip()
9060 ca0113_mmio_gpio_set(codec, 5, false); in zxr_exit_chip()
9061 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
9062 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
9063 ca0113_mmio_gpio_set(codec, 0, false); in zxr_exit_chip()
9064 ca0113_mmio_gpio_set(codec, 4, true); in zxr_exit_chip()
9065 ca0113_mmio_gpio_set(codec, 0, true); in zxr_exit_chip()
9066 ca0113_mmio_gpio_set(codec, 5, true); in zxr_exit_chip()
9067 ca0113_mmio_gpio_set(codec, 2, false); in zxr_exit_chip()
9068 ca0113_mmio_gpio_set(codec, 3, false); in zxr_exit_chip()
9071 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
9075 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
9076 dsp_reset(codec); in ca0132_exit_chip()
9087 static void sbz_dsp_startup_check(struct hda_codec *codec) in sbz_dsp_startup_check() argument
9089 struct ca0132_spec *spec = codec->spec; in sbz_dsp_startup_check()
9102 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
9110 codec_dbg(codec, "Startup Check: %d ", failure); in sbz_dsp_startup_check()
9112 codec_info(codec, "DSP not initialized properly. Attempting to fix."); in sbz_dsp_startup_check()
9119 codec_info(codec, "Reloading... Tries left: %d", reload); in sbz_dsp_startup_check()
9120 sbz_exit_chip(codec); in sbz_dsp_startup_check()
9122 codec->patch_ops.init(codec); in sbz_dsp_startup_check()
9125 chipio_read(codec, cur_address, &dsp_data_check[i]); in sbz_dsp_startup_check()
9136 codec_info(codec, "DSP fixed."); in sbz_dsp_startup_check()
9141 …codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to c… in sbz_dsp_startup_check()
9152 static void ca0132_alt_vol_setup(struct hda_codec *codec) in ca0132_alt_vol_setup() argument
9154 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9155 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9156 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9157 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9158 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9159 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9160 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); in ca0132_alt_vol_setup()
9161 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); in ca0132_alt_vol_setup()
9167 static void sbz_pre_dsp_setup(struct hda_codec *codec) in sbz_pre_dsp_setup() argument
9169 struct ca0132_spec *spec = codec->spec; in sbz_pre_dsp_setup()
9174 chipio_write(codec, 0x18b0a4, 0x000000c2); in sbz_pre_dsp_setup()
9176 snd_hda_codec_write(codec, 0x11, 0, in sbz_pre_dsp_setup()
9180 static void r3d_pre_dsp_setup(struct hda_codec *codec) in r3d_pre_dsp_setup() argument
9182 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3d_pre_dsp_setup()
9184 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); in r3d_pre_dsp_setup()
9186 snd_hda_codec_write(codec, 0x11, 0, in r3d_pre_dsp_setup()
9190 static void r3di_pre_dsp_setup(struct hda_codec *codec) in r3di_pre_dsp_setup() argument
9192 chipio_write(codec, 0x18b0a4, 0x000000c2); in r3di_pre_dsp_setup()
9194 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); in r3di_pre_dsp_setup()
9195 chipio_8051_write_exram(codec, 0x1920, 0x00); in r3di_pre_dsp_setup()
9196 chipio_8051_write_exram(codec, 0x1921, 0x40); in r3di_pre_dsp_setup()
9198 snd_hda_codec_write(codec, 0x11, 0, in r3di_pre_dsp_setup()
9207 static void zxr_pre_dsp_setup(struct hda_codec *codec) in zxr_pre_dsp_setup() argument
9213 chipio_write(codec, 0x189000, 0x0001f100); in zxr_pre_dsp_setup()
9215 chipio_write(codec, 0x18900c, 0x0001f100); in zxr_pre_dsp_setup()
9224 chipio_8051_write_exram(codec, 0xfa92, 0x22); in zxr_pre_dsp_setup()
9226 chipio_8051_write_pll_pmu(codec, 0x51, 0x98); in zxr_pre_dsp_setup()
9228 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x82); in zxr_pre_dsp_setup()
9229 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 3); in zxr_pre_dsp_setup()
9231 chipio_write(codec, 0x18902c, 0x00000000); in zxr_pre_dsp_setup()
9233 chipio_write(codec, 0x18902c, 0x00000003); in zxr_pre_dsp_setup()
9237 chipio_8051_write_pll_pmu(codec, addr[i], data[i]); in zxr_pre_dsp_setup()
9280 static void ca0132_mmio_init_sbz(struct hda_codec *codec) in ca0132_mmio_init_sbz() argument
9282 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_sbz()
9330 static void ca0132_mmio_init_ae5(struct hda_codec *codec) in ca0132_mmio_init_ae5() argument
9332 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init_ae5()
9362 static void ca0132_mmio_init(struct hda_codec *codec) in ca0132_mmio_init() argument
9364 struct ca0132_spec *spec = codec->spec; in ca0132_mmio_init()
9370 ca0132_mmio_init_sbz(codec); in ca0132_mmio_init()
9373 ca0132_mmio_init_ae5(codec); in ca0132_mmio_init()
9392 * eventually resets the codec with the 0x7ff verb. Not quite sure why it does
9395 static void ae5_register_set(struct hda_codec *codec) in ae5_register_set() argument
9397 struct ca0132_spec *spec = codec->spec; in ae5_register_set()
9405 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); in ae5_register_set()
9407 chipio_8051_write_direct(codec, 0x93, 0x10); in ae5_register_set()
9408 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); in ae5_register_set()
9436 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9437 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); in ae5_register_set()
9439 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); in ae5_register_set()
9442 chipio_8051_write_direct(codec, 0x90, 0x00); in ae5_register_set()
9443 chipio_8051_write_direct(codec, 0x90, 0x10); in ae5_register_set()
9446 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); in ae5_register_set()
9454 static void ca0132_alt_init(struct hda_codec *codec) in ca0132_alt_init() argument
9456 struct ca0132_spec *spec = codec->spec; in ca0132_alt_init()
9458 ca0132_alt_vol_setup(codec); in ca0132_alt_init()
9462 codec_dbg(codec, "SBZ alt_init"); in ca0132_alt_init()
9463 ca0132_gpio_init(codec); in ca0132_alt_init()
9464 sbz_pre_dsp_setup(codec); in ca0132_alt_init()
9465 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9466 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9469 codec_dbg(codec, "R3DI alt_init"); in ca0132_alt_init()
9470 ca0132_gpio_init(codec); in ca0132_alt_init()
9471 ca0132_gpio_setup(codec); in ca0132_alt_init()
9472 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); in ca0132_alt_init()
9473 r3di_pre_dsp_setup(codec); in ca0132_alt_init()
9474 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9475 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); in ca0132_alt_init()
9478 r3d_pre_dsp_setup(codec); in ca0132_alt_init()
9479 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9480 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9483 ca0132_gpio_init(codec); in ca0132_alt_init()
9484 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9485 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9486 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9487 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9488 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9491 ca0132_gpio_init(codec); in ca0132_alt_init()
9492 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9493 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9494 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9495 chipio_write(codec, 0x18b008, 0x000000f8); in ca0132_alt_init()
9496 chipio_write(codec, 0x18b008, 0x000000f0); in ca0132_alt_init()
9497 chipio_write(codec, 0x18b030, 0x00000020); in ca0132_alt_init()
9498 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); in ca0132_alt_init()
9501 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); in ca0132_alt_init()
9502 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_alt_init()
9503 snd_hda_sequence_write(codec, spec->desktop_init_verbs); in ca0132_alt_init()
9504 zxr_pre_dsp_setup(codec); in ca0132_alt_init()
9511 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
9513 struct ca0132_spec *spec = codec->spec; in ca0132_init()
9520 * there's only two reasons for it. One, the codec has awaken from a in ca0132_init()
9529 dsp_loaded = dspload_is_loaded(codec); in ca0132_init()
9535 sbz_dsp_startup_check(codec); in ca0132_init()
9545 ca0132_mmio_init(codec); in ca0132_init()
9547 snd_hda_power_up_pm(codec); in ca0132_init()
9550 ae5_register_set(codec); in ca0132_init()
9552 ca0132_init_params(codec); in ca0132_init()
9553 ca0132_init_flags(codec); in ca0132_init()
9555 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
9558 ca0132_alt_init(codec); in ca0132_init()
9560 ca0132_download_dsp(codec); in ca0132_init()
9562 ca0132_refresh_widget_caps(codec); in ca0132_init()
9567 r3d_setup_defaults(codec); in ca0132_init()
9571 sbz_setup_defaults(codec); in ca0132_init()
9574 ae5_setup_defaults(codec); in ca0132_init()
9577 ae7_setup_defaults(codec); in ca0132_init()
9580 ca0132_setup_defaults(codec); in ca0132_init()
9581 ca0132_init_analog_mic2(codec); in ca0132_init()
9582 ca0132_init_dmic(codec); in ca0132_init()
9587 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
9589 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
9592 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
9594 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
9597 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
9598 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9600 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init()
9605 ca0132_gpio_setup(codec); in ca0132_init()
9607 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
9609 ca0132_alt_select_out(codec); in ca0132_init()
9610 ca0132_alt_select_in(codec); in ca0132_init()
9612 ca0132_select_out(codec); in ca0132_init()
9613 ca0132_select_mic(codec); in ca0132_init()
9616 snd_hda_jack_report_sync(codec); in ca0132_init()
9624 ca0132_pe_switch_set(codec); in ca0132_init()
9627 snd_hda_power_down_pm(codec); in ca0132_init()
9632 static int dbpro_init(struct hda_codec *codec) in dbpro_init() argument
9634 struct ca0132_spec *spec = codec->spec; in dbpro_init()
9638 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in dbpro_init()
9639 init_input(codec, cfg->dig_in_pin, spec->dig_in); in dbpro_init()
9642 init_input(codec, spec->input_pins[i], spec->adcs[i]); in dbpro_init()
9647 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
9649 struct ca0132_spec *spec = codec->spec; in ca0132_free()
9652 snd_hda_power_up(codec); in ca0132_free()
9655 sbz_exit_chip(codec); in ca0132_free()
9658 zxr_exit_chip(codec); in ca0132_free()
9661 r3d_exit_chip(codec); in ca0132_free()
9664 ae5_exit_chip(codec); in ca0132_free()
9667 ae7_exit_chip(codec); in ca0132_free()
9670 r3di_gpio_shutdown(codec); in ca0132_free()
9676 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
9677 ca0132_exit_chip(codec); in ca0132_free()
9679 snd_hda_power_down(codec); in ca0132_free()
9682 pci_iounmap(codec->bus->pci, spec->mem_base); in ca0132_free()
9685 kfree(codec->spec); in ca0132_free()
9688 static void dbpro_free(struct hda_codec *codec) in dbpro_free() argument
9690 struct ca0132_spec *spec = codec->spec; in dbpro_free()
9692 zxr_dbpro_power_state_shutdown(codec); in dbpro_free()
9695 kfree(codec->spec); in dbpro_free()
9699 static int ca0132_suspend(struct hda_codec *codec) in ca0132_suspend() argument
9701 struct ca0132_spec *spec = codec->spec; in ca0132_suspend()
9726 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
9728 struct ca0132_spec *spec = codec->spec; in ca0132_config()
9744 codec_dbg(codec, "%s: QUIRK_ALIENWARE applied.\n", __func__); in ca0132_config()
9745 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
9748 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); in ca0132_config()
9749 snd_hda_apply_pincfgs(codec, sbz_pincfgs); in ca0132_config()
9752 codec_dbg(codec, "%s: QUIRK_ZXR applied.\n", __func__); in ca0132_config()
9753 snd_hda_apply_pincfgs(codec, zxr_pincfgs); in ca0132_config()
9756 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); in ca0132_config()
9757 snd_hda_apply_pincfgs(codec, r3d_pincfgs); in ca0132_config()
9760 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); in ca0132_config()
9761 snd_hda_apply_pincfgs(codec, r3di_pincfgs); in ca0132_config()
9764 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__); in ca0132_config()
9765 snd_hda_apply_pincfgs(codec, ae5_pincfgs); in ca0132_config()
9768 codec_dbg(codec, "%s: QUIRK_AE7 applied.\n", __func__); in ca0132_config()
9769 snd_hda_apply_pincfgs(codec, ae7_pincfgs); in ca0132_config()
9926 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
9930 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
9971 * Sound Blaster Z cards. However, they have different HDA codec subsystem
9975 static void sbz_detect_quirk(struct hda_codec *codec) in sbz_detect_quirk() argument
9977 switch (codec->core.subsystem_id) { in sbz_detect_quirk()
9979 codec->fixup_id = QUIRK_ZXR; in sbz_detect_quirk()
9982 codec->fixup_id = QUIRK_ZXR_DBPRO; in sbz_detect_quirk()
9985 codec->fixup_id = QUIRK_SBZ; in sbz_detect_quirk()
9990 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
9995 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
10000 codec->spec = spec; in patch_ca0132()
10001 spec->codec = codec; in patch_ca0132()
10003 /* Detect codec quirk */ in patch_ca0132()
10004 snd_hda_pick_fixup(codec, ca0132_quirk_models, ca0132_quirks, NULL); in patch_ca0132()
10006 sbz_detect_quirk(codec); in patch_ca0132()
10009 codec->patch_ops = dbpro_patch_ops; in patch_ca0132()
10011 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
10013 codec->pcm_format_first = 1; in patch_ca0132()
10014 codec->no_sticky_stream = 1; in patch_ca0132()
10024 snd_hda_codec_set_name(codec, "Sound Blaster Z"); in patch_ca0132()
10028 snd_hda_codec_set_name(codec, "Sound Blaster ZxR"); in patch_ca0132()
10034 snd_hda_codec_set_name(codec, "Recon3D"); in patch_ca0132()
10038 snd_hda_codec_set_name(codec, "Recon3Di"); in patch_ca0132()
10042 snd_hda_codec_set_name(codec, "Sound BlasterX AE-5"); in patch_ca0132()
10046 snd_hda_codec_set_name(codec, "Sound Blaster AE-7"); in patch_ca0132()
10078 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); in patch_ca0132()
10080 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); in patch_ca0132()
10081 codec->fixup_id = QUIRK_NONE; in patch_ca0132()
10091 ca0132_init_chip(codec); in patch_ca0132()
10093 ca0132_config(codec); in patch_ca0132()
10095 err = ca0132_prepare_verbs(codec); in patch_ca0132()
10099 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()
10103 ca0132_setup_unsol(codec); in patch_ca0132()
10108 ca0132_free(codec); in patch_ca0132()
10122 MODULE_DESCRIPTION("Creative Sound Core3D codec");