[alsa-devel] [PATCH - asihpi 3/5] use new query functions

linux at audioscience.com linux at audioscience.com
Fri Jul 18 08:00:17 CEST 2008


From: Eliot Blennerhassett <eblennerhassett at audioscience.com>


Signed-off-by: Eliot Blennerhassett <eblennerhassett at audioscience.com>

diff --git a/pci/asihpi/asihpi.c b/pci/asihpi/asihpi.c
index f9fe449..31dd144 100644
--- a/pci/asihpi/asihpi.c
+++ b/pci/asihpi/asihpi.c
@@ -47,6 +47,9 @@
 #define ASI_STYLE_NAMES 1
 #endif
 
+#include "hpi_internal.h"
+#include "hpioctl.h"
+
 #ifndef KERNEL_ALSA_BUILD
 /* building in ALSA source tree */
 #include "adriver.h"
@@ -71,8 +74,6 @@
 #include <sound/tlv.h>
 #include <sound/hwdep.h>
 
-#include "hpi.h"
-#include "hpioctl.h"
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("AudioScience Inc. <support at audioscience.com>");
@@ -185,14 +186,13 @@ static u16 HPI_StreamHostBufferAttach(
 {
 	struct hpi_message hm;
 	struct hpi_response hr;
+	unsigned int obj = HPI_HandleObject(hStream);
 
 	if (!hStream)
 		return HPI_ERROR_INVALID_OBJ;
-	if (HPI_HandleObject(hStream) ==  HPI_OBJ_OSTREAM)
-		HPI_InitMessage(&hm,  HPI_OBJ_OSTREAM,
-				HPI_OSTREAM_HOSTBUFFER_ALLOC);
-	else
-		HPI_InitMessage(&hm,  HPI_OBJ_ISTREAM,
+	HPI_InitMessage(&hm,  obj,
+			obj == HPI_OBJ_OSTREAM ?
+				HPI_OSTREAM_HOSTBUFFER_ALLOC :
 				HPI_ISTREAM_HOSTBUFFER_ALLOC);
 
 	HPI_HandleToIndexes(hStream, &hm.wAdapterIndex,
@@ -212,16 +212,15 @@ static u16 HPI_StreamHostBufferDetach(
 {
 	struct hpi_message hm;
 	struct hpi_response hr;
+	unsigned int obj = HPI_HandleObject(hStream);
 
 	if (!hStream)
 		return HPI_ERROR_INVALID_OBJ;
 
-	if (HPI_HandleObject(hStream) ==  HPI_OBJ_OSTREAM)
-		HPI_InitMessage(&hm,  HPI_OBJ_OSTREAM,
-					HPI_OSTREAM_HOSTBUFFER_FREE);
-	else
-		HPI_InitMessage(&hm,  HPI_OBJ_ISTREAM,
-					HPI_ISTREAM_HOSTBUFFER_FREE);
+	HPI_InitMessage(&hm,  obj,
+			obj == HPI_OBJ_OSTREAM ?
+				HPI_OSTREAM_HOSTBUFFER_FREE :
+				HPI_ISTREAM_HOSTBUFFER_FREE);
 
 	HPI_HandleToIndexes(hStream, &hm.wAdapterIndex,
 				&hm.u.d.wStreamIndex, NULL);
@@ -396,9 +395,8 @@ static void snd_card_asihpi_pcm_samplerates(struct snd_card_asihpi *asihpi,
 					  HPI_CONTROL_SAMPLECLOCK, &hControl);
 
 		for (idx = 0; idx < 100; idx++) {
-			if (HPI_ControlQuery(phSubSys, hControl,
-					HPI_SAMPLECLOCK_SAMPLERATE,
-					idx, 0, &sampleRate))
+			if (HPI_SampleClock_QueryLocalRate(phSubSys, hControl,
+					idx, &sampleRate))
 				break;
 
 			rate_min = min(rate_min, sampleRate);
@@ -1311,6 +1309,7 @@ struct hpi_control {
 	u16 wDstNodeType;
 	u16 wDstNodeIndex;
 	u16 wBand;
+	char name[44]; /* copied to snd_ctl_elem_id.name[44]; */
 };
 
 static char *asihpi_tuner_band_names[] =
@@ -1346,6 +1345,7 @@ static char *asihpi_src_names[] =
 	"Bitstr",
 	"Mic",
 	"Cobranet",
+	"AnalogIn",
 };
 #else
 static char *asihpi_src_names[] =
@@ -1360,10 +1360,13 @@ static char *asihpi_src_names[] =
 	"Bitstream",
 	"Mic",
 	"Cobranet in",
+	"Analog in",
 };
 #endif
 
-#define NUM_SOURCENODE_STRINGS 10
+#if ((11 != (HPI_SOURCENODE_LAST_INDEX-HPI_SOURCENODE_BASE+1)))
+#error "SourceNode strings don't agree with HPI defines - version mismatch?"
+#endif
 
 #if ASI_STYLE_NAMES
 static char *asihpi_dst_names[] =
@@ -1375,6 +1378,7 @@ static char *asihpi_dst_names[] =
 	"RF",
 	"Speaker" ,
 	"Cobranet",
+	"AnalogOut",
 };
 #else
 static char *asihpi_dst_names[] =
@@ -1386,17 +1390,14 @@ static char *asihpi_dst_names[] =
 	"RF",
 	"Speaker",
 	"Cobranet out",
+	"Analog out",
 };
 #endif
-#define NUM_DESTNODE_STRINGS 7
 
-#if ((NUM_SOURCENODE_STRINGS != \
-	(HPI_SOURCENODE_LAST_INDEX-HPI_SOURCENODE_BASE+1)) || \
-      (NUM_DESTNODE_STRINGS  != (HPI_DESTNODE_LAST_INDEX-HPI_DESTNODE_BASE+1)))
-#error "Node strings don't agree with HPI defines - version mismatch?"
+#if ((8 != (HPI_DESTNODE_LAST_INDEX-HPI_DESTNODE_BASE+1)))
+#error "DestNode strings don't agree with HPI defines - version mismatch?"
 #endif
 
-static char snd_control_name[44]; /*asound.h:745 unsigned char name[44]; */
 
 static inline int ctl_add(struct snd_card *card, struct snd_kcontrol_new *ctl,
 				struct snd_card_asihpi *asihpi)
@@ -1418,25 +1419,25 @@ static void asihpi_ctl_init(struct snd_kcontrol_new *snd_control,
 				char *name)
 {
 	memset(snd_control, 0, sizeof(*snd_control));
-	snd_control->name = snd_control_name;
+	snd_control->name = asihpi_control->name;
 	snd_control->private_value = asihpi_control->hControl;
 	snd_control->iface = SNDRV_CTL_ELEM_IFACE_MIXER;
 	snd_control->index = 0;
 
 	if (asihpi_control->wSrcNodeType && asihpi_control->wDstNodeType)
-		sprintf(snd_control->name, "%s%d to %s%d %s",
+		sprintf(asihpi_control->name, "%s%d to %s%d %s",
 			asihpi_src_names[asihpi_control->wSrcNodeType],
 			asihpi_control->wSrcNodeIndex,
 			asihpi_dst_names[asihpi_control->wDstNodeType],
 			asihpi_control->wDstNodeIndex,
 			name);
 	else if (asihpi_control->wDstNodeType) {
-		sprintf(snd_control->name, "%s%d %s",
+		sprintf(asihpi_control->name, "%s%d %s",
 		asihpi_dst_names[asihpi_control->wDstNodeType],
 		asihpi_control->wDstNodeIndex,
 		name);
 	} else {
-		sprintf(snd_control->name, "%s%d %s",
+		sprintf(asihpi_control->name, "%s%d %s",
 		asihpi_src_names[asihpi_control->wSrcNodeType],
 		asihpi_control->wSrcNodeIndex,
 		name);
@@ -1530,10 +1531,26 @@ static int __devinit snd_asihpi_volume_add(struct snd_card_asihpi *asihpi,
 static int snd_asihpi_level_info(struct snd_kcontrol *kcontrol,
 				 struct snd_ctl_elem_info *uinfo)
 {
+	u32 hControl = kcontrol->private_value;
+	u16 err;
+	short nMinGain_01dB;
+	short nMaxGain_01dB;
+	short nStepGain_01dB;
+
+	err =
+	    HPI_LevelQueryRange(phSubSys, hControl, &nMinGain_01dB,
+			       &nMaxGain_01dB, &nStepGain_01dB);
+	if (err) {
+		nMaxGain_01dB = 2400;
+		nMinGain_01dB = -1000;
+		nStepGain_01dB = 100;
+	}
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 	uinfo->count = 2;
-	uinfo->value.integer.min = -10;
-	uinfo->value.integer.max = 24;
+	uinfo->value.integer.min = nMinGain_01dB / HPI_UNITS_PER_dB;
+	uinfo->value.integer.max = nMaxGain_01dB / HPI_UNITS_PER_dB;
+	uinfo->value.integer.step = nStepGain_01dB / HPI_UNITS_PER_dB;
 	return 0;
 }
 
@@ -1763,11 +1780,10 @@ static int snd_asihpi_tuner_gain_info(struct snd_kcontrol *kcontrol,
 	u32 hControl = kcontrol->private_value;
 	u16 err;
 	short idx;
-	u32 gainRange[3];
+	u16 gainRange[3];
 
 	for (idx = 0; idx < 3; idx++) {
-	err = HPI_ControlQuery(phSubSys, hControl, HPI_TUNER_GAIN,
-				idx, 0, &gainRange[idx]);
+	err = HPI_Tuner_QueryGain(phSubSys, hControl, idx, &gainRange[idx]);
 		if (err != 0)
 			return err;
 	}
@@ -1813,25 +1829,24 @@ static int snd_asihpi_tuner_gain_put(struct snd_kcontrol *kcontrol,
 /* Band  */
 
 static int asihpi_tuner_band_query(struct snd_kcontrol *kcontrol,
-					u32 *bandList, u32 len) {
+					u16 *bandList, u32 len) {
 	u32 hControl = kcontrol->private_value;
 	u16 err;
-	u32 idx;
+	u32 i;
 
-	for (idx = 0; idx < len; idx++) {
-		err = HPI_ControlQuery(phSubSys, hControl , HPI_TUNER_BAND,
-				idx, 0 , &bandList[idx]);
+	for (i = 0; i < len; i++) {
+		err = HPI_Tuner_QueryBand(phSubSys, hControl, i, &bandList[i]);
 		if (err != 0)
 			break;
 	}
 
-	return idx;
+	return i;
 }
 
 static int snd_asihpi_tuner_band_info(struct snd_kcontrol *kcontrol,
 				  struct snd_ctl_elem_info *uinfo)
 {
-	u32 tunerBands[HPI_TUNER_BAND_LAST];
+	u16 tunerBands[HPI_TUNER_BAND_LAST];
 	u32 numBands = 0;
 
 	numBands = asihpi_tuner_band_query(kcontrol, tunerBands,
@@ -1860,7 +1875,7 @@ static int snd_asihpi_tuner_band_get(struct snd_kcontrol *kcontrol,
 	struct snd_card_asihpi *asihpi = snd_kcontrol_chip(kcontrol);
 	*/
 	u16 band, idx;
-	u32 tunerBands[HPI_TUNER_BAND_LAST];
+	u16 tunerBands[HPI_TUNER_BAND_LAST];
 	u32 numBands = 0;
 
 	numBands = asihpi_tuner_band_query(kcontrol, tunerBands,
@@ -1886,7 +1901,7 @@ static int snd_asihpi_tuner_band_put(struct snd_kcontrol *kcontrol,
 	*/
 	u32 hControl = kcontrol->private_value;
 	u16 band;
-	u32 tunerBands[HPI_TUNER_BAND_LAST];
+	u16 tunerBands[HPI_TUNER_BAND_LAST];
 	u32 numBands = 0;
 
 	numBands = asihpi_tuner_band_query(kcontrol, tunerBands,
@@ -1905,8 +1920,8 @@ static int snd_asihpi_tuner_freq_info(struct snd_kcontrol *kcontrol,
 {
 	u32 hControl = kcontrol->private_value;
 	u16 err;
-	u32 tunerBands[HPI_TUNER_BAND_LAST];
-	u32 numBands = 0, band_iter, idx;
+	u16 tunerBands[HPI_TUNER_BAND_LAST];
+	u16 numBands = 0, band_iter, idx;
 	u32 freqRange[3], tempFreqRange[3];
 
 	numBands = asihpi_tuner_band_query(kcontrol, tunerBands,
@@ -1918,8 +1933,8 @@ static int snd_asihpi_tuner_freq_info(struct snd_kcontrol *kcontrol,
 
 	for (band_iter = 0; band_iter < numBands; band_iter++) {
 		for (idx = 0; idx < 3; idx++) {
-			err = HPI_ControlQuery(phSubSys, hControl,
-				HPI_TUNER_FREQ, idx, tunerBands[band_iter],
+			err = HPI_Tuner_QueryFrequency(phSubSys, hControl,
+				idx, tunerBands[band_iter],
 				&tempFreqRange[idx]);
 			if (err != 0)
 				return err;
@@ -2242,15 +2257,14 @@ static int snd_asihpi_cmode_info(struct snd_kcontrol *kcontrol,
 	};
 
 	u32 hControl = kcontrol->private_value;
-	u32 mode;
+	u16 wMode;
 	int i;
 
 	/* HPI channel mode values can be from 1 to 6
 	Some adapters only support a contiguous subset
 	*/
 	for (i = 0; i < HPI_CHANNEL_MODE_LAST; i++)
-		if (HPI_ControlQuery(phSubSys, hControl,
-				HPI_CHANNEL_MODE_MODE, i, 0, &mode))
+		if (HPI_ChannelMode_QueryMode(phSubSys,  hControl, i, &wMode))
 			break;
 
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -2464,15 +2478,15 @@ static int __devinit snd_asihpi_sampleclock_add(struct snd_card_asihpi *asihpi,
 	u32 hSC =  asihpi_control->hControl;
 	int hasAesIn = 0;
 	int i, j;
-	u32 wSource;
+	u16 wSource;
 
 	snd_control.private_value = asihpi_control->hControl;
 
 	clkcache->has_local = 0;
 
 	for (i = 0; i <= HPI_SAMPLECLOCK_SOURCE_LAST; i++) {
-		if  (HPI_ControlQuery(phSubSys, hSC,
-				HPI_SAMPLECLOCK_SOURCE, i, 0, &wSource))
+		if  (HPI_SampleClock_QuerySource(phSubSys, hSC,
+				i, &wSource))
 			break;
 		clkcache->s[i].source = wSource;
 		clkcache->s[i].index = 0;
@@ -2485,9 +2499,9 @@ static int __devinit snd_asihpi_sampleclock_add(struct snd_card_asihpi *asihpi,
 	if (hasAesIn)
 		/* already will have picked up index 0 above */
 		for (j = 1; j < 8; j++) {
-			if (HPI_ControlQuery(phSubSys, hSC,
-				HPI_SAMPLECLOCK_SOURCE_INDEX, j,
-				HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT, &wSource))
+			if (HPI_SampleClock_QuerySourceIndex(phSubSys, hSC,
+				j, HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT,
+				&wSource))
 				break;
 			clkcache->s[i].source =
 				HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT;
@@ -2589,7 +2603,8 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
 			err = snd_asihpi_meter_add(asihpi, &asihpi_control);
 			break;
 		case HPI_CONTROL_SAMPLECLOCK:
-			err = snd_asihpi_sampleclock_add(asihpi, &asihpi_control);
+			err = snd_asihpi_sampleclock_add(
+						asihpi, &asihpi_control);
 			break;
 		case HPI_CONTROL_CONNECTION:	/* ignore these */
 			continue;
@@ -2744,7 +2759,7 @@ static int __devinit snd_asihpi_hpi_new(struct snd_card_asihpi *asihpi,
 /*------------------------------------------------------------
    CARD
  ------------------------------------------------------------*/
-int __devinit snd_asihpi_probe(struct pci_dev *pci_dev,
+static int __devinit snd_asihpi_probe(struct pci_dev *pci_dev,
 				       const struct pci_device_id *pci_id)
 {
 	int err;
@@ -2886,7 +2901,7 @@ static void __devexit snd_asihpi_remove(struct pci_dev *pci_dev)
 	asihpi_adapter_remove(pci_dev);
 }
 
-struct pci_device_id  asihpi_pci_tbl[] = {
+static struct pci_device_id  asihpi_pci_tbl[] = {
 	{HPI_PCI_VENDOR_ID_TI, HPI_ADAPTER_DSP6205,
 		HPI_PCI_VENDOR_ID_AUDIOSCIENCE, PCI_ANY_ID, 0, 0,
 		(kernel_ulong_t)HPI_6205},
-- 
1.5.4.3



More information about the Alsa-devel mailing list