patch-2.4.0-test10 linux/drivers/sbus/audio/dbri.c
Next file: linux/drivers/sbus/audio/dbri.h
Previous file: linux/drivers/sbus/audio/cs4215.h
Back to the patch index
Back to the overall index
- Lines: 124
- Date:
Mon Oct 30 14:34:12 2000
- Orig file:
v2.4.0-test9/linux/drivers/sbus/audio/dbri.c
- Orig date:
Thu Sep 7 08:32:01 2000
diff -u --recursive --new-file v2.4.0-test9/linux/drivers/sbus/audio/dbri.c linux/drivers/sbus/audio/dbri.c
@@ -1,4 +1,4 @@
-/* $Id: dbri.c,v 1.21 2000/08/31 23:44:17 davem Exp $
+/* $Id: dbri.c,v 1.22 2000/10/27 07:01:38 uzi Exp $
* drivers/sbus/audio/dbri.c
*
* Copyright (C) 1997 Rudolf Koenig (rfkoenig@immd4.informatik.uni-erlangen.de)
@@ -486,6 +486,7 @@
else if ((dbri->dbri_irqp & (DBRI_INT_BLK-1)) == 0)
dbri->dbri_irqp++;
+ tprintk(("dbri->dbri_irqp == %d\n", dbri->dbri_irqp));
dbri_process_one_interrupt(dbri, x);
}
}
@@ -1269,6 +1270,7 @@
} else {
int left_gain = (dbri->perchip_info.play.gain / 4) % 64;
int right_gain = (dbri->perchip_info.play.gain / 4) % 64;
+ int outport = dbri->perchip_info.play.port;
if (dbri->perchip_info.play.balance < AUDIO_MID_BALANCE) {
right_gain *= dbri->perchip_info.play.balance;
@@ -1282,8 +1284,11 @@
dprintk(D_MM, ("DBRI: Setting codec gain left: %d right: %d\n",
left_gain, right_gain));
- dbri->mm.data[0] = CS4215_LE | CS4215_HE | (63 - left_gain);
- dbri->mm.data[1] = CS4215_SE | (63 - right_gain);
+ dbri->mm.data[0] = (63 - left_gain);
+ if (outport & AUDIO_HEADPHONE) dbri->mm.data[0] |= CS4215_HE;
+ if (outport & AUDIO_LINE_OUT) dbri->mm.data[0] |= CS4215_LE;
+ dbri->mm.data[1] = (63 - right_gain);
+ if (outport & AUDIO_SPEAKER) dbri->mm.data[1] |= CS4215_SE;
}
xmit_fixed(dbri, 20, *(int *)dbri->mm.data);
@@ -1484,8 +1489,14 @@
dbri->perchip_info.play.channels = 1;
dbri->perchip_info.play.precision = 8;
- dbri->perchip_info.play.gain = 255;
+ dbri->perchip_info.play.gain = (AUDIO_MAX_GAIN * 7 / 10); /* 70% */
dbri->perchip_info.play.balance = AUDIO_MID_BALANCE;
+ dbri->perchip_info.play.port = dbri->perchip_info.play.avail_ports =
+ AUDIO_SPEAKER | AUDIO_HEADPHONE | AUDIO_LINE_OUT;
+ dbri->perchip_info.record.port = AUDIO_MICROPHONE;
+ dbri->perchip_info.record.avail_ports =
+ AUDIO_MICROPHONE | AUDIO_LINE_IN;
+
mmcodec_init_data(dbri);
return 0;
@@ -1834,32 +1845,52 @@
static int dbri_set_output_port(struct sparcaudio_driver *drv, int port)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ port &= dbri->perchip_info.play.avail_ports;
+ dbri->perchip_info.play.port = port;
+ mmcodec_setgain(dbri, 0);
+
+ return 0;
}
static int dbri_get_output_port(struct sparcaudio_driver *drv)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ return dbri->perchip_info.play.port;
}
static int dbri_set_input_port(struct sparcaudio_driver *drv, int port)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ port &= dbri->perchip_info.record.avail_ports;
+ dbri->perchip_info.record.port = port;
+ mmcodec_setgain(dbri, 0);
+
+ return 0;
}
static int dbri_get_input_port(struct sparcaudio_driver *drv)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ return dbri->perchip_info.record.port;
}
static int dbri_get_output_ports(struct sparcaudio_driver *drv)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ return dbri->perchip_info.play.avail_ports;
}
static int dbri_get_input_ports(struct sparcaudio_driver *drv)
{
- return 0;
+ struct dbri *dbri = (struct dbri *) drv->private;
+
+ return dbri->perchip_info.record.avail_ports;
}
/******************* sparcaudio midlevel - driver ID ********************/
@@ -1888,12 +1919,6 @@
struct sparcaudio_driver *drv)
{
MOD_INC_USE_COUNT;
-
- /* I've taken the liberty of setting half gain and
- * mid balance, to put the codec in a known state.
- */
- dbri_set_output_balance(drv, AUDIO_MID_BALANCE);
- dbri_set_output_volume(drv, AUDIO_MAX_GAIN / 2);
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)