* [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum.
@ 2008-07-08 23:10 linux
2008-07-08 23:10 ` [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration linux
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: linux @ 2008-07-08 23:10 UTC (permalink / raw)
To: patch; +Cc: Eliot Blennerhassett, alsa-devel
From: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
diff --git a/pci/asihpi/hpi.h b/pci/asihpi/hpi.h
index a58bf71..06953bc 100644
--- a/pci/asihpi/hpi.h
+++ b/pci/asihpi/hpi.h
@@ -41,12 +41,12 @@ i.e 3.05.02 is a development version
#define HPI_VERSION_CONSTRUCTOR(maj, min, rel) \
((maj << 16) + (min << 8) + rel)
-#define HPI_VER_MAJOR(v) (int)(v >> 16)
-#define HPI_VER_MINOR(v) (int)((v >> 8) & 0xFF)
-#define HPI_VER_RELEASE(v) (int)(v & 0xFF)
+#define HPI_VER_MAJOR(v) ((int)(v >> 16))
+#define HPI_VER_MINOR(v) ((int)((v >> 8) & 0xFF))
+#define HPI_VER_RELEASE(v) ((int)(v & 0xFF))
/* Use single digits for versions less that 10 to avoid octal. */
-#define HPI_VER HPI_VERSION_CONSTRUCTOR(3L, 10, 0)
+#define HPI_VER HPI_VERSION_CONSTRUCTOR(3L, 10, 1)
#ifdef _DOX_ONLY_
/*****************************************************************************/
@@ -1052,6 +1052,13 @@ Contains either 1 or 0. */
Contains either 1 or 0. */
#define HPI_PAD_TA_ACTIVE HPI_CTL_ATTR(PAD, 8)
+/** Data types for PTY string translation.
+ */
+enum eHPI_RDS_type {
+ HPI_RDS_DATATYPE_RDS = 0, /**< RDS bitstream. */
+ HPI_RDS_DATATYPE_RDBS = 1, /**< RDBS bitstream. */
+ HPI_RDS_DATATYPE_FUTURE = 2 /**< Future bitstream. */
+};
/** \} */
/** \defgroup tuner_bands Tuner bands
--
1.5.4.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration.
2008-07-08 23:10 [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum linux
@ 2008-07-08 23:10 ` linux
2008-07-08 23:10 ` [PATCH - asihpi 3/4] Subsystem message now outside adapter#0 mutex. Fixes segfault when no adapter#0 present linux
2008-07-08 23:43 ` [PATCH - asihpi 1/4] related firmware Eliot Blennerhassett
2008-07-10 16:14 ` [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum Takashi Iwai
2 siblings, 1 reply; 6+ messages in thread
From: linux @ 2008-07-08 23:10 UTC (permalink / raw)
To: patch; +Cc: Eliot Blennerhassett, alsa-devel
From: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
diff --git a/pci/asihpi/asihpi.c b/pci/asihpi/asihpi.c
index c715ad2..f9fe449 100644
--- a/pci/asihpi/asihpi.c
+++ b/pci/asihpi/asihpi.c
@@ -1304,6 +1304,7 @@ static int __devinit snd_card_asihpi_pcm_new(struct snd_card_asihpi *asihpi,
/***************************** MIXER CONTROLS ****************/
struct hpi_control {
+ u32 hControl;
u16 wControlType;
u16 wSrcNodeType;
u16 wSrcNodeIndex;
@@ -1395,11 +1396,13 @@ static char *asihpi_dst_names[] =
#error "Node 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)
{
int err;
+
err = snd_ctl_add(card, snd_ctl_new1(ctl, asihpi));
if (err < 0)
return err;
@@ -1410,10 +1413,16 @@ static inline int ctl_add(struct snd_card *card, struct snd_kcontrol_new *ctl,
}
/* Convert HPI control name and location into ALSA control name */
-static void asihpi_ctl_name(struct snd_kcontrol_new *snd_control,
+static void asihpi_ctl_init(struct snd_kcontrol_new *snd_control,
struct hpi_control *asihpi_control,
char *name)
{
+ memset(snd_control, 0, sizeof(*snd_control));
+ snd_control->name = snd_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",
asihpi_src_names[asihpi_control->wSrcNodeType],
@@ -1498,17 +1507,21 @@ static int snd_asihpi_volume_put(struct snd_kcontrol *kcontrol,
static const DECLARE_TLV_DB_SCALE(db_scale_100, -10000, 100, 0);
-static void __devinit snd_asihpi_volume_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_volume_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_volume_info;
- snd_control->get = snd_asihpi_volume_get;
- snd_control->put = snd_asihpi_volume_put;
- snd_control->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
+
+ asihpi_ctl_init(&snd_control, asihpi_control, "Volume");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
SNDRV_CTL_ELEM_ACCESS_TLV_READ;
- snd_control->tlv.p = db_scale_100;
+ snd_control.info = snd_asihpi_volume_info;
+ snd_control.get = snd_asihpi_volume_get;
+ snd_control.put = snd_asihpi_volume_put;
+ snd_control.tlv.p = db_scale_100;
- asihpi_ctl_name(snd_control, asihpi_control, "Volume");
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
@@ -1560,19 +1573,22 @@ static int snd_asihpi_level_put(struct snd_kcontrol *kcontrol,
static const DECLARE_TLV_DB_SCALE(db_scale_level, -1000, 100, 0);
-static void __devinit snd_asihpi_level_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_level_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_level_info;
- snd_control->get = snd_asihpi_level_get;
- snd_control->put = snd_asihpi_level_put;
- snd_control->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READ;
-
- snd_control->tlv.p = db_scale_level;
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
/* can't use 'volume' cos some nodes have volume as well */
- asihpi_ctl_name(snd_control, asihpi_control, "Level");
+ asihpi_ctl_init(&snd_control, asihpi_control, "Level");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READ;
+ snd_control.info = snd_asihpi_level_info;
+ snd_control.get = snd_asihpi_level_get;
+ snd_control.put = snd_asihpi_level_put;
+ snd_control.tlv.p = db_scale_level;
+
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
@@ -1646,69 +1662,93 @@ static int snd_asihpi_aesebu_format_put(struct snd_kcontrol *kcontrol,
return 1;
}
-static int snd_asihpi_aesebu_rx_source_get(struct snd_kcontrol *kcontrol,
+static int snd_asihpi_aesebu_rx_format_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) {
return snd_asihpi_aesebu_format_get(kcontrol, ucontrol,
HPI_AESEBU_Receiver_GetFormat);
}
-static int snd_asihpi_aesebu_rx_source_put(struct snd_kcontrol *kcontrol,
+static int snd_asihpi_aesebu_rx_format_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) {
return snd_asihpi_aesebu_format_put(kcontrol, ucontrol,
HPI_AESEBU_Receiver_SetFormat);
}
-static int snd_asihpi_aesebu_tx_format_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol) {
- return snd_asihpi_aesebu_format_get(kcontrol, ucontrol,
- HPI_AESEBU_Transmitter_GetFormat);
+static int snd_asihpi_aesebu_rxstatus_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 1;
+
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 0X1F;
+ uinfo->value.integer.step = 1;
+
+ return 0;
}
-static int snd_asihpi_aesebu_tx_format_put(struct snd_kcontrol *kcontrol,
+static int snd_asihpi_aesebu_rxstatus_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) {
- return snd_asihpi_aesebu_format_put(kcontrol, ucontrol,
- HPI_AESEBU_Transmitter_SetFormat);
-}
-/* AESEBU control group initializers */
+ u32 hControl = kcontrol->private_value;
+ u16 status;
-static int __devinit snd_asihpi_aesebu_rx_new(struct snd_card_asihpi *asihpi,
- struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
-{
+ HPI_AESEBU_Receiver_GetErrorStatus(phSubSys, hControl, &status);
+ ucontrol->value.integer.value[0] = status;
+ return 0;
+}
+static int __devinit snd_asihpi_aesebu_rx_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
+{
struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
-/* RX source */
-
- snd_control->info = snd_asihpi_aesebu_format_info;
- snd_control->get = snd_asihpi_aesebu_rx_source_get;
- snd_control->put = snd_asihpi_aesebu_rx_source_put;
+ asihpi_ctl_init(&snd_control, asihpi_control, "Format");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
+ snd_control.info = snd_asihpi_aesebu_format_info;
+ snd_control.get = snd_asihpi_aesebu_rx_format_get;
+ snd_control.put = snd_asihpi_aesebu_rx_format_put;
- asihpi_ctl_name(snd_control, asihpi_control, "AesRx");
- if (ctl_add(card, snd_control, asihpi) < 0)
+ if (ctl_add(card, &snd_control, asihpi) < 0)
return -EINVAL;
- return 0;
+ asihpi_ctl_init(&snd_control, asihpi_control, "Status");
+ snd_control.access =
+ SNDRV_CTL_ELEM_ACCESS_VOLATILE | SNDRV_CTL_ELEM_ACCESS_READ;
+ snd_control.info = snd_asihpi_aesebu_rxstatus_info;
+ snd_control.get = snd_asihpi_aesebu_rxstatus_get;
+
+ return ctl_add(card, &snd_control, asihpi);
}
-static int __devinit snd_asihpi_aesebu_tx_new(struct snd_card_asihpi *asihpi,
- struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int snd_asihpi_aesebu_tx_format_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol) {
+ return snd_asihpi_aesebu_format_get(kcontrol, ucontrol,
+ HPI_AESEBU_Transmitter_GetFormat);
+}
+
+static int snd_asihpi_aesebu_tx_format_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol) {
+ return snd_asihpi_aesebu_format_put(kcontrol, ucontrol,
+ HPI_AESEBU_Transmitter_SetFormat);
+}
+
+
+static int __devinit snd_asihpi_aesebu_tx_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
struct snd_card *card = asihpi->card;
-/* TX Format */
- snd_control->info = snd_asihpi_aesebu_format_info;
- snd_control->get = snd_asihpi_aesebu_tx_format_get;
- snd_control->put = snd_asihpi_aesebu_tx_format_put;
-
- asihpi_ctl_name(snd_control, asihpi_control, "Format");
+ struct snd_kcontrol_new snd_control;
- if (ctl_add(card, snd_control, asihpi) < 0)
- return -EINVAL;
+ asihpi_ctl_init(&snd_control, asihpi_control, "Format");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
+ snd_control.info = snd_asihpi_aesebu_format_info;
+ snd_control.get = snd_asihpi_aesebu_tx_format_get;
+ snd_control.put = snd_asihpi_aesebu_tx_format_put;
- return 0;
+ return ctl_add(card, &snd_control, asihpi);
}
/*------------------------------------------------------------
@@ -1930,48 +1970,39 @@ static int snd_asihpi_tuner_freq_put(struct snd_kcontrol *kcontrol,
}
/* Tuner control group initializer */
-static int __devinit snd_asihpi_tuner_new(struct snd_card_asihpi *asihpi,
- struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_tuner_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
struct snd_card *card = asihpi->card;
- u32 hControl = snd_control->private_value;
-
-/* Gain ctl */
+ struct snd_kcontrol_new snd_control;
- if (HPI_Tuner_GetGain(phSubSys, hControl, NULL) == 0) {
- snd_control->info = snd_asihpi_tuner_gain_info;
- snd_control->get = snd_asihpi_tuner_gain_get;
- snd_control->put = snd_asihpi_tuner_gain_put;
+ snd_control.private_value = asihpi_control->hControl;
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
- asihpi_ctl_name(snd_control, asihpi_control, "Gain");
+ if (HPI_Tuner_GetGain(phSubSys, asihpi_control->hControl, NULL) == 0) {
+ asihpi_ctl_init(&snd_control, asihpi_control, "Gain");
+ snd_control.info = snd_asihpi_tuner_gain_info;
+ snd_control.get = snd_asihpi_tuner_gain_get;
+ snd_control.put = snd_asihpi_tuner_gain_put;
- if (ctl_add(card, snd_control, asihpi) < 0)
+ if (ctl_add(card, &snd_control, asihpi) < 0)
return -EINVAL;
}
-/* Band ctl */
-
- snd_control->info = snd_asihpi_tuner_band_info;
- snd_control->get = snd_asihpi_tuner_band_get;
- snd_control->put = snd_asihpi_tuner_band_put;
- asihpi_ctl_name(snd_control, asihpi_control, "Band");
+ asihpi_ctl_init(&snd_control, asihpi_control, "Band");
+ snd_control.info = snd_asihpi_tuner_band_info;
+ snd_control.get = snd_asihpi_tuner_band_get;
+ snd_control.put = snd_asihpi_tuner_band_put;
- if (ctl_add(card, snd_control, asihpi) < 0)
+ if (ctl_add(card, &snd_control, asihpi) < 0)
return -EINVAL;
-/* Freq ctl */
+ asihpi_ctl_init(&snd_control, asihpi_control, "Freq");
+ snd_control.info = snd_asihpi_tuner_freq_info;
+ snd_control.get = snd_asihpi_tuner_freq_get;
+ snd_control.put = snd_asihpi_tuner_freq_put;
- snd_control->info = snd_asihpi_tuner_freq_info;
- snd_control->get = snd_asihpi_tuner_freq_get;
- snd_control->put = snd_asihpi_tuner_freq_put;
-
- asihpi_ctl_name(snd_control, asihpi_control, "Freq");
-
- if (ctl_add(card, snd_control, asihpi) < 0)
- return -EINVAL;
-
- return 0;
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
@@ -2075,16 +2106,19 @@ static int snd_asihpi_meter_get(struct snd_kcontrol *kcontrol,
return 0;
}
-static void __devinit snd_asihpi_meter_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_meter_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_meter_info;
- snd_control->get = snd_asihpi_meter_get;
- snd_control->put = NULL;
- snd_control->access =
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
+
+ asihpi_ctl_init(&snd_control, asihpi_control, "Meter");
+ snd_control.access =
SNDRV_CTL_ELEM_ACCESS_VOLATILE | SNDRV_CTL_ELEM_ACCESS_READ;
+ snd_control.info = snd_asihpi_meter_info;
+ snd_control.get = snd_asihpi_meter_get;
- asihpi_ctl_name(snd_control, asihpi_control, "Meter");
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
@@ -2177,18 +2211,24 @@ static int snd_asihpi_mux_put(struct snd_kcontrol *kcontrol,
}
-static void __devinit snd_asihpi_mux_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_mux_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_mux_info;
- snd_control->get = snd_asihpi_mux_get;
- snd_control->put = snd_asihpi_mux_put;
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
#if ASI_STYLE_NAMES
- asihpi_ctl_name(snd_control, asihpi_control, "Multiplexer");
+ asihpi_ctl_init(&snd_control, asihpi_control, "Multiplexer");
#else
- asihpi_ctl_name(snd_control, asihpi_control, "Route");
+ asihpi_ctl_init(&snd_control, asihpi_control, "Route");
#endif
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
+ snd_control.info = snd_asihpi_mux_info;
+ snd_control.get = snd_asihpi_mux_get;
+ snd_control.put = snd_asihpi_mux_put;
+
+ return (ctl_add(card, &snd_control, asihpi));
+
}
/*------------------------------------------------------------
@@ -2197,19 +2237,32 @@ static void __devinit snd_asihpi_mux_new(struct hpi_control *asihpi_control,
static int snd_asihpi_cmode_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
- static char *texts[HPI_CHANNEL_MODE_LAST] = {
+ static char *mode_names[HPI_CHANNEL_MODE_LAST] = {
"Normal", "Swap", "FromLeft", "FromRight", "ToLeft", "ToRight"
};
+ u32 hControl = kcontrol->private_value;
+ u32 mode;
+ 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))
+ break;
+
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
uinfo->count = 1;
- uinfo->value.enumerated.items = 6;
+ uinfo->value.enumerated.items = i;
- if (uinfo->value.enumerated.item > 5)
- uinfo->value.enumerated.item = 5;
+ if (uinfo->value.enumerated.item >= i)
+ uinfo->value.enumerated.item = i - 1;
strcpy(uinfo->value.enumerated.name,
- texts[uinfo->value.enumerated.item]);
+ mode_names[uinfo->value.enumerated.item]);
+
return 0;
}
@@ -2241,14 +2294,19 @@ static int snd_asihpi_cmode_put(struct snd_kcontrol *kcontrol,
}
-static void __devinit snd_asihpi_cmode_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_cmode_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_cmode_info;
- snd_control->get = snd_asihpi_cmode_get;
- snd_control->put = snd_asihpi_cmode_put;
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
+
+ asihpi_ctl_init(&snd_control, asihpi_control, "Channel Mode");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
+ snd_control.info = snd_asihpi_cmode_info;
+ snd_control.get = snd_asihpi_cmode_get;
+ snd_control.put = snd_asihpi_cmode_put;
- asihpi_ctl_name(snd_control, asihpi_control, "Channel Mode");
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
@@ -2331,52 +2389,6 @@ static int snd_asihpi_clksrc_put(struct snd_kcontrol *kcontrol,
return change;
}
-static void __devinit snd_asihpi_clksrc_new(struct snd_card_asihpi *asihpi,
- struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
-{
- struct clk_cache *clkcache = &asihpi->cc;
- u32 hSC = snd_control->private_value;
- int hasAesIn = 0;
- int i, j;
- u32 wSource;
-
- snd_control->info = snd_asihpi_clksrc_info;
- snd_control->get = snd_asihpi_clksrc_get;
- snd_control->put = snd_asihpi_clksrc_put;
- asihpi_ctl_name(snd_control, asihpi_control, "Source");
-
- clkcache->has_local = 0;
-
- for (i = 0; i <= HPI_SAMPLECLOCK_SOURCE_LAST; i++) {
- if (HPI_ControlQuery(phSubSys, hSC,
- HPI_SAMPLECLOCK_SOURCE, i, 0, &wSource))
- break;
- clkcache->s[i].source = wSource;
- clkcache->s[i].index = 0;
- clkcache->s[i].name = sampleclock_sources[wSource];
- if (wSource == HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT)
- hasAesIn = 1;
- if (wSource == HPI_SAMPLECLOCK_SOURCE_LOCAL)
- clkcache->has_local = 1;
- }
- 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))
- break;
- clkcache->s[i].source =
- HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT;
- clkcache->s[i].index = j;
- clkcache->s[i].name = sampleclock_sources[
- j+HPI_SAMPLECLOCK_SOURCE_LAST];
- i++;
- }
- clkcache->count = i;
-}
-
/*------------------------------------------------------------
Clkrate controls
------------------------------------------------------------*/
@@ -2419,19 +2431,6 @@ static int snd_asihpi_clklocal_put(struct snd_kcontrol *kcontrol,
return change;
}
-static void __devinit snd_asihpi_clklocal_new(
- struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
-{
- snd_control->info = snd_asihpi_clklocal_info;
- snd_control->get = snd_asihpi_clklocal_get;
- snd_control->put = snd_asihpi_clklocal_put;
- snd_control->access = SNDRV_CTL_ELEM_ACCESS_READWRITE ;
-
-
- asihpi_ctl_name(snd_control, asihpi_control, "LocalRate");
-}
-
static int snd_asihpi_clkrate_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
@@ -2455,15 +2454,78 @@ static int snd_asihpi_clkrate_get(struct snd_kcontrol *kcontrol,
return 0;
}
-static void __devinit snd_asihpi_clkrate_new(struct hpi_control *asihpi_control,
- struct snd_kcontrol_new *snd_control)
+static int __devinit snd_asihpi_sampleclock_add(struct snd_card_asihpi *asihpi,
+ struct hpi_control *asihpi_control)
{
- snd_control->info = snd_asihpi_clkrate_info;
- snd_control->get = snd_asihpi_clkrate_get;
- snd_control->access =
+ struct snd_card *card = asihpi->card;
+ struct snd_kcontrol_new snd_control;
+
+ struct clk_cache *clkcache = &asihpi->cc;
+ u32 hSC = asihpi_control->hControl;
+ int hasAesIn = 0;
+ int i, j;
+ u32 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))
+ break;
+ clkcache->s[i].source = wSource;
+ clkcache->s[i].index = 0;
+ clkcache->s[i].name = sampleclock_sources[wSource];
+ if (wSource == HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT)
+ hasAesIn = 1;
+ if (wSource == HPI_SAMPLECLOCK_SOURCE_LOCAL)
+ clkcache->has_local = 1;
+ }
+ 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))
+ break;
+ clkcache->s[i].source =
+ HPI_SAMPLECLOCK_SOURCE_AESEBU_INPUT;
+ clkcache->s[i].index = j;
+ clkcache->s[i].name = sampleclock_sources[
+ j+HPI_SAMPLECLOCK_SOURCE_LAST];
+ i++;
+ }
+ clkcache->count = i;
+
+ asihpi_ctl_init(&snd_control, asihpi_control, "Source");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE ;
+ snd_control.info = snd_asihpi_clksrc_info;
+ snd_control.get = snd_asihpi_clksrc_get;
+ snd_control.put = snd_asihpi_clksrc_put;
+ if (ctl_add(card, &snd_control, asihpi) < 0)
+ return -EINVAL;
+
+
+ if (clkcache->has_local) {
+ asihpi_ctl_init(&snd_control, asihpi_control, "LocalRate");
+ snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE ;
+ snd_control.info = snd_asihpi_clklocal_info;
+ snd_control.get = snd_asihpi_clklocal_get;
+ snd_control.put = snd_asihpi_clklocal_put;
+
+
+ if (ctl_add(card, &snd_control, asihpi) < 0)
+ return -EINVAL;
+ }
+
+ asihpi_ctl_init(&snd_control, asihpi_control, "Rate");
+ snd_control.access =
SNDRV_CTL_ELEM_ACCESS_VOLATILE | SNDRV_CTL_ELEM_ACCESS_READ;
+ snd_control.info = snd_asihpi_clkrate_info;
+ snd_control.get = snd_asihpi_clkrate_get;
- asihpi_ctl_name(snd_control, asihpi_control, "Rate");
+ return (ctl_add(card, &snd_control, asihpi));
}
/*------------------------------------------------------------
Mixer
@@ -2474,9 +2536,6 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
struct snd_card *card = asihpi->card;
unsigned int idx = 0;
int err;
- u32 hControl;
- struct snd_kcontrol_new snd_control;
- char snd_control_name[44]; /*asound.h:745 unsigned char name[44]; */
struct hpi_control asihpi_control;
snd_assert(asihpi != NULL, return -EINVAL);
@@ -2489,10 +2548,6 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
if (err)
return -err;
- memset(&snd_control, 0, sizeof(snd_control));
- snd_control.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
- snd_control.name = snd_control_name;
-
for (idx = 0; idx < 2000; idx++) {
err = HPI_MixerGetControlByIndex(phSubSys, asihpi->hMixer,
idx,
@@ -2501,7 +2556,7 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
&asihpi_control.wDstNodeType,
&asihpi_control.wDstNodeIndex,
&asihpi_control.wControlType,
- &hControl);
+ &asihpi_control.hControl);
if (err) {
if (err == HPI_ERROR_CONTROL_DISABLED) {
if (mixer_dump)
@@ -2516,64 +2571,37 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
asihpi_control.wSrcNodeType -= HPI_SOURCENODE_BASE;
asihpi_control.wDstNodeType -= HPI_DESTNODE_BASE;
- snd_control.index = 0;
- snd_control.private_value = hControl;
- snd_control.access = SNDRV_CTL_ELEM_ACCESS_READWRITE ;
+
switch (asihpi_control.wControlType) {
case HPI_CONTROL_VOLUME:
- snd_asihpi_volume_new(&asihpi_control,
- &snd_control);
+ err = snd_asihpi_volume_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_LEVEL:
- snd_asihpi_level_new(&asihpi_control,
- &snd_control);
+ err = snd_asihpi_level_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_MULTIPLEXER:
- snd_asihpi_mux_new(&asihpi_control, &snd_control);
+ err = snd_asihpi_mux_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_CHANNEL_MODE:
- snd_asihpi_cmode_new(&asihpi_control,
- &snd_control);
+ err = snd_asihpi_cmode_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_METER:
- snd_asihpi_meter_new(&asihpi_control,
- &snd_control);
+ err = snd_asihpi_meter_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_SAMPLECLOCK:
- snd_asihpi_clksrc_new(asihpi, &asihpi_control,
- &snd_control);
- err = snd_ctl_add(card,
- snd_ctl_new1(&snd_control, asihpi));
- if (err < 0)
- return err;
- snd_asihpi_clkrate_new(&asihpi_control,
- &snd_control);
- err = snd_ctl_add(card,
- snd_ctl_new1(&snd_control, asihpi));
- if (err < 0)
- return err;
- if (asihpi->cc.has_local)
- snd_asihpi_clklocal_new(&asihpi_control,
- &snd_control);
-
+ err = snd_asihpi_sampleclock_add(asihpi, &asihpi_control);
break;
case HPI_CONTROL_CONNECTION: /* ignore these */
continue;
case HPI_CONTROL_TUNER:
- if (snd_asihpi_tuner_new(asihpi, &asihpi_control,
- &snd_control) < 0)
- return -EINVAL;
- continue;
+ err = snd_asihpi_tuner_add(asihpi, &asihpi_control);
+ break;
case HPI_CONTROL_AESEBU_TRANSMITTER:
- if (snd_asihpi_aesebu_tx_new(asihpi, &asihpi_control,
- &snd_control) < 0)
- return -EINVAL;
- continue;
+ err = snd_asihpi_aesebu_tx_add(asihpi, &asihpi_control);
+ break;
case HPI_CONTROL_AESEBU_RECEIVER:
- if (snd_asihpi_aesebu_rx_new(asihpi, &asihpi_control,
- &snd_control) < 0)
- return -EINVAL;
- continue;
+ err = snd_asihpi_aesebu_rx_add(asihpi, &asihpi_control);
+ break;
case HPI_CONTROL_VOX:
case HPI_CONTROL_BITSTREAM:
case HPI_CONTROL_MICROPHONE:
@@ -2592,12 +2620,8 @@ static int __devinit snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
asihpi_control.wDstNodeIndex);
continue;
};
- err = snd_ctl_add(card, snd_ctl_new1(&snd_control, asihpi));
if (err < 0)
return err;
- else if (mixer_dump)
- snd_printk(KERN_INFO "Added %s(%d)\n",
- snd_control.name, snd_control.index);
}
if (HPI_ERROR_INVALID_OBJ_INDEX != err)
HPI_HandleError(err);
--
1.5.4.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH - asihpi 3/4] Subsystem message now outside adapter#0 mutex. Fixes segfault when no adapter#0 present.
2008-07-08 23:10 ` [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration linux
@ 2008-07-08 23:10 ` linux
2008-07-08 23:10 ` [PATCH - asihpi 4/4] HPI v3.10.03. Formatting tweaks linux
0 siblings, 1 reply; 6+ messages in thread
From: linux @ 2008-07-08 23:10 UTC (permalink / raw)
To: patch; +Cc: Eliot Blennerhassett, alsa-devel
From: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
diff --git a/pci/asihpi/hpioctl.c b/pci/asihpi/hpioctl.c
index 5192db3..a13748d 100644
--- a/pci/asihpi/hpioctl.c
+++ b/pci/asihpi/hpioctl.c
@@ -106,20 +106,11 @@ int asihpi_hpi_release(
return 0;
}
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 11)
long asihpi_hpi_ioctl(
struct file *file,
unsigned int cmd,
unsigned long arg
)
-#else
-int asihpi_hpi_ioctl(
- struct inode *inode,
- struct file *file,
- unsigned int cmd,
- unsigned long arg
-)
-#endif
{
struct hpi_ioctl_linux __user *phpi_ioctl_data;
void __user *phm;
@@ -127,7 +118,7 @@ int asihpi_hpi_ioctl(
struct hpi_message hm;
struct hpi_response hr;
u32 uncopied_bytes;
- struct hpi_adapter *pa;
+ struct hpi_adapter *pa = NULL;
if (cmd != HPI_IOCTL_LINUX)
return -EINVAL;
@@ -145,27 +136,29 @@ int asihpi_hpi_ioctl(
return -EFAULT;
pa = &adapters[hm.wAdapterIndex];
-
- if ((hm.wAdapterIndex > HPI_MAX_ADAPTERS) || (!pa->type)) {
- HPI_InitResponse(&hr, HPI_OBJ_ADAPTER, HPI_ADAPTER_OPEN,
- HPI_ERROR_BAD_ADAPTER_NUMBER);
-
- uncopied_bytes = copy_to_user(phr, &hr, sizeof(hr));
- if (uncopied_bytes)
- return -EFAULT;
- return 0;
- }
-
hr.wSize = 0;
- /* Response filled either copy from cache, or by HPI_Message() */
- {
- /* Dig out any pointers embedded in the message. */
+ if (hm.wObject == HPI_OBJ_SUBSYSTEM) {
+ HPI_MessageF(&hm, &hr, file);
+ } else {
u16 __user *ptr = NULL;
u32 size = 0;
/* -1=no data 0=read from user mem, 1=write to user mem */
int wrflag = -1;
u32 nAdapter = hm.wAdapterIndex;
+
+ if ((hm.wAdapterIndex > HPI_MAX_ADAPTERS) || (!pa->type)) {
+ HPI_InitResponse(&hr, HPI_OBJ_ADAPTER,
+ HPI_ADAPTER_OPEN,
+ HPI_ERROR_BAD_ADAPTER_NUMBER);
+
+ uncopied_bytes = copy_to_user(phr, &hr, sizeof(hr));
+ if (uncopied_bytes)
+ return -EFAULT;
+ return 0;
+ }
+
+ /* Dig out any pointers embedded in the message. */
switch (hm.wFunction) {
case HPI_SUBSYS_CREATE_ADAPTER:
case HPI_SUBSYS_DELETE_ADAPTER:
--
1.5.4.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH - asihpi 4/4] HPI v3.10.03. Formatting tweaks.
2008-07-08 23:10 ` [PATCH - asihpi 3/4] Subsystem message now outside adapter#0 mutex. Fixes segfault when no adapter#0 present linux
@ 2008-07-08 23:10 ` linux
0 siblings, 0 replies; 6+ messages in thread
From: linux @ 2008-07-08 23:10 UTC (permalink / raw)
To: patch; +Cc: Eliot Blennerhassett, alsa-devel
From: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
diff --git a/pci/asihpi/hpi.h b/pci/asihpi/hpi.h
index 06953bc..4f52d09 100644
--- a/pci/asihpi/hpi.h
+++ b/pci/asihpi/hpi.h
@@ -46,7 +46,7 @@ i.e 3.05.02 is a development version
#define HPI_VER_RELEASE(v) ((int)(v & 0xFF))
/* Use single digits for versions less that 10 to avoid octal. */
-#define HPI_VER HPI_VERSION_CONSTRUCTOR(3L, 10, 1)
+#define HPI_VER HPI_VERSION_CONSTRUCTOR(3L, 10, 3)
#ifdef _DOX_ONLY_
/*****************************************************************************/
diff --git a/pci/asihpi/hpicmn.c b/pci/asihpi/hpicmn.c
index af83a2e..4594a26 100644
--- a/pci/asihpi/hpicmn.c
+++ b/pci/asihpi/hpicmn.c
@@ -283,8 +283,8 @@ short HpiCheckBufferMapping(
}
/** CheckControlCache checks the cache and fills the struct hpi_response
-* accordingly. It returns one if a cache hit occurred, zero otherwise.
-*/
+ * accordingly. It returns one if a cache hit occurred, zero otherwise.
+ */
short HpiCheckControlCache(
struct hpi_control_cache *pCache,
struct hpi_message *phm,
@@ -304,8 +304,8 @@ short HpiCheckControlCache(
sizeof(struct hpi_control_res);
phr->wError = 0;
- /* pC is the default cached control strucure. May be cast to
- something else in the following switch statement.
+ /* pC is the default cached control strucure.
+ May be cast to something else in the following switch statement.
*/
pC = (struct hpi_control_cache_single *)pI;
diff --git a/pci/asihpi/hpifunc.c b/pci/asihpi/hpifunc.c
index 6c33a80..89e8143 100644
--- a/pci/asihpi/hpifunc.c
+++ b/pci/asihpi/hpifunc.c
@@ -1696,7 +1696,6 @@ u16 HPI_ControlParamGet(
HPI_ControlExParamGet(s, h, a, 0, 0, p1, NULL)
#define HPI_ControlExParam2Get(s, h, a, p1, p2) \
HPI_ControlExParamGet(s, h, a, 0, 0, p1, p2)
-
u16 HPI_ControlQuery(
const struct hpi_hsubsys *phSubSys,
const u32 hControl,
@@ -3180,18 +3179,6 @@ u16 HPI_Tuner_GetRDS(
return (hr.wError);
}
-#ifdef _DOX_ONLY_
-u16 HPI_Tuner_GetHdRadioSignalQuality(
- struct hpi_hsubsys *phSubSys,
- u32 hControl,
- u32 *pdwSignalQuality
-)
-{
- return HPI_ControlParamGet(phSubSys, hControl,
- HPI_TUNER_HDRADIO_SIGNAL_QUALITY, 0, 0, pdwSignalQuality, 0);
-}
-#endif
-
u16 HPI_PAD_GetChannelName(
struct hpi_hsubsys *phSubSys,
u32 hControl,
--
1.5.4.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH - asihpi 1/4] related firmware
2008-07-08 23:10 [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum linux
2008-07-08 23:10 ` [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration linux
@ 2008-07-08 23:43 ` Eliot Blennerhassett
2008-07-10 16:14 ` [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum Takashi Iwai
2 siblings, 0 replies; 6+ messages in thread
From: Eliot Blennerhassett @ 2008-07-08 23:43 UTC (permalink / raw)
To: ALSA devel, patch; +Cc: Takashi Iwai
The dsp firmware that matches this patchset is available here
http://audioscience.com/internet/download/firmware/dspbins31003.zip
Changelog:
dsp5000.bin ASI5041 fix input gain.
dsp8900.bin ASI89xx fix tuning failures
*.bin Update version to 3.10.03
Signed-off-by Eliot Blennerhassett <eblennerhassett@audioscience.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum.
2008-07-08 23:10 [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum linux
2008-07-08 23:10 ` [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration linux
2008-07-08 23:43 ` [PATCH - asihpi 1/4] related firmware Eliot Blennerhassett
@ 2008-07-10 16:14 ` Takashi Iwai
2 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2008-07-10 16:14 UTC (permalink / raw)
To: linux; +Cc: Eliot Blennerhassett, alsa-devel
At Wed, 09 Jul 2008 11:10:38 +1200,
linux@audioscience.com wrote:
>
> From: Eliot Blennerhassett <eblennerhassett@audioscience.com>
>
>
> Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Thanks, applied all patches and firmware.
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-10 10:14 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-08 23:10 [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum linux
2008-07-08 23:10 ` [PATCH - asihpi 2/4] Regularise control creation. Add readonly AESEBU status control. Fix ChannelMode enumeration linux
2008-07-08 23:10 ` [PATCH - asihpi 3/4] Subsystem message now outside adapter#0 mutex. Fixes segfault when no adapter#0 present linux
2008-07-08 23:10 ` [PATCH - asihpi 4/4] HPI v3.10.03. Formatting tweaks linux
2008-07-08 23:43 ` [PATCH - asihpi 1/4] related firmware Eliot Blennerhassett
2008-07-10 16:14 ` [PATCH - asihpi 1/4] V3.10.1. Add hpi_RDS enum Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.