1*2a1ad637SFrançois Tigeot /*- 24886ec58SHasso Tepper * Copyright (c) 2006 Konstantin Dimitrov <kosio.dimitrov@gmail.com> 34886ec58SHasso Tepper * Copyright (c) 2001 Katsurajima Naoto <raven@katsurajima.seya.yokohama.jp> 44886ec58SHasso Tepper * All rights reserved. 54886ec58SHasso Tepper * 64886ec58SHasso Tepper * Redistribution and use in source and binary forms, with or without 74886ec58SHasso Tepper * modification, are permitted provided that the following conditions 84886ec58SHasso Tepper * are met: 94886ec58SHasso Tepper * 1. Redistributions of source code must retain the above copyright 104886ec58SHasso Tepper * notice, this list of conditions and the following disclaimer. 114886ec58SHasso Tepper * 2. Redistributions in binary form must reproduce the above copyright 124886ec58SHasso Tepper * notice, this list of conditions and the following disclaimer in the 134886ec58SHasso Tepper * documentation and/or other materials provided with the distribution. 144886ec58SHasso Tepper * 154886ec58SHasso Tepper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 164886ec58SHasso Tepper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 174886ec58SHasso Tepper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 184886ec58SHasso Tepper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 194886ec58SHasso Tepper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 204886ec58SHasso Tepper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 214886ec58SHasso Tepper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 224886ec58SHasso Tepper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHERIN CONTRACT, STRICT 234886ec58SHasso Tepper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 244886ec58SHasso Tepper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF 254886ec58SHasso Tepper * SUCH DAMAGE. 264886ec58SHasso Tepper * 27*2a1ad637SFrançois Tigeot * $FreeBSD: head/sys/dev/sound/pci/spicds.h 205859 2010-03-29 20:27:17Z joel $ 284886ec58SHasso Tepper */ 294886ec58SHasso Tepper 304886ec58SHasso Tepper /* supported CODECs */ 314886ec58SHasso Tepper #define SPICDS_TYPE_AK4524 0 324886ec58SHasso Tepper #define SPICDS_TYPE_AK4528 1 334886ec58SHasso Tepper #define SPICDS_TYPE_WM8770 2 344886ec58SHasso Tepper #define SPICDS_TYPE_AK4358 3 354886ec58SHasso Tepper #define SPICDS_TYPE_AK4381 4 364886ec58SHasso Tepper #define SPICDS_TYPE_AK4396 5 374886ec58SHasso Tepper 384886ec58SHasso Tepper /* AK4524/AK4528 control registers */ 394886ec58SHasso Tepper #define AK4524_POWER 0x00 404886ec58SHasso Tepper #define AK4528_POWER 0x00 414886ec58SHasso Tepper #define AK452X_POWER_PWDA 0x01 424886ec58SHasso Tepper #define AK452X_POWER_PWAD 0x02 434886ec58SHasso Tepper #define AK452X_POWER_PWVR 0x04 444886ec58SHasso Tepper #define AK4524_RESET 0x01 454886ec58SHasso Tepper #define AK4528_RESET 0x01 464886ec58SHasso Tepper #define AK452X_RESET_RSDA 0x01 474886ec58SHasso Tepper #define AK452X_RESET_RSAD 0x02 484886ec58SHasso Tepper #define AK4524_FORMAT 0x02 494886ec58SHasso Tepper #define AK4528_FORMAT 0x02 504886ec58SHasso Tepper #define AK452X_FORMAT_1X 0x00 514886ec58SHasso Tepper #define AK452X_FORMAT_2X 0x01 524886ec58SHasso Tepper #define AK452X_FORMAT_4X1 0x02 534886ec58SHasso Tepper #define AK452X_FORMAT_4X2 0x03 544886ec58SHasso Tepper #define AK452X_FORMAT_256FSN 0x00 554886ec58SHasso Tepper #define AK452X_FORMAT_512FSN 0x04 564886ec58SHasso Tepper #define AK452X_FORMAT_1024FSN 0x08 574886ec58SHasso Tepper #define AK452X_FORMAT_384FSN 0x10 584886ec58SHasso Tepper #define AK452X_FORMAT_768FSN 0x14 594886ec58SHasso Tepper #define AK452X_FORMAT_OM24IL16 0x00 604886ec58SHasso Tepper #define AK452X_FORMAT_OM24IL20 0x20 614886ec58SHasso Tepper #define AK452X_FORMAT_OM24IM24 0x40 624886ec58SHasso Tepper #define AK452X_FORMAT_I2S 0x60 634886ec58SHasso Tepper #define AK452X_FORMAT_OM24IL24 0x80 644886ec58SHasso Tepper #define AK4524_DVC 0x03 654886ec58SHasso Tepper #define AK452X_DVC_DEM441 0x00 664886ec58SHasso Tepper #define AK452X_DVC_DEMOFF 0x01 674886ec58SHasso Tepper #define AK452X_DVC_DEM48 0x02 684886ec58SHasso Tepper #define AK452X_DVC_DEM32 0x03 694886ec58SHasso Tepper #define AK452X_DVC_ZTM256 0x00 704886ec58SHasso Tepper #define AK452X_DVC_ZTM512 0x04 714886ec58SHasso Tepper #define AK452X_DVC_ZTM1024 0x08 724886ec58SHasso Tepper #define AK452X_DVC_ZTM2048 0x0c 734886ec58SHasso Tepper #define AK452X_DVC_ZCE 0x10 744886ec58SHasso Tepper #define AK452X_DVC_HPFL 0x04 754886ec58SHasso Tepper #define AK452X_DVC_HPFR 0x08 764886ec58SHasso Tepper #define AK452X_DVC_SMUTE 0x80 774886ec58SHasso Tepper #define AK4524_LIPGA 0x04 784886ec58SHasso Tepper #define AK4524_RIPGA 0x05 794886ec58SHasso Tepper #define AK4524_LOATT 0x06 804886ec58SHasso Tepper #define AK4524_ROATT 0x07 814886ec58SHasso Tepper #define AK4528_LOATT 0x04 824886ec58SHasso Tepper #define AK4528_ROATT 0x05 834886ec58SHasso Tepper 844886ec58SHasso Tepper /* WM8770 control registers */ 854886ec58SHasso Tepper #define WM8770_AOATT_L1 0x00 864886ec58SHasso Tepper #define WM8770_AOATT_R1 0x01 874886ec58SHasso Tepper #define WM8770_AOATT_L2 0x02 884886ec58SHasso Tepper #define WM8770_AOATT_R2 0x03 894886ec58SHasso Tepper #define WM8770_AOATT_L3 0x04 904886ec58SHasso Tepper #define WM8770_AOATT_R3 0x05 914886ec58SHasso Tepper #define WM8770_AOATT_L4 0x06 924886ec58SHasso Tepper #define WM8770_AOATT_R4 0x07 934886ec58SHasso Tepper #define WM8770_AOATT_MAST 0x08 944886ec58SHasso Tepper #define WM8770_AOATT_UPDATE 0x100 954886ec58SHasso Tepper 964886ec58SHasso Tepper /* AK4358 control registers */ 974886ec58SHasso Tepper #define AK4358_LO1ATT 0x04 984886ec58SHasso Tepper #define AK4358_RO1ATT 0x05 994886ec58SHasso Tepper #define AK4358_OATT_ENABLE 0x80 1004886ec58SHasso Tepper 1014886ec58SHasso Tepper /* AK4381 control registers */ 1024886ec58SHasso Tepper #define AK4381_LOATT 0x03 1034886ec58SHasso Tepper #define AK4381_ROATT 0x04 1044886ec58SHasso Tepper 1054886ec58SHasso Tepper /* AK4396 control registers */ 1064886ec58SHasso Tepper #define AK4396_LOATT 0x03 1074886ec58SHasso Tepper #define AK4396_ROATT 0x04 1084886ec58SHasso Tepper 1094886ec58SHasso Tepper struct spicds_info; 1104886ec58SHasso Tepper 1114886ec58SHasso Tepper typedef void (*spicds_ctrl)(void *, unsigned int, unsigned int, unsigned int); 1124886ec58SHasso Tepper 1134886ec58SHasso Tepper struct spicds_info *spicds_create(device_t dev, void *devinfo, int num, spicds_ctrl); 1144886ec58SHasso Tepper void spicds_destroy(struct spicds_info *codec); 1154886ec58SHasso Tepper void spicds_settype(struct spicds_info *codec, unsigned int type); 1164886ec58SHasso Tepper void spicds_setcif(struct spicds_info *codec, unsigned int cif); 1174886ec58SHasso Tepper void spicds_setformat(struct spicds_info *codec, unsigned int format); 1184886ec58SHasso Tepper void spicds_setdvc(struct spicds_info *codec, unsigned int dvc); 1194886ec58SHasso Tepper void spicds_init(struct spicds_info *codec); 1204886ec58SHasso Tepper void spicds_reinit(struct spicds_info *codec); 1214886ec58SHasso Tepper void spicds_set(struct spicds_info *codec, int dir, unsigned int left, unsigned int right); 122