Lines Matching refs:codec

749 	struct hda_codec *codec;  member
760 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, in codec_send_command() argument
764 response = snd_hda_codec_read(codec, nid, 0, verb, parm); in codec_send_command()
770 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, in codec_set_converter_format() argument
773 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, in codec_set_converter_format()
777 static int codec_set_converter_stream_channel(struct hda_codec *codec, in codec_set_converter_stream_channel() argument
784 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, in codec_set_converter_stream_channel()
789 static int chipio_send(struct hda_codec *codec, in chipio_send() argument
798 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_send()
811 static int chipio_write_address(struct hda_codec *codec, in chipio_write_address() argument
814 struct ca0132_spec *spec = codec->spec; in chipio_write_address()
821 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, in chipio_write_address()
826 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, in chipio_write_address()
838 static int chipio_write_data(struct hda_codec *codec, unsigned int data) in chipio_write_data() argument
840 struct ca0132_spec *spec = codec->spec; in chipio_write_data()
844 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); in chipio_write_data()
848 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, in chipio_write_data()
862 static int chipio_write_data_multiple(struct hda_codec *codec, in chipio_write_data_multiple() argument
869 codec_dbg(codec, "chipio_write_data null ptr\n"); in chipio_write_data_multiple()
874 status = chipio_write_data(codec, *data++); in chipio_write_data_multiple()
883 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) in chipio_read_data() argument
885 struct ca0132_spec *spec = codec->spec; in chipio_read_data()
889 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); in chipio_read_data()
893 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in chipio_read_data()
898 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in chipio_read_data()
914 static int chipio_write(struct hda_codec *codec, in chipio_write() argument
917 struct ca0132_spec *spec = codec->spec; in chipio_write()
923 err = chipio_write_address(codec, chip_addx); in chipio_write()
927 err = chipio_write_data(codec, data); in chipio_write()
940 static int chipio_write_multiple(struct hda_codec *codec, in chipio_write_multiple() argument
945 struct ca0132_spec *spec = codec->spec; in chipio_write_multiple()
949 status = chipio_write_address(codec, chip_addx); in chipio_write_multiple()
953 status = chipio_write_data_multiple(codec, data, count); in chipio_write_multiple()
964 static int chipio_read(struct hda_codec *codec, in chipio_read() argument
967 struct ca0132_spec *spec = codec->spec; in chipio_read()
973 err = chipio_write_address(codec, chip_addx); in chipio_read()
977 err = chipio_read_data(codec, data); in chipio_read()
989 static void chipio_set_control_flag(struct hda_codec *codec, in chipio_set_control_flag() argument
998 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_flag()
1005 static void chipio_set_control_param(struct hda_codec *codec, in chipio_set_control_param() argument
1008 struct ca0132_spec *spec = codec->spec; in chipio_set_control_param()
1013 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1017 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { in chipio_set_control_param()
1018 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1021 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_set_control_param()
1032 static void chipio_set_conn_rate(struct hda_codec *codec, in chipio_set_conn_rate() argument
1035 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); in chipio_set_conn_rate()
1036 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, in chipio_set_conn_rate()
1043 static void chipio_enable_clocks(struct hda_codec *codec) in chipio_enable_clocks() argument
1045 struct ca0132_spec *spec = codec->spec; in chipio_enable_clocks()
1048 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1050 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1052 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1054 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1056 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1058 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in chipio_enable_clocks()
1066 static int dspio_send(struct hda_codec *codec, unsigned int reg, in dspio_send() argument
1074 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); in dspio_send()
1086 static void dspio_write_wait(struct hda_codec *codec) in dspio_write_wait() argument
1092 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write_wait()
1104 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) in dspio_write() argument
1106 struct ca0132_spec *spec = codec->spec; in dspio_write()
1109 dspio_write_wait(codec); in dspio_write()
1112 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, in dspio_write()
1117 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, in dspio_write()
1123 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_write()
1135 static int dspio_write_multiple(struct hda_codec *codec, in dspio_write_multiple() argument
1146 status = dspio_write(codec, *buffer++); in dspio_write_multiple()
1155 static int dspio_read(struct hda_codec *codec, unsigned int *data) in dspio_read() argument
1159 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); in dspio_read()
1163 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); in dspio_read()
1168 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, in dspio_read()
1174 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, in dspio_read_multiple() argument
1188 status = dspio_read(codec, buffer++); in dspio_read_multiple()
1197 status = dspio_read(codec, &dummy); in dspio_read_multiple()
1267 static void dspio_clear_response_queue(struct hda_codec *codec) in dspio_clear_response_queue() argument
1274 status = dspio_read(codec, &dummy); in dspio_clear_response_queue()
1278 static int dspio_get_response_data(struct hda_codec *codec) in dspio_get_response_data() argument
1280 struct ca0132_spec *spec = codec->spec; in dspio_get_response_data()
1284 if (dspio_read(codec, &data) < 0) in dspio_get_response_data()
1291 dspio_read_multiple(codec, spec->scp_resp_data, in dspio_get_response_data()
1302 static int dspio_send_scp_message(struct hda_codec *codec, in dspio_send_scp_message() argument
1309 struct ca0132_spec *spec = codec->spec; in dspio_send_scp_message()
1348 status = dspio_write_multiple(codec, (unsigned int *)send_buf, in dspio_send_scp_message()
1391 static int dspio_scp(struct hda_codec *codec, in dspio_scp() argument
1408 codec_dbg(codec, "dspio_scp get but has no buffer\n"); in dspio_scp()
1413 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); in dspio_scp()
1426 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, in dspio_scp()
1431 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); in dspio_scp()
1450 codec_dbg(codec, "reply too long for buf\n"); in dspio_scp()
1453 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); in dspio_scp()
1460 codec_dbg(codec, "reply ill-formed or errflag set\n"); in dspio_scp()
1470 static int dspio_set_param(struct hda_codec *codec, int mod_id, in dspio_set_param() argument
1473 return dspio_scp(codec, mod_id, req, SCP_SET, data, len, NULL, NULL); in dspio_set_param()
1476 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, in dspio_set_uint_param() argument
1479 return dspio_set_param(codec, mod_id, req, &data, sizeof(unsigned int)); in dspio_set_uint_param()
1485 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) in dspio_alloc_dma_chan() argument
1490 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); in dspio_alloc_dma_chan()
1491 status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN, in dspio_alloc_dma_chan()
1495 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); in dspio_alloc_dma_chan()
1500 codec_dbg(codec, "no free dma channels to allocate\n"); in dspio_alloc_dma_chan()
1504 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); in dspio_alloc_dma_chan()
1505 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); in dspio_alloc_dma_chan()
1513 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) in dspio_free_dma_chan() argument
1518 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); in dspio_free_dma_chan()
1519 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); in dspio_free_dma_chan()
1521 status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN, in dspio_free_dma_chan()
1525 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); in dspio_free_dma_chan()
1529 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); in dspio_free_dma_chan()
1537 static int dsp_set_run_state(struct hda_codec *codec) in dsp_set_run_state() argument
1543 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); in dsp_set_run_state()
1553 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
1560 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, in dsp_set_run_state()
1572 static int dsp_reset(struct hda_codec *codec) in dsp_reset() argument
1577 codec_dbg(codec, "dsp_reset\n"); in dsp_reset()
1579 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); in dsp_reset()
1584 codec_dbg(codec, "dsp_reset timeout\n"); in dsp_reset()
1615 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) in dsp_is_dma_active() argument
1619 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); in dsp_is_dma_active()
1625 static int dsp_dma_setup_common(struct hda_codec *codec, in dsp_dma_setup_common() argument
1637 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); in dsp_dma_setup_common()
1640 codec_dbg(codec, "dma chan num invalid\n"); in dsp_dma_setup_common()
1644 if (dsp_is_dma_active(codec, dma_chan)) { in dsp_dma_setup_common()
1645 codec_dbg(codec, "dma already active\n"); in dsp_dma_setup_common()
1652 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup_common()
1659 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); in dsp_dma_setup_common()
1662 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, in dsp_dma_setup_common()
1666 codec_dbg(codec, "read CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
1669 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); in dsp_dma_setup_common()
1679 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); in dsp_dma_setup_common()
1681 codec_dbg(codec, "write CHNLPROP Reg fail\n"); in dsp_dma_setup_common()
1684 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); in dsp_dma_setup_common()
1687 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, in dsp_dma_setup_common()
1691 codec_dbg(codec, "read ACTIVE Reg fail\n"); in dsp_dma_setup_common()
1694 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); in dsp_dma_setup_common()
1700 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); in dsp_dma_setup_common()
1702 codec_dbg(codec, "write ACTIVE Reg fail\n"); in dsp_dma_setup_common()
1706 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); in dsp_dma_setup_common()
1708 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
1711 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); in dsp_dma_setup_common()
1714 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); in dsp_dma_setup_common()
1716 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), in dsp_dma_setup_common()
1719 codec_dbg(codec, "write IRQCNT Reg fail\n"); in dsp_dma_setup_common()
1722 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); in dsp_dma_setup_common()
1724 codec_dbg(codec, in dsp_dma_setup_common()
1730 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); in dsp_dma_setup_common()
1738 static int dsp_dma_setup(struct hda_codec *codec, in dsp_dma_setup() argument
1756 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); in dsp_dma_setup()
1759 codec_dbg(codec, "count too big\n"); in dsp_dma_setup()
1765 codec_dbg(codec, "invalid chip addr\n"); in dsp_dma_setup()
1769 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); in dsp_dma_setup()
1783 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), in dsp_dma_setup()
1786 codec_dbg(codec, "write DMACFG Reg fail\n"); in dsp_dma_setup()
1789 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); in dsp_dma_setup()
1794 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), in dsp_dma_setup()
1797 codec_dbg(codec, "write DSPADROFS Reg fail\n"); in dsp_dma_setup()
1800 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); in dsp_dma_setup()
1808 status = chipio_write(codec, in dsp_dma_setup()
1811 codec_dbg(codec, "write XFRCNT Reg fail\n"); in dsp_dma_setup()
1814 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); in dsp_dma_setup()
1816 codec_dbg(codec, in dsp_dma_setup()
1821 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); in dsp_dma_setup()
1829 static int dsp_dma_start(struct hda_codec *codec, in dsp_dma_start() argument
1835 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); in dsp_dma_start()
1838 status = chipio_read(codec, in dsp_dma_start()
1842 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_start()
1845 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); in dsp_dma_start()
1851 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_start()
1854 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_start()
1857 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); in dsp_dma_start()
1865 static int dsp_dma_stop(struct hda_codec *codec, in dsp_dma_stop() argument
1871 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); in dsp_dma_stop()
1874 status = chipio_read(codec, in dsp_dma_stop()
1878 codec_dbg(codec, "read CHNLSTART reg fail\n"); in dsp_dma_stop()
1881 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); in dsp_dma_stop()
1886 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, in dsp_dma_stop()
1889 codec_dbg(codec, "write CHNLSTART reg fail\n"); in dsp_dma_stop()
1892 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); in dsp_dma_stop()
1908 static int dsp_allocate_router_ports(struct hda_codec *codec, in dsp_allocate_router_ports() argument
1918 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
1926 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1930 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1934 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_allocate_router_ports()
1938 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, in dsp_allocate_router_ports()
1949 static int dsp_free_router_ports(struct hda_codec *codec) in dsp_free_router_ports() argument
1953 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
1957 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in dsp_free_router_ports()
1961 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); in dsp_free_router_ports()
1969 static int dsp_allocate_ports(struct hda_codec *codec, in dsp_allocate_ports() argument
1975 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); in dsp_allocate_ports()
1978 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports()
1982 status = dsp_allocate_router_ports(codec, num_chans, in dsp_allocate_ports()
1985 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); in dsp_allocate_ports()
1990 static int dsp_allocate_ports_format(struct hda_codec *codec, in dsp_allocate_ports_format() argument
2002 codec_dbg(codec, "bad rate multiple\n"); in dsp_allocate_ports_format()
2008 status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map); in dsp_allocate_ports_format()
2016 static int dsp_free_ports(struct hda_codec *codec) in dsp_free_ports() argument
2020 codec_dbg(codec, " dsp_free_ports() -- begin\n"); in dsp_free_ports()
2022 status = dsp_free_router_ports(codec); in dsp_free_ports()
2024 codec_dbg(codec, "free router ports fail\n"); in dsp_free_ports()
2027 codec_dbg(codec, " dsp_free_ports() -- complete\n"); in dsp_free_ports()
2036 struct hda_codec *codec; member
2048 static int dma_convert_to_hda_format(struct hda_codec *codec, in dma_convert_to_hda_format() argument
2055 format_val = snd_hda_calc_stream_format(codec, in dma_convert_to_hda_format()
2072 struct hda_codec *codec = dma->codec; in dma_reset() local
2073 struct ca0132_spec *spec = codec->spec; in dma_reset()
2077 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); in dma_reset()
2079 status = snd_hda_codec_load_dsp_prepare(codec, in dma_reset()
2104 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); in dma_set_state()
2136 struct ca0132_spec *spec = dma->codec->spec; in dma_get_stream_id()
2187 static int dspxfr_hci_write(struct hda_codec *codec, in dspxfr_hci_write() argument
2195 codec_dbg(codec, "hci_write invalid params\n"); in dspxfr_hci_write()
2202 status = chipio_write(codec, data[0], data[1]); in dspxfr_hci_write()
2204 codec_dbg(codec, "hci_write chipio failed\n"); in dspxfr_hci_write()
2228 static int dspxfr_one_seg(struct hda_codec *codec, in dspxfr_one_seg() argument
2264 codec_dbg(codec, "hci_write\n"); in dspxfr_one_seg()
2265 return dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2269 codec_dbg(codec, "Invalid Params\n"); in dspxfr_one_seg()
2278 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; in dspxfr_one_seg()
2285 codec_dbg(codec, "Invalid chip_addx Params\n"); in dspxfr_one_seg()
2295 codec_dbg(codec, "dma_engine buffer NULL\n"); in dspxfr_one_seg()
2308 codec_dbg(codec, "frmsz zero\n"); in dspxfr_one_seg()
2316 codec_dbg(codec, in dspxfr_one_seg()
2323 codec_dbg(codec, "dspxfr_one_seg:failed\n"); in dspxfr_one_seg()
2337 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", in dspxfr_one_seg()
2341 status = dsp_dma_stop(codec, dma_chan, ovly); in dspxfr_one_seg()
2344 status = dsp_dma_setup_common(codec, chip_addx, in dspxfr_one_seg()
2351 status = dsp_dma_setup(codec, chip_addx, in dspxfr_one_seg()
2355 status = dsp_dma_start(codec, dma_chan, ovly); in dspxfr_one_seg()
2358 if (!dsp_is_dma_active(codec, dma_chan)) { in dspxfr_one_seg()
2359 codec_dbg(codec, "dspxfr:DMA did not start\n"); in dspxfr_one_seg()
2366 status = chipio_write_multiple(codec, in dspxfr_one_seg()
2375 status = dspxfr_hci_write(codec, hci_write); in dspxfr_one_seg()
2383 dma_active = dsp_is_dma_active(codec, dma_chan); in dspxfr_one_seg()
2391 codec_dbg(codec, "+++++ DMA complete\n"); in dspxfr_one_seg()
2404 status = chipio_write_multiple(codec, chip_addx_remainder, in dspxfr_one_seg()
2424 static int dspxfr_image(struct hda_codec *codec, in dspxfr_image() argument
2431 struct ca0132_spec *spec = codec->spec; in dspxfr_image()
2453 dma_engine->codec = codec; in dspxfr_image()
2454 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); in dspxfr_image()
2461 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, in dspxfr_image()
2465 codec_dbg(codec, "set converter format fail\n"); in dspxfr_image()
2469 status = snd_hda_codec_load_dsp_prepare(codec, in dspxfr_image()
2478 status = dspio_alloc_dma_chan(codec, &dma_chan); in dspxfr_image()
2480 codec_dbg(codec, "alloc dmachan fail\n"); in dspxfr_image()
2487 status = dsp_allocate_ports_format(codec, hda_format, in dspxfr_image()
2490 codec_dbg(codec, "alloc ports fail\n"); in dspxfr_image()
2495 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2498 codec_dbg(codec, "set stream chan fail\n"); in dspxfr_image()
2504 codec_dbg(codec, "FLS check fail\n"); in dspxfr_image()
2508 status = dspxfr_one_seg(codec, fls_data, reloc, in dspxfr_image()
2522 status = dsp_free_ports(codec); in dspxfr_image()
2527 status = codec_set_converter_stream_channel(codec, in dspxfr_image()
2532 dspio_free_dma_chan(codec, dma_chan); in dspxfr_image()
2535 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); in dspxfr_image()
2545 static void dspload_post_setup(struct hda_codec *codec) in dspload_post_setup() argument
2547 codec_dbg(codec, "---- dspload_post_setup ------\n"); in dspload_post_setup()
2550 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); in dspload_post_setup()
2551 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); in dspload_post_setup()
2554 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); in dspload_post_setup()
2575 static int dspload_image(struct hda_codec *codec, in dspload_image() argument
2586 codec_dbg(codec, "---- dspload_image begin ------\n"); in dspload_image()
2603 codec_dbg(codec, "Ready to program DMA\n"); in dspload_image()
2605 status = dsp_reset(codec); in dspload_image()
2610 codec_dbg(codec, "dsp_reset() complete\n"); in dspload_image()
2611 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, in dspload_image()
2617 codec_dbg(codec, "dspxfr_image() complete\n"); in dspload_image()
2619 dspload_post_setup(codec); in dspload_image()
2620 status = dsp_set_run_state(codec); in dspload_image()
2623 codec_dbg(codec, "LOAD FINISHED\n"); in dspload_image()
2630 static bool dspload_is_loaded(struct hda_codec *codec) in dspload_is_loaded() argument
2635 status = chipio_read(codec, 0x40004, &data); in dspload_is_loaded()
2642 #define dspload_is_loaded(codec) false argument
2645 static bool dspload_wait_loaded(struct hda_codec *codec) in dspload_wait_loaded() argument
2650 if (dspload_is_loaded(codec)) { in dspload_wait_loaded()
2665 struct hda_codec *codec, in ca0132_playback_pcm_prepare() argument
2670 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_prepare()
2672 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); in ca0132_playback_pcm_prepare()
2678 struct hda_codec *codec, in ca0132_playback_pcm_cleanup() argument
2681 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_cleanup()
2691 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); in ca0132_playback_pcm_cleanup()
2697 struct hda_codec *codec, in ca0132_playback_pcm_delay() argument
2700 struct ca0132_spec *spec = codec->spec; in ca0132_playback_pcm_delay()
2725 struct hda_codec *codec, in ca0132_dig_playback_pcm_open() argument
2728 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_open()
2729 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in ca0132_dig_playback_pcm_open()
2733 struct hda_codec *codec, in ca0132_dig_playback_pcm_prepare() argument
2738 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_prepare()
2739 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in ca0132_dig_playback_pcm_prepare()
2744 struct hda_codec *codec, in ca0132_dig_playback_pcm_cleanup() argument
2747 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_cleanup()
2748 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in ca0132_dig_playback_pcm_cleanup()
2752 struct hda_codec *codec, in ca0132_dig_playback_pcm_close() argument
2755 struct ca0132_spec *spec = codec->spec; in ca0132_dig_playback_pcm_close()
2756 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in ca0132_dig_playback_pcm_close()
2763 struct hda_codec *codec, in ca0132_capture_pcm_prepare() argument
2768 snd_hda_codec_setup_stream(codec, hinfo->nid, in ca0132_capture_pcm_prepare()
2775 struct hda_codec *codec, in ca0132_capture_pcm_cleanup() argument
2778 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_cleanup()
2783 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in ca0132_capture_pcm_cleanup()
2788 struct hda_codec *codec, in ca0132_capture_pcm_delay() argument
2791 struct ca0132_spec *spec = codec->spec; in ca0132_capture_pcm_delay()
2904 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, in tuning_ctl_set() argument
2913 snd_hda_power_up(codec); in tuning_ctl_set()
2914 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, in tuning_ctl_set()
2917 snd_hda_power_down(codec); in tuning_ctl_set()
2925 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in tuning_ctl_get() local
2926 struct ca0132_spec *spec = codec->spec; in tuning_ctl_get()
2951 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in voice_focus_ctl_put() local
2952 struct ca0132_spec *spec = codec->spec; in voice_focus_ctl_put()
2965 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); in voice_focus_ctl_put()
2986 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in mic_svm_ctl_put() local
2987 struct ca0132_spec *spec = codec->spec; in mic_svm_ctl_put()
3000 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); in mic_svm_ctl_put()
3021 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in equalizer_ctl_put() local
3022 struct ca0132_spec *spec = codec->spec; in equalizer_ctl_put()
3035 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); in equalizer_ctl_put()
3043 static int add_tuning_control(struct hda_codec *codec, in add_tuning_control() argument
3080 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_tuning_control()
3083 static int add_tuning_ctls(struct hda_codec *codec) in add_tuning_ctls() argument
3089 err = add_tuning_control(codec, in add_tuning_ctls()
3101 static void ca0132_init_tuning_defaults(struct hda_codec *codec) in ca0132_init_tuning_defaults() argument
3103 struct ca0132_spec *spec = codec->spec; in ca0132_init_tuning_defaults()
3123 static int ca0132_select_out(struct hda_codec *codec) in ca0132_select_out() argument
3125 struct ca0132_spec *spec = codec->spec; in ca0132_select_out()
3132 codec_dbg(codec, "ca0132_select_out\n"); in ca0132_select_out()
3134 snd_hda_power_up_pm(codec); in ca0132_select_out()
3139 jack_present = snd_hda_jack_detect(codec, spec->out_pins[1]); in ca0132_select_out()
3150 codec_dbg(codec, "ca0132_select_out speaker\n"); in ca0132_select_out()
3153 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3158 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3163 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3165 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3167 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3169 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3173 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3175 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3178 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3180 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3183 codec_dbg(codec, "ca0132_select_out hp\n"); in ca0132_select_out()
3186 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); in ca0132_select_out()
3191 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); in ca0132_select_out()
3196 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3198 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3200 snd_hda_codec_write(codec, spec->out_pins[1], 0, in ca0132_select_out()
3202 snd_hda_codec_write(codec, spec->out_pins[0], 0, in ca0132_select_out()
3206 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, in ca0132_select_out()
3208 snd_hda_set_pin_ctl(codec, spec->out_pins[0], in ca0132_select_out()
3211 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, in ca0132_select_out()
3213 snd_hda_set_pin_ctl(codec, spec->out_pins[1], in ca0132_select_out()
3218 snd_hda_power_down_pm(codec); in ca0132_select_out()
3229 ca0132_select_out(spec->codec); in ca0132_unsol_hp_delayed()
3230 jack = snd_hda_jack_tbl_get(spec->codec, UNSOL_TAG_HP); in ca0132_unsol_hp_delayed()
3233 snd_hda_jack_report_sync(spec->codec); in ca0132_unsol_hp_delayed()
3237 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
3238 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
3239 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
3244 static int ca0132_set_vipsource(struct hda_codec *codec, int val) in ca0132_set_vipsource() argument
3246 struct ca0132_spec *spec = codec->spec; in ca0132_set_vipsource()
3255 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); in ca0132_set_vipsource()
3256 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_vipsource()
3257 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_vipsource()
3262 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
3264 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
3266 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); in ca0132_set_vipsource()
3267 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); in ca0132_set_vipsource()
3272 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_vipsource()
3274 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_set_vipsource()
3276 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); in ca0132_set_vipsource()
3288 static int ca0132_select_mic(struct hda_codec *codec) in ca0132_select_mic() argument
3290 struct ca0132_spec *spec = codec->spec; in ca0132_select_mic()
3294 codec_dbg(codec, "ca0132_select_mic\n"); in ca0132_select_mic()
3296 snd_hda_power_up_pm(codec); in ca0132_select_mic()
3301 jack_present = snd_hda_jack_detect(codec, spec->input_pins[0]); in ca0132_select_mic()
3313 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); in ca0132_select_mic()
3314 ca0132_set_dmic(codec, 1); in ca0132_select_mic()
3315 ca0132_mic_boost_set(codec, 0); in ca0132_select_mic()
3317 ca0132_effects_set(codec, VOICE_FOCUS, in ca0132_select_mic()
3322 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); in ca0132_select_mic()
3323 ca0132_set_dmic(codec, 0); in ca0132_select_mic()
3324 ca0132_mic_boost_set(codec, spec->cur_mic_boost); in ca0132_select_mic()
3326 ca0132_effects_set(codec, VOICE_FOCUS, 0); in ca0132_select_mic()
3329 snd_hda_power_down_pm(codec); in ca0132_select_mic()
3337 static bool ca0132_is_vnode_effective(struct hda_codec *codec, in ca0132_is_vnode_effective() argument
3341 struct ca0132_spec *spec = codec->spec; in ca0132_is_vnode_effective()
3365 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) in ca0132_voicefx_set() argument
3367 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_set()
3378 dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_set()
3387 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) in ca0132_effects_set() argument
3389 struct ca0132_spec *spec = codec->spec; in ca0132_effects_set()
3416 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", in ca0132_effects_set()
3420 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_effects_set()
3432 static int ca0132_pe_switch_set(struct hda_codec *codec) in ca0132_pe_switch_set() argument
3434 struct ca0132_spec *spec = codec->spec; in ca0132_pe_switch_set()
3438 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", in ca0132_pe_switch_set()
3445 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_pe_switch_set()
3451 static int stop_mic1(struct hda_codec *codec) in stop_mic1() argument
3453 struct ca0132_spec *spec = codec->spec; in stop_mic1()
3454 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, in stop_mic1()
3457 snd_hda_codec_write(codec, spec->adcs[0], 0, in stop_mic1()
3464 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) in resume_mic1() argument
3466 struct ca0132_spec *spec = codec->spec; in resume_mic1()
3469 snd_hda_codec_write(codec, spec->adcs[0], 0, in resume_mic1()
3477 static int ca0132_cvoice_switch_set(struct hda_codec *codec) in ca0132_cvoice_switch_set() argument
3479 struct ca0132_spec *spec = codec->spec; in ca0132_cvoice_switch_set()
3484 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", in ca0132_cvoice_switch_set()
3491 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); in ca0132_cvoice_switch_set()
3494 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); in ca0132_cvoice_switch_set()
3497 oldval = stop_mic1(codec); in ca0132_cvoice_switch_set()
3498 ret |= ca0132_set_vipsource(codec, 1); in ca0132_cvoice_switch_set()
3499 resume_mic1(codec, oldval); in ca0132_cvoice_switch_set()
3503 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) in ca0132_mic_boost_set() argument
3505 struct ca0132_spec *spec = codec->spec; in ca0132_mic_boost_set()
3509 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
3512 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, in ca0132_mic_boost_set()
3521 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_vnode_switch_set() local
3526 struct ca0132_spec *spec = codec->spec; in ca0132_vnode_switch_set()
3533 ca0132_select_out(codec); in ca0132_vnode_switch_set()
3541 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
3546 ca0132_select_out(codec); in ca0132_vnode_switch_set()
3551 ca0132_select_mic(codec); in ca0132_vnode_switch_set()
3556 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_vnode_switch_set()
3562 mutex_lock(&codec->control_mutex); in ca0132_vnode_switch_set()
3568 mutex_unlock(&codec->control_mutex); in ca0132_vnode_switch_set()
3594 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_get() local
3595 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_get()
3604 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_voicefx_put() local
3605 struct ca0132_spec *spec = codec->spec; in ca0132_voicefx_put()
3614 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", in ca0132_voicefx_put()
3622 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, in ca0132_voicefx_put()
3632 ca0132_voicefx_set(codec, (sel ? 1 : 0)); in ca0132_voicefx_put()
3641 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_get() local
3642 struct ca0132_spec *spec = codec->spec; in ca0132_switch_get()
3678 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_switch_put() local
3679 struct ca0132_spec *spec = codec->spec; in ca0132_switch_put()
3685 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", in ca0132_switch_put()
3688 snd_hda_power_up(codec); in ca0132_switch_put()
3706 changed = ca0132_pe_switch_set(codec); in ca0132_switch_put()
3713 changed = ca0132_cvoice_switch_set(codec); in ca0132_switch_put()
3721 changed = ca0132_effects_set(codec, nid, *valp); in ca0132_switch_put()
3731 changed = ca0132_mic_boost_set(codec, *valp); in ca0132_switch_put()
3736 snd_hda_power_down(codec); in ca0132_switch_put()
3746 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_info() local
3747 struct ca0132_spec *spec = codec->spec; in ca0132_volume_info()
3758 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
3763 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
3768 mutex_lock(&codec->control_mutex); in ca0132_volume_info()
3773 mutex_unlock(&codec->control_mutex); in ca0132_volume_info()
3784 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_get() local
3785 struct ca0132_spec *spec = codec->spec; in ca0132_volume_get()
3805 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_put() local
3806 struct ca0132_spec *spec = codec->spec; in ca0132_volume_put()
3825 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); in ca0132_volume_put()
3830 snd_hda_power_up(codec); in ca0132_volume_put()
3831 mutex_lock(&codec->control_mutex); in ca0132_volume_put()
3837 mutex_unlock(&codec->control_mutex); in ca0132_volume_put()
3838 snd_hda_power_down(codec); in ca0132_volume_put()
3847 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in ca0132_volume_tlv() local
3848 struct ca0132_spec *spec = codec->spec; in ca0132_volume_tlv()
3859 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
3864 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
3869 mutex_lock(&codec->control_mutex); in ca0132_volume_tlv()
3874 mutex_unlock(&codec->control_mutex); in ca0132_volume_tlv()
3882 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, in add_fx_switch() argument
3890 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); in add_fx_switch()
3893 static int add_voicefx(struct hda_codec *codec) in add_voicefx() argument
3901 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); in add_voicefx()
3930 static int ca0132_build_controls(struct hda_codec *codec) in ca0132_build_controls() argument
3932 struct ca0132_spec *spec = codec->spec; in ca0132_build_controls()
3938 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in ca0132_build_controls()
3948 err = add_fx_switch(codec, ca0132_effects[i].nid, in ca0132_build_controls()
3955 err = add_fx_switch(codec, PLAY_ENHANCEMENT, "PlayEnhancement", 0); in ca0132_build_controls()
3959 err = add_fx_switch(codec, CRYSTAL_VOICE, "CrystalVoice", 1); in ca0132_build_controls()
3963 add_voicefx(codec); in ca0132_build_controls()
3966 add_tuning_ctls(codec); in ca0132_build_controls()
3969 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in ca0132_build_controls()
3974 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, in ca0132_build_controls()
3978 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); in ca0132_build_controls()
3985 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); in ca0132_build_controls()
4035 static int ca0132_build_pcms(struct hda_codec *codec) in ca0132_build_pcms() argument
4037 struct ca0132_spec *spec = codec->spec; in ca0132_build_pcms()
4040 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); in ca0132_build_pcms()
4051 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); in ca0132_build_pcms()
4058 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); in ca0132_build_pcms()
4068 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); in ca0132_build_pcms()
4086 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) in init_output() argument
4089 snd_hda_set_pin_ctl(codec, pin, PIN_HP); in init_output()
4090 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) in init_output()
4091 snd_hda_codec_write(codec, pin, 0, in init_output()
4095 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) in init_output()
4096 snd_hda_codec_write(codec, dac, 0, in init_output()
4100 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) in init_input() argument
4103 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); in init_input()
4104 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) in init_input()
4105 snd_hda_codec_write(codec, pin, 0, in init_input()
4109 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { in init_input()
4110 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, in init_input()
4114 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
4116 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, in init_input()
4121 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) in refresh_amp_caps() argument
4125 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? in refresh_amp_caps()
4127 snd_hda_override_amp_caps(codec, nid, dir, caps); in refresh_amp_caps()
4133 static void ca0132_set_dmic(struct hda_codec *codec, int enable) in ca0132_set_dmic() argument
4135 struct ca0132_spec *spec = codec->spec; in ca0132_set_dmic()
4140 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); in ca0132_set_dmic()
4142 oldval = stop_mic1(codec); in ca0132_set_dmic()
4143 ca0132_set_vipsource(codec, 0); in ca0132_set_dmic()
4147 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
4151 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
4155 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); in ca0132_set_dmic()
4159 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_set_dmic()
4164 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_set_dmic()
4168 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); in ca0132_set_dmic()
4170 ca0132_set_vipsource(codec, 1); in ca0132_set_dmic()
4171 resume_mic1(codec, oldval); in ca0132_set_dmic()
4177 static void ca0132_init_dmic(struct hda_codec *codec) in ca0132_init_dmic() argument
4179 struct ca0132_spec *spec = codec->spec; in ca0132_init_dmic()
4192 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4202 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4215 snd_hda_codec_write(codec, spec->input_pins[0], 0, in ca0132_init_dmic()
4222 static void ca0132_init_analog_mic2(struct hda_codec *codec) in ca0132_init_analog_mic2() argument
4224 struct ca0132_spec *spec = codec->spec; in ca0132_init_analog_mic2()
4227 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4229 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4231 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4233 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4235 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4237 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, in ca0132_init_analog_mic2()
4242 static void ca0132_refresh_widget_caps(struct hda_codec *codec) in ca0132_refresh_widget_caps() argument
4244 struct ca0132_spec *spec = codec->spec; in ca0132_refresh_widget_caps()
4247 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); in ca0132_refresh_widget_caps()
4248 snd_hda_codec_update_widgets(codec); in ca0132_refresh_widget_caps()
4251 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
4254 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); in ca0132_refresh_widget_caps()
4257 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); in ca0132_refresh_widget_caps()
4258 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); in ca0132_refresh_widget_caps()
4265 static void ca0132_setup_defaults(struct hda_codec *codec) in ca0132_setup_defaults() argument
4267 struct ca0132_spec *spec = codec->spec; in ca0132_setup_defaults()
4279 dspio_set_uint_param(codec, ca0132_effects[idx].mid, in ca0132_setup_defaults()
4287 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); in ca0132_setup_defaults()
4290 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); in ca0132_setup_defaults()
4294 dspio_set_uint_param(codec, 0x80, 0x00, tmp); in ca0132_setup_defaults()
4295 dspio_set_uint_param(codec, 0x80, 0x01, tmp); in ca0132_setup_defaults()
4299 dspio_set_uint_param(codec, 0x80, 0x05, tmp); in ca0132_setup_defaults()
4303 dspio_set_uint_param(codec, 0x31, 0x00, tmp); in ca0132_setup_defaults()
4309 static void ca0132_init_flags(struct hda_codec *codec) in ca0132_init_flags() argument
4311 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); in ca0132_init_flags()
4312 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_COMMON_MODE, 0); in ca0132_init_flags()
4313 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_COMMON_MODE, 0); in ca0132_init_flags()
4314 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_10KOHM_LOAD, 0); in ca0132_init_flags()
4315 chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0); in ca0132_init_flags()
4316 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); in ca0132_init_flags()
4322 static void ca0132_init_params(struct hda_codec *codec) in ca0132_init_params() argument
4324 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); in ca0132_init_params()
4325 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); in ca0132_init_params()
4328 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) in ca0132_set_dsp_msr() argument
4330 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); in ca0132_set_dsp_msr()
4331 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); in ca0132_set_dsp_msr()
4332 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); in ca0132_set_dsp_msr()
4333 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); in ca0132_set_dsp_msr()
4334 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); in ca0132_set_dsp_msr()
4335 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); in ca0132_set_dsp_msr()
4337 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); in ca0132_set_dsp_msr()
4338 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); in ca0132_set_dsp_msr()
4339 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); in ca0132_set_dsp_msr()
4342 static bool ca0132_download_dsp_images(struct hda_codec *codec) in ca0132_download_dsp_images() argument
4348 if (request_firmware(&fw_entry, EFX_FILE, codec->card->dev) != 0) in ca0132_download_dsp_images()
4352 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { in ca0132_download_dsp_images()
4357 dsp_loaded = dspload_wait_loaded(codec); in ca0132_download_dsp_images()
4365 static void ca0132_download_dsp(struct hda_codec *codec) in ca0132_download_dsp() argument
4367 struct ca0132_spec *spec = codec->spec; in ca0132_download_dsp()
4376 chipio_enable_clocks(codec); in ca0132_download_dsp()
4378 if (!ca0132_download_dsp_images(codec)) in ca0132_download_dsp()
4384 ca0132_set_dsp_msr(codec, true); in ca0132_download_dsp()
4387 static void ca0132_process_dsp_response(struct hda_codec *codec, in ca0132_process_dsp_response() argument
4390 struct ca0132_spec *spec = codec->spec; in ca0132_process_dsp_response()
4392 codec_dbg(codec, "ca0132_process_dsp_response\n"); in ca0132_process_dsp_response()
4394 if (dspio_get_response_data(codec) >= 0) in ca0132_process_dsp_response()
4398 dspio_clear_response_queue(codec); in ca0132_process_dsp_response()
4401 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in hp_callback() argument
4403 struct ca0132_spec *spec = codec->spec; in hp_callback()
4411 tbl = snd_hda_jack_tbl_get(codec, cb->nid); in hp_callback()
4416 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) in amic_callback() argument
4418 ca0132_select_mic(codec); in amic_callback()
4421 static void ca0132_init_unsol(struct hda_codec *codec) in ca0132_init_unsol() argument
4423 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_HP, hp_callback); in ca0132_init_unsol()
4424 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_AMIC1, in ca0132_init_unsol()
4426 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, in ca0132_init_unsol()
4496 static void ca0132_init_chip(struct hda_codec *codec) in ca0132_init_chip() argument
4498 struct ca0132_spec *spec = codec->spec; in ca0132_init_chip()
4530 ca0132_init_tuning_defaults(codec); in ca0132_init_chip()
4534 static void ca0132_exit_chip(struct hda_codec *codec) in ca0132_exit_chip() argument
4538 if (dspload_is_loaded(codec)) in ca0132_exit_chip()
4539 dsp_reset(codec); in ca0132_exit_chip()
4542 static int ca0132_init(struct hda_codec *codec) in ca0132_init() argument
4544 struct ca0132_spec *spec = codec->spec; in ca0132_init()
4552 snd_hda_power_up_pm(codec); in ca0132_init()
4554 ca0132_init_unsol(codec); in ca0132_init()
4556 ca0132_init_params(codec); in ca0132_init()
4557 ca0132_init_flags(codec); in ca0132_init()
4558 snd_hda_sequence_write(codec, spec->base_init_verbs); in ca0132_init()
4559 ca0132_download_dsp(codec); in ca0132_init()
4560 ca0132_refresh_widget_caps(codec); in ca0132_init()
4561 ca0132_setup_defaults(codec); in ca0132_init()
4562 ca0132_init_analog_mic2(codec); in ca0132_init()
4563 ca0132_init_dmic(codec); in ca0132_init()
4566 init_output(codec, spec->out_pins[i], spec->dacs[0]); in ca0132_init()
4568 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); in ca0132_init()
4571 init_input(codec, spec->input_pins[i], spec->adcs[i]); in ca0132_init()
4573 init_input(codec, cfg->dig_in_pin, spec->dig_in); in ca0132_init()
4576 snd_hda_sequence_write(codec, spec->init_verbs[i]); in ca0132_init()
4578 ca0132_select_out(codec); in ca0132_init()
4579 ca0132_select_mic(codec); in ca0132_init()
4581 snd_hda_jack_report_sync(codec); in ca0132_init()
4583 snd_hda_power_down_pm(codec); in ca0132_init()
4588 static void ca0132_free(struct hda_codec *codec) in ca0132_free() argument
4590 struct ca0132_spec *spec = codec->spec; in ca0132_free()
4593 snd_hda_power_up(codec); in ca0132_free()
4594 snd_hda_sequence_write(codec, spec->base_exit_verbs); in ca0132_free()
4595 ca0132_exit_chip(codec); in ca0132_free()
4596 snd_hda_power_down(codec); in ca0132_free()
4597 kfree(codec->spec); in ca0132_free()
4608 static void ca0132_config(struct hda_codec *codec) in ca0132_config() argument
4610 struct ca0132_spec *spec = codec->spec; in ca0132_config()
4647 static int patch_ca0132(struct hda_codec *codec) in patch_ca0132() argument
4652 codec_dbg(codec, "patch_ca0132\n"); in patch_ca0132()
4657 codec->spec = spec; in patch_ca0132()
4658 spec->codec = codec; in patch_ca0132()
4672 ca0132_init_chip(codec); in patch_ca0132()
4674 ca0132_config(codec); in patch_ca0132()
4676 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); in patch_ca0132()
4680 codec->patch_ops = ca0132_patch_ops; in patch_ca0132()
4681 codec->pcm_format_first = 1; in patch_ca0132()
4682 codec->no_sticky_stream = 1; in patch_ca0132()