Lines Matching refs:aci
31 #include <sound/aci.h>
114 struct snd_miro_aci *aci;
145 static int aci_busy_wait(struct snd_miro_aci *aci)
151 byte = inb(aci->aci_port + ACI_REG_BUSY);
154 snd_printd("aci ready in round %ld.\n",
181 static inline int aci_write(struct snd_miro_aci *aci, unsigned char byte)
183 if (aci_busy_wait(aci) >= 0) {
184 outb(byte, aci->aci_port + ACI_REG_COMMAND);
187 snd_printk(KERN_ERR "aci busy, aci_write(0x%x) stopped.\n", byte);
192 static inline int aci_read(struct snd_miro_aci *aci)
196 if (aci_busy_wait(aci) >= 0) {
197 byte = inb(aci->aci_port + ACI_REG_STATUS);
200 snd_printk(KERN_ERR "aci busy, aci_read() stopped.\n");
205 int snd_aci_cmd(struct snd_miro_aci *aci, int write1, int write2, int write3)
210 if (mutex_lock_interruptible(&aci->aci_mutex))
217 value = aci_write(aci, write[i]);
223 value = aci_read(aci);
225 out: mutex_unlock(&aci->aci_mutex);
230 static int aci_getvalue(struct snd_miro_aci *aci, unsigned char index)
232 return snd_aci_cmd(aci, ACI_STATUS, index, -1);
235 static int aci_setvalue(struct snd_miro_aci *aci, unsigned char index,
238 return snd_aci_cmd(aci, index, value, -1);
261 value = aci_getvalue(miro->aci, ACI_S_GENERAL);
281 error = aci_setvalue(miro->aci, ACI_SET_SOLOMODE, value);
288 change = (value != miro->aci->aci_solomode);
289 miro->aci->aci_solomode = value;
311 if (miro->aci->aci_version <= 176) {
319 ucontrol->value.integer.value[0] = miro->aci->aci_preamp;
323 value = aci_getvalue(miro->aci, ACI_GET_PREAMP);
343 error = aci_setvalue(miro->aci, ACI_SET_PREAMP, value);
350 change = (value != miro->aci->aci_preamp);
351 miro->aci->aci_preamp = value;
362 ucontrol->value.integer.value[0] = miro->aci->aci_amp;
375 error = aci_setvalue(miro->aci, ACI_SET_POWERAMP, value);
381 change = (value != miro->aci->aci_amp);
382 miro->aci->aci_amp = value;
431 right_val = aci_getvalue(miro->aci, right_reg);
437 left_val = aci_getvalue(miro->aci, left_reg);
474 struct snd_miro_aci *aci = miro->aci;
490 left_old = aci_getvalue(aci, getreg_left);
496 right_old = aci_getvalue(aci, getreg_right);
516 error = aci_setvalue(aci, setreg_left, left);
523 error = aci_setvalue(aci, setreg_left, 0x80 - left);
532 error = aci_setvalue(aci, setreg_right, right);
539 error = aci_setvalue(aci, setreg_right, 0x80 - right);
558 error = aci_setvalue(aci, setreg_left, 0x20 - left);
564 error = aci_setvalue(aci, setreg_right, 0x20 - right);
663 struct snd_miro_aci *aci = miro->aci;
667 if ((aci->aci_product == 'A') && wss) {
668 error = aci_setvalue(aci, ACI_SET_WSS, wss);
678 error = aci_setvalue(aci, ACI_SET_IDE, ide);
685 /* set common aci values */
688 error = aci_setvalue(aci, aci_init_values[idx][0],
696 aci->aci_amp = 0;
697 aci->aci_preamp = 0;
698 aci->aci_solomode = 1;
730 if ((miro->aci->aci_product == 'A') ||
731 (miro->aci->aci_product == 'B')) {
741 if ((miro->aci->aci_product == 'B') ||
742 (miro->aci->aci_product == 'C')) {
747 if (miro->aci->aci_version >= 176) {
754 if (miro->aci->aci_product == 'C') {
891 struct snd_miro_aci *aci = miro->aci;
897 (aci->aci_vendor == 'm') &&
898 (aci->aci_product == 'A')) {
899 switch (aci->aci_version) {
912 (aci->aci_vendor == 'm') &&
913 (aci->aci_product == 'B')) {
914 switch (aci->aci_version) {
930 (aci->aci_vendor == 'm') &&
931 (aci->aci_product == 'C')) {
932 switch (aci->aci_version) {
956 switch (aci->aci_vendor) {
961 snd_iprintf(buffer, "unknown (0x%x)\n", aci->aci_vendor);
966 switch (aci->aci_product) {
977 snd_iprintf(buffer, "unknown (0x%x)\n", aci->aci_product);
982 aci->aci_version, aci->aci_version);
984 aci->aci_port, aci->aci_port+2);
987 snd_iprintf(buffer, " solomode: 0x%x\n", aci->aci_solomode);
988 snd_iprintf(buffer, " amp : 0x%x\n", aci->aci_amp);
989 snd_iprintf(buffer, " preamp : 0x%x\n", aci->aci_preamp);
1207 struct snd_miro_aci *aci = &aci_device;
1209 miro->aci = aci;
1211 mutex_init(&aci->aci_mutex);
1216 aci->aci_port = (regval & 0x10) ? 0x344 : 0x354;
1219 devm_request_region(card->dev, aci->aci_port, 3, "miro aci");
1221 snd_printk(KERN_ERR "aci i/o area 0x%lx-0x%lx already used.\n",
1222 aci->aci_port, aci->aci_port+2);
1228 if (snd_aci_cmd(aci, ACI_ERROR_OP, -1, -1) < 0) {
1229 snd_printk(KERN_ERR "can't force aci into known state.\n");
1233 aci->aci_vendor = snd_aci_cmd(aci, ACI_READ_IDCODE, -1, -1);
1234 aci->aci_product = snd_aci_cmd(aci, ACI_READ_IDCODE, -1, -1);
1235 if (aci->aci_vendor < 0 || aci->aci_product < 0) {
1236 snd_printk(KERN_ERR "can't read aci id on 0x%lx.\n",
1237 aci->aci_port);
1241 aci->aci_version = snd_aci_cmd(aci, ACI_READ_VERSION, -1, -1);
1242 if (aci->aci_version < 0) {
1243 snd_printk(KERN_ERR "can't read aci version on 0x%lx.\n",
1244 aci->aci_port);
1248 if (snd_aci_cmd(aci, ACI_INIT, -1, -1) < 0 ||
1249 snd_aci_cmd(aci, ACI_ERROR_OP, ACI_ERROR_OP, ACI_ERROR_OP) < 0 ||
1250 snd_aci_cmd(aci, ACI_ERROR_OP, ACI_ERROR_OP, ACI_ERROR_OP) < 0) {
1251 snd_printk(KERN_ERR "can't initialize aci.\n");
1278 snd_printk(KERN_ERR "unable to detect aci chip\n");
1320 if (miro->aci->aci_vendor == 'm') {
1322 switch (miro->aci->aci_product) {
1338 snd_printk(KERN_INFO "unknown miro aci id\n");
1342 snd_printk(KERN_INFO "found unsupported aci card\n");