Lines Matching refs:codec

749 	struct hda_codec *codec;  member
789 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
793 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
799 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
802 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
806 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
813 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
818 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
827 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
840 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
843 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
850 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
855 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
867 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
869 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
873 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
877 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
891 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
898 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
903 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
912 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
914 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
918 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
922 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
927 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
943 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
946 struct ca0132_spec *spec = codec->spec; in chipio_write()
952 err = chipio_write_address(codec, chip_addx); in chipio_write()
956 err = chipio_write_data(codec, data); in chipio_write()
969 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
974 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
978 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
982 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
993 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
996 struct ca0132_spec *spec = codec->spec; in chipio_read()
1002 err = chipio_write_address(codec, chip_addx); in chipio_read()
1006 err = chipio_read_data(codec, data); in chipio_read()
1018 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
1027 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1034 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1037 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1042 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1046 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1047 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1050 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1061 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1064 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1065 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1072 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
1074 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
1077 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1079 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1081 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1083 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1085 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1087 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1095 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
1103 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
1115 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
1121 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
1133 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
1135 struct ca0132_spec *spec = codec->spec; in dspio_write()
1138 dspio_write_wait(codec); in dspio_write()
1141 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
1146 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
1152 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
1164 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
1175 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
1184 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
1188 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
1192 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
1197 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
1203 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
1217 status = dspio_read(codec, buffer++); in dspio_read_multiple()
1226 status = dspio_read(codec, &dummy); in dspio_read_multiple()
1296 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
1303 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
1307 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
1309 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
1313 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
1320 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
1331 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
1338 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
1377 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
1420 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
1437 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
1442 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
1455 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
1460 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
1479 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
1482 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
1489 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
1499 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
1502 return dspio_scp(codec, mod_id, req, SCP_SET, data, len, NULL, NULL); in dspio_set_param()
1505 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
1508 return dspio_set_param(codec, mod_id, req, &data, sizeof(unsigned int)); in dspio_set_uint_param()
1514 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
1519 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
1520 status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN, in dspio_alloc_dma_chan()
1524 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
1529 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
1533 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
1534 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
1542 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
1547 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
1548 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
1550 status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN, in dspio_free_dma_chan()
1554 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
1558 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
1566 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
1572 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
1582 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
1589 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
1601 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
1606 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
1608 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
1613 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
1644 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
1648 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
1654 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
1666 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
1669 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
1673 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
1674 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
1681 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
1688 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
1691 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
1695 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
1698 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
1708 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
1710 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
1713 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
1716 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
1720 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
1723 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
1729 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
1731 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
1735 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
1737 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
1740 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
1743 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
1745 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
1748 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
1751 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
1753 codec_dbg(codec, in dsp_dma_setup_common()
1759 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
1767 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
1785 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
1788 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
1794 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
1798 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
1812 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
1815 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
1818 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
1823 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
1826 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
1829 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
1837 status = chipio_write(codec, in dsp_dma_setup()
1840 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
1843 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
1845 codec_dbg(codec, in dsp_dma_setup()
1850 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
1858 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
1864 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
1867 status = chipio_read(codec, in dsp_dma_start()
1871 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
1874 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
1880 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
1883 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
1886 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
1894 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
1900 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
1903 status = chipio_read(codec, in dsp_dma_stop()
1907 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
1910 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
1915 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
1918 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
1921 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
1937 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
1947 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
1955 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1959 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1963 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
1967 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1978 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
1982 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
1986 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
1990 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
1998 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
2004 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
2007 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
2011 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
2014 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
2019 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2031 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2037 status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2045 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2049 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2051 status = dsp_free_router_ports(codec); in dsp_free_ports()
2053 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2056 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2065 struct hda_codec *codec; member
2077 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
2098 struct hda_codec *codec = dma->codec; in dma_reset() local
2099 struct ca0132_spec *spec = codec->spec; in dma_reset()
2103 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
2105 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
2130 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
2162 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
2213 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
2221 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
2228 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
2230 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
2254 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
2290 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
2291 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2295 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
2304 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
2311 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
2321 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
2334 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
2342 codec_dbg(codec, in dspxfr_one_seg()
2349 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
2363 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
2367 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
2370 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
2377 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
2381 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
2384 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
2385 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
2392 status = chipio_write_multiple(codec, in dspxfr_one_seg()
2401 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2409 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
2417 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
2430 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
2450 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
2457 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
2479 dma_engine->codec = codec; in dspxfr_image()
2480 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
2487 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
2491 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
2495 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
2504 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
2506 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
2513 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
2516 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
2521 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2524 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
2530 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
2534 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
2548 status = dsp_free_ports(codec); in dspxfr_image()
2553 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2558 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
2561 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
2571 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
2573 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
2576 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
2577 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
2580 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
2601 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
2612 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
2629 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
2631 status = dsp_reset(codec); in dspload_image()
2636 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
2637 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
2643 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
2645 dspload_post_setup(codec); in dspload_image()
2646 status = dsp_set_run_state(codec); in dspload_image()
2649 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
2656 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
2661 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
2668 #define dspload_is_loaded(codec) false argument
2671 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
2676 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
2677 codec_info(codec, "ca0132 DSP downloaded and running\n"); in dspload_wait_loaded()
2683 codec_err(codec, "ca0132 failed to download DSP\n"); in dspload_wait_loaded()
2691 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
2696 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
2698 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
2704 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
2707 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
2717 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
2723 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
2726 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
2751 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
2754 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
2755 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
2759 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
2764 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
2765 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
2770 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
2773 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
2774 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
2778 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
2781 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
2782 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
2789 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
2794 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
2801 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
2804 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
2809 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
2814 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
2817 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
2930 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
2939 snd_hda_power_up(codec); in tuning_ctl_set()
2940 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, in tuning_ctl_set()
2943 snd_hda_power_down(codec); in tuning_ctl_set()
2951 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
2952 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
2977 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
2978 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
2991 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
3012 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
3013 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
3026 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
3047 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
3048 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
3061 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
3069 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
3106 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
3109 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
3115 err = add_tuning_control(codec, in add_tuning_ctls()
3127 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
3129 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
3149 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
3151 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
3158 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
3160 snd_hda_power_up_pm(codec); in ca0132_select_out()
3165 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); in ca0132_select_out()
3176 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
3179 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3184 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3189 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3191 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3193 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3195 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3199 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3201 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3204 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3206 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3209 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
3212 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3217 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3222 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3224 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3226 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3228 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3232 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3234 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3237 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3239 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3244 snd_hda_power_down_pm(codec); in ca0132_select_out()
3255 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
3256 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); in ca0132_unsol_hp_delayed()
3259 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
3263 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
3264 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
3265 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
3270 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
3272 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
3281 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
3282 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
3283 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
3288 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
3290 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
3292 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
3293 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
3298 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
3300 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
3302 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
3314 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
3316 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
3320 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
3322 snd_hda_power_up_pm(codec); in ca0132_select_mic()
3327 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); in ca0132_select_mic()
3339 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
3340 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
3341 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
3343 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
3348 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
3349 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
3350 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
3352 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
3355 snd_hda_power_down_pm(codec); in ca0132_select_mic()
3363 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
3367 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
3391 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
3393 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
3404 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
3413 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
3415 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
3442 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
3446 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
3458 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
3460 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
3464 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
3471 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
3477 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
3479 struct ca0132_spec *spec = codec->spec; in stop_mic1()
3480 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
3483 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
3490 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
3492 struct ca0132_spec *spec = codec->spec; in resume_mic1()
3495 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
3503 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
3505 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
3510 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
3517 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
3520 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
3523 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
3524 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
3525 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
3529 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
3531 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
3535 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
3538 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
3547 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
3552 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
3559 ca0132_select_out(codec); in ca0132_vnode_switch_set()
3567 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
3572 ca0132_select_out(codec); in ca0132_vnode_switch_set()
3577 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
3582 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
3588 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
3594 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
3620 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
3621 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
3630 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
3631 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
3640 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
3648 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
3658 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
3667 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
3668 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
3704 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
3705 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
3711 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
3714 snd_hda_power_up(codec); in ca0132_switch_put()
3732 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
3739 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
3747 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
3757 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
3762 snd_hda_power_down(codec); in ca0132_switch_put()
3772 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
3773 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
3784 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
3789 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
3794 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
3799 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
3810 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
3811 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
3831 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
3832 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
3851 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
3856 snd_hda_power_up(codec); in ca0132_volume_put()
3857 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
3863 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
3864 snd_hda_power_down(codec); in ca0132_volume_put()
3873 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
3874 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
3885 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
3890 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
3895 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
3900 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
3908 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
3916 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
3919 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
3927 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
3956 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
3958 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
3964 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
3974 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
3981 err = add_fx_switch(codec, PLAY_ENHANCEMENT, "PlayEnhancement", 0); in ca0132_build_controls()
3985 err = add_fx_switch(codec, CRYSTAL_VOICE, "CrystalVoice", 1); in ca0132_build_controls()
3989 add_voicefx(codec); in ca0132_build_controls()
3992 add_tuning_ctls(codec); in ca0132_build_controls()
3995 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
4000 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
4004 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
4011 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
4061 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
4063 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
4066 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
4077 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
4084 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
4094 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
4112 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
4115 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
4116 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
4117 snd_hda_codec_write(codec, pin, 0, in init_output()
4121 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
4122 snd_hda_codec_write(codec, dac, 0, in init_output()
4126 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
4129 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
4130 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
4131 snd_hda_codec_write(codec, pin, 0, in init_input()
4135 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
4136 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
4140 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
4142 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
4147 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
4151 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
4153 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
4159 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
4161 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
4166 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
4168 oldval = stop_mic1(codec); in ca0132_set_dmic()
4169 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
4173 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
4177 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
4181 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
4185 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
4190 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
4194 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
4196 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
4197 resume_mic1(codec, oldval); in ca0132_set_dmic()
4203 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
4205 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
4218 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4228 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4241 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4248 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
4250 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
4253 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4255 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4257 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4259 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4261 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4263 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4268 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
4270 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
4273 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
4274 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
4277 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
4280 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
4283 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
4284 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
4291 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
4293 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
4305 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
4313 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
4316 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
4320 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
4321 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
4325 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
4329 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
4335 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
4337 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
4338 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_COMMON_MODE, 0); in ca0132_init_flags()
4339 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_COMMON_MODE, 0); in ca0132_init_flags()
4340 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_10KOHM_LOAD, 0); in ca0132_init_flags()
4341 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0); in ca0132_init_flags()
4342 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
4348 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
4350 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
4351 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
4354 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
4356 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
4357 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
4358 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
4359 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
4360 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
4361 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
4363 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
4364 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
4365 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
4368 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
4374 if (request_firmware(&fw_entry, EFX_FILE, codec->card->dev) != 0) in ca0132_download_dsp_images()
4378 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
4379 codec_err(codec, "ca0132 DSP load image failed\n"); in ca0132_download_dsp_images()
4383 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
4391 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
4393 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
4402 chipio_enable_clocks(codec); in ca0132_download_dsp()
4404 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
4410 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
4413 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
4416 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
4418 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
4420 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
4424 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
4427 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
4429 struct ca0132_spec *spec = codec->spec; in hp_callback()
4437 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
4442 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
4444 ca0132_select_mic(codec); in amic_callback()
4447 static void ca0132_init_unsol(struct hda_codec *codec) in ca0132_init_unsol() argument
4449 struct ca0132_spec *spec = codec->spec; in ca0132_init_unsol()
4450 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); in ca0132_init_unsol()
4451 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, in ca0132_init_unsol()
4453 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_init_unsol()
4512 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
4514 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
4546 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
4550 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
4554 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
4555 dsp_reset(codec); in ca0132_exit_chip()
4558 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
4560 struct ca0132_spec *spec = codec->spec; in ca0132_init()
4568 snd_hda_power_up_pm(codec); in ca0132_init()
4570 ca0132_init_unsol(codec); in ca0132_init()
4572 ca0132_init_params(codec); in ca0132_init()
4573 ca0132_init_flags(codec); in ca0132_init()
4574 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
4575 ca0132_download_dsp(codec); in ca0132_init()
4576 ca0132_refresh_widget_caps(codec); in ca0132_init()
4577 ca0132_setup_defaults(codec); in ca0132_init()
4578 ca0132_init_analog_mic2(codec); in ca0132_init()
4579 ca0132_init_dmic(codec); in ca0132_init()
4582 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
4584 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
4587 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
4589 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
4591 snd_hda_sequence_write(codec, spec->chip_init_verbs); in ca0132_init()
4592 snd_hda_sequence_write(codec, spec->spec_init_verbs); in ca0132_init()
4594 ca0132_select_out(codec); in ca0132_init()
4595 ca0132_select_mic(codec); in ca0132_init()
4597 snd_hda_jack_report_sync(codec); in ca0132_init()
4599 snd_hda_power_down_pm(codec); in ca0132_init()
4604 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
4606 struct ca0132_spec *spec = codec->spec; in ca0132_free()
4609 snd_hda_power_up(codec); in ca0132_free()
4610 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
4611 ca0132_exit_chip(codec); in ca0132_free()
4612 snd_hda_power_down(codec); in ca0132_free()
4614 kfree(codec->spec); in ca0132_free()
4625 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
4627 struct ca0132_spec *spec = codec->spec; in ca0132_config()
4639 codec_dbg(codec, "ca0132_config: QUIRK_ALIENWARE applied.\n"); in ca0132_config()
4640 snd_hda_apply_pincfgs(codec, alienware_pincfgs); in ca0132_config()
4688 static int ca0132_prepare_verbs(struct hda_codec *codec) in ca0132_prepare_verbs() argument
4692 struct ca0132_spec *spec = codec->spec; in ca0132_prepare_verbs()
4733 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
4739 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
4744 codec->spec = spec; in patch_ca0132()
4745 spec->codec = codec; in patch_ca0132()
4747 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
4748 codec->pcm_format_first = 1; in patch_ca0132()
4749 codec->no_sticky_stream = 1; in patch_ca0132()
4752 quirk = snd_pci_quirk_lookup(codec->bus->pci, ca0132_quirks); in patch_ca0132()
4767 ca0132_init_chip(codec); in patch_ca0132()
4769 ca0132_config(codec); in patch_ca0132()
4771 err = ca0132_prepare_verbs(codec); in patch_ca0132()
4775 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()