Lines Matching refs:aci
31 #include <sound/aci.h>
117 struct snd_miro_aci *aci;
148 static int aci_busy_wait(struct snd_miro_aci *aci)
154 byte = inb(aci->aci_port + ACI_REG_BUSY);
157 snd_printd("aci ready in round %ld.\n",
184 static inline int aci_write(struct snd_miro_aci *aci, unsigned char byte)
186 if (aci_busy_wait(aci) >= 0) {
187 outb(byte, aci->aci_port + ACI_REG_COMMAND);
190 snd_printk(KERN_ERR "aci busy, aci_write(0x%x) stopped.\n", byte);
195 static inline int aci_read(struct snd_miro_aci *aci)
199 if (aci_busy_wait(aci) >= 0) {
200 byte = inb(aci->aci_port + ACI_REG_STATUS);
203 snd_printk(KERN_ERR "aci busy, aci_read() stopped.\n");
208 int snd_aci_cmd(struct snd_miro_aci *aci, int write1, int write2, int write3)
213 if (mutex_lock_interruptible(&aci->aci_mutex))
220 value = aci_write(aci, write[i]);
226 value = aci_read(aci);
228 out: mutex_unlock(&aci->aci_mutex);
233 static int aci_getvalue(struct snd_miro_aci *aci, unsigned char index)
235 return snd_aci_cmd(aci, ACI_STATUS, index, -1);
238 static int aci_setvalue(struct snd_miro_aci *aci, unsigned char index,
241 return snd_aci_cmd(aci, index, value, -1);
264 value = aci_getvalue(miro->aci, ACI_S_GENERAL);
284 error = aci_setvalue(miro->aci, ACI_SET_SOLOMODE, value);
291 change = (value != miro->aci->aci_solomode);
292 miro->aci->aci_solomode = value;
314 if (miro->aci->aci_version <= 176) {
322 ucontrol->value.integer.value[0] = miro->aci->aci_preamp;
326 value = aci_getvalue(miro->aci, ACI_GET_PREAMP);
346 error = aci_setvalue(miro->aci, ACI_SET_PREAMP, value);
353 change = (value != miro->aci->aci_preamp);
354 miro->aci->aci_preamp = value;
365 ucontrol->value.integer.value[0] = miro->aci->aci_amp;
378 error = aci_setvalue(miro->aci, ACI_SET_POWERAMP, value);
384 change = (value != miro->aci->aci_amp);
385 miro->aci->aci_amp = value;
434 right_val = aci_getvalue(miro->aci, right_reg);
440 left_val = aci_getvalue(miro->aci, left_reg);
477 struct snd_miro_aci *aci = miro->aci;
493 left_old = aci_getvalue(aci, getreg_left);
499 right_old = aci_getvalue(aci, getreg_right);
519 error = aci_setvalue(aci, setreg_left, left);
526 error = aci_setvalue(aci, setreg_left, 0x80 - left);
535 error = aci_setvalue(aci, setreg_right, right);
542 error = aci_setvalue(aci, setreg_right, 0x80 - right);
561 error = aci_setvalue(aci, setreg_left, 0x20 - left);
567 error = aci_setvalue(aci, setreg_right, 0x20 - right);
666 struct snd_miro_aci *aci = miro->aci;
670 if ((aci->aci_product == 'A') && wss) {
671 error = aci_setvalue(aci, ACI_SET_WSS, wss);
681 error = aci_setvalue(aci, ACI_SET_IDE, ide);
688 /* set common aci values */
691 error = aci_setvalue(aci, aci_init_values[idx][0],
699 aci->aci_amp = 0;
700 aci->aci_preamp = 0;
701 aci->aci_solomode = 1;
732 if ((miro->aci->aci_product == 'A') ||
733 (miro->aci->aci_product == 'B')) {
741 if ((miro->aci->aci_product == 'B') ||
742 (miro->aci->aci_product == 'C')) {
746 if (miro->aci->aci_version >= 176)
751 if (miro->aci->aci_product == 'C') {
886 struct snd_miro_aci *aci = miro->aci;
892 (aci->aci_vendor == 'm') &&
893 (aci->aci_product == 'A')) {
894 switch (aci->aci_version) {
907 (aci->aci_vendor == 'm') &&
908 (aci->aci_product == 'B')) {
909 switch (aci->aci_version) {
925 (aci->aci_vendor == 'm') &&
926 (aci->aci_product == 'C')) {
927 switch (aci->aci_version) {
951 switch (aci->aci_vendor) {
956 snd_iprintf(buffer, "unknown (0x%x)\n", aci->aci_vendor);
961 switch (aci->aci_product) {
972 snd_iprintf(buffer, "unknown (0x%x)\n", aci->aci_product);
977 aci->aci_version, aci->aci_version);
979 aci->aci_port, aci->aci_port+2);
982 snd_iprintf(buffer, " solomode: 0x%x\n", aci->aci_solomode);
983 snd_iprintf(buffer, " amp : 0x%x\n", aci->aci_amp);
984 snd_iprintf(buffer, " preamp : 0x%x\n", aci->aci_preamp);
1200 struct snd_miro_aci *aci = &aci_device;
1202 miro->aci = aci;
1204 mutex_init(&aci->aci_mutex);
1209 aci->aci_port = (regval & 0x10) ? 0x344 : 0x354;
1211 miro->res_aci_port = request_region(aci->aci_port, 3, "miro aci");
1213 snd_printk(KERN_ERR "aci i/o area 0x%lx-0x%lx already used.\n",
1214 aci->aci_port, aci->aci_port+2);
1220 if (snd_aci_cmd(aci, ACI_ERROR_OP, -1, -1) < 0) {
1221 snd_printk(KERN_ERR "can't force aci into known state.\n");
1225 aci->aci_vendor = snd_aci_cmd(aci, ACI_READ_IDCODE, -1, -1);
1226 aci->aci_product = snd_aci_cmd(aci, ACI_READ_IDCODE, -1, -1);
1227 if (aci->aci_vendor < 0 || aci->aci_product < 0) {
1228 snd_printk(KERN_ERR "can't read aci id on 0x%lx.\n",
1229 aci->aci_port);
1233 aci->aci_version = snd_aci_cmd(aci, ACI_READ_VERSION, -1, -1);
1234 if (aci->aci_version < 0) {
1235 snd_printk(KERN_ERR "can't read aci version on 0x%lx.\n",
1236 aci->aci_port);
1240 if (snd_aci_cmd(aci, ACI_INIT, -1, -1) < 0 ||
1241 snd_aci_cmd(aci, ACI_ERROR_OP, ACI_ERROR_OP, ACI_ERROR_OP) < 0 ||
1242 snd_aci_cmd(aci, ACI_ERROR_OP, ACI_ERROR_OP, ACI_ERROR_OP) < 0) {
1243 snd_printk(KERN_ERR "can't initialize aci.\n");
1255 if (miro->aci)
1256 miro->aci->aci_port = 0;
1279 snd_printk(KERN_ERR "unable to detect aci chip\n");
1321 if (miro->aci->aci_vendor == 'm') {
1323 switch (miro->aci->aci_product) {
1339 snd_printk(KERN_INFO "unknown miro aci id\n");
1343 snd_printk(KERN_INFO "found unsupported aci card\n");