From: linux@audioscience.com
To: tiwai@suse.de
Cc: Eliot Blennerhassett <eblennerhassett@audioscience.com>,
alsa-devel@alsa-project.org
Subject: [PATCH - ASIHPI 6/8] Version 3.10.00. Add new functions for HD radio tuner, and for firmware debug.
Date: Thu, 05 Jun 2008 16:06:59 +1200 [thread overview]
Message-ID: <1212638821-2779-6-git-send-email-linux@audioscience.com> (raw)
In-Reply-To: <1212638821-2779-5-git-send-email-linux@audioscience.com>
From: Eliot Blennerhassett <linux@audioscience.com>
Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
diff --git a/pci/asihpi/hpi.h b/pci/asihpi/hpi.h
index 1656941..a58bf71 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) (v >> 16)
-#define HPI_VER_MINOR(v) ((v >> 8) & 0xFF)
-#define HPI_VER_RELEASE(v) (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, 9, 15)
+#define HPI_VER HPI_VERSION_CONSTRUCTOR(3L, 10, 0)
#ifdef _DOX_ONLY_
/*****************************************************************************/
@@ -191,6 +191,8 @@ extern "C" {
#define HPI_ADAPTER_ASI1722 0x1722
/** ASI1731 - Quad TV tuner module */
#define HPI_ADAPTER_ASI1731 0x1731
+/** ASI1741 - Quad HDRadio "pseudo" module */
+#define HPI_ADAPTER_ASI1741 0x1741
/*ASI2214 - USB 2.0 1xanalog in, 4 x analog out, 1 x AES in/out */
/*#define HPI_ADAPTER_ASI2214 0x2214 */
@@ -408,6 +410,8 @@ OBSOLETE - OEM 4 play PCM, MPEG*/
#define HPI_ADAPTER_ASI8801 0x8801
#define HPI_ADAPTER_FAMILY_ASI8900 0x8900
+/** 4 channel AM/FM HD-Radio */
+#define HPI_ADAPTER_ASI8914 0x8914
/** OEM FM+RDS, 2 module tuner card */
#define HPI_ADAPTER_ASI8920 0x8920
/** 2 module tuner card */
@@ -471,7 +475,6 @@ The following table shows what combinations of mode and bitrate are possible:
<td><p><b>Mono<br>Stereo @ 16,<br>22.050 and<br>24kHz*</b></p>
<td><p><b>Mono<br>Stereo @ 32,<br>44.1 and<br>48kHz</b></p>
-<tr><td>8<td>X<td>X<td>_
<tr><td>16<td>X<td>X<td>_
<tr><td>24<td>X<td>X<td>_
<tr><td>32<td>X<td>X<td>X
@@ -622,9 +625,10 @@ Audio samples from the device are sent out on the Cobranet network.*/
#define HPI_CONTROL_COBRANET 21 /**< Cobranet control. */
#define HPI_CONTROL_TONEDETECTOR 22 /**< Tone detector control. */
#define HPI_CONTROL_SILENCEDETECTOR 23 /**< Silence detector control. */
+#define HPI_CONTROL_PAD 24 /**< Tuner PAD control. */
/*! Update this if you add a new control type. , AND hpidebug.h */
-#define HPI_CONTROL_LAST_INDEX 23
+#define HPI_CONTROL_LAST_INDEX 24
/* WARNING types 32 or greater impact bit packing in all AX4 DSP code */
/* WARNING types 256 or greater impact bit packing in all AX6 DSP code */
@@ -884,6 +888,9 @@ enum HPI_MIXER_STORE_COMMAND {
/* This allows for 255 control types, 256 unique attributes each */
#define HPI_CTL_ATTR(ctl, ai) (HPI_CONTROL_##ctl * 0x100 + ai)
+/* Get the sub-index of the attribute for a control type */
+#define HPI_CTL_ATTR_INDEX(i) (i&0xff)
+
/* Original 0-based non-unique attributes, might become unique later */
#define HPI_CTL_ATTR0(ctl, ai) (ai)
@@ -1009,6 +1016,42 @@ enum HPI_MIXER_STORE_COMMAND {
#define HPI_TUNER_RDS HPI_CTL_ATTR0(TUNER, 9)
/** Audio pre-emphasis. */
#define HPI_TUNER_DEEMPHASIS HPI_CTL_ATTR(TUNER, 10)
+/** HD-Radio tuner program control. */
+#define HPI_TUNER_PROGRAM HPI_CTL_ATTR(TUNER, 11)
+/** HD-Radio tuner digital signal quality. */
+#define HPI_TUNER_HDRADIO_SIGNAL_QUALITY HPI_CTL_ATTR(TUNER, 12)
+/** HD-Radio SDK firmware version. */
+#define HPI_TUNER_HDRADIO_SDK_VERSION HPI_CTL_ATTR(TUNER, 13)
+/** HD-Radio DSP firmware version. */
+#define HPI_TUNER_HDRADIO_DSP_VERSION HPI_CTL_ATTR(TUNER, 14)
+/** \} */
+
+/** \defgroup pads_attrs Tuner PADs control attributes
+\{
+*/
+/** The text string containing the station/channel combination. */
+#define HPI_PAD_CHANNEL_NAME HPI_CTL_ATTR(PAD, 1)
+#define HPI_PAD_CHANNEL_NAME_LEN 16
+/** The text string containing the artist. */
+#define HPI_PAD_ARTIST HPI_CTL_ATTR(PAD, 2)
+#define HPI_PAD_ARTIST_LEN 64
+/** The text string containing the title. */
+#define HPI_PAD_TITLE HPI_CTL_ATTR(PAD, 3)
+#define HPI_PAD_TITLE_LEN 64
+/** The text string containing the comment. */
+#define HPI_PAD_COMMENT HPI_CTL_ATTR(PAD, 4)
+#define HPI_PAD_COMMENT_LEN 256
+/** The integer containing the PTY code. */
+#define HPI_PAD_PROGRAM_TYPE HPI_CTL_ATTR(PAD, 5)
+/** The integer containing the program identification. */
+#define HPI_PAD_PROGRAM_ID HPI_CTL_ATTR(PAD, 6)
+/** The integer containing whether traffic information is supported.
+Contains either 1 or 0. */
+#define HPI_PAD_TA_SUPPORT HPI_CTL_ATTR(PAD, 7)
+/** The integer containing whether traffic announcement is in progress.
+Contains either 1 or 0. */
+#define HPI_PAD_TA_ACTIVE HPI_CTL_ATTR(PAD, 8)
+
/** \} */
/** \defgroup tuner_bands Tuner bands
@@ -1040,13 +1083,21 @@ Used for HPI_Tuner_SetBand(),HPI_Tuner_GetBand()
#define HPI_TUNER_LEVEL_AVERAGE 0
#define HPI_TUNER_LEVEL_RAW 1
-/** Tuner video status */
+/** \defgroup tuner_status Tuner status fields
+
+These bitfield values are returned by a call to HPI_Tuner_GetStatus().
+Multiple fields are returned from a single call.
+\{
+*/
#define HPI_TUNER_VIDEO_COLOR_PRESENT 0x0001 /**< Video color is present. */
#define HPI_TUNER_VIDEO_IS_60HZ 0x0020 /**< 60 Hz video detected. */
#define HPI_TUNER_VIDEO_HORZ_SYNC_MISSING 0x0040 /**< Video HSYNC is missing. */
#define HPI_TUNER_VIDEO_STATUS_VALID 0x0100 /**< Video status is valid. */
#define HPI_TUNER_PLL_LOCKED 0x1000 /**< The tuner's PLL is locked. */
#define HPI_TUNER_FM_STEREO 0x2000 /**< Tuner reports back FM stereo. */
+#define HPI_TUNER_DIGITAL 0x0200 /**< Tuner reports digital programming. */
+#define HPI_TUNER_MULITPROGRAM 0x0400 /**< Tuner reports multiple programs. */
+/** \} */
/** \} */
/* VOX control attributes */
@@ -1224,8 +1275,8 @@ enum HPI_FILTER_TYPE {
#define HPI_ETHERNET_UDP_PORT (44600) /*!< UDP messaging port */
-/** Base network time out is set to 2 seconds. */
-#define HPI_ETHERNET_TIMEOUT_MS (2000)
+/** Base network time out is set to 100 milli-seconds. */
+#define HPI_ETHERNET_TIMEOUT_MS (100)
/** \defgroup tonedet_attr Tonedetector attributes
\{
@@ -1705,6 +1756,14 @@ u16 HPI_AdapterSelfTest(
u16 wAdapterIndex
);
+u16 HPI_AdapterDebugRead(
+ struct hpi_hsubsys *phSubSys,
+ u16 wAdapterIndex,
+ u32 dwDspAddress,
+ char *pBytes,
+ int *dwCountBytes
+);
+
u16 HPI_AdapterSetProperty(
struct hpi_hsubsys *phSubSys,
u16 wAdapterIndex,
@@ -2363,6 +2422,87 @@ u16 HPI_Tuner_GetDeemphasis(
u32 hControl,
u32 *pdwDeemphasis
);
+u16 HPI_Tuner_SetProgram(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 dwProgram
+);
+u16 HPI_Tuner_GetProgram(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwProgram
+);
+u16 HPI_Tuner_GetHdRadioDspVersion(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszDspVersion,
+ const u32 dwStringSize
+);
+u16 HPI_Tuner_GetHdRadioSdkVersion(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszSdkVersion,
+ const u32 dwStringSize
+);
+
+u16 HPI_Tuner_GetHdRadioSignalQuality(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwQuality
+);
+
+/****************************/
+/* PADs control */
+/****************************/
+
+u16 HPI_PAD_GetChannelName(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszData,
+ const u32 dwDataLength
+);
+
+u16 HPI_PAD_GetArtist(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszData,
+ const u32 dwDataLength
+);
+
+u16 HPI_PAD_GetTitle(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszData,
+ const u32 dwDataLength
+);
+
+u16 HPI_PAD_GetComment(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszData,
+ const u32 dwDataLength
+);
+
+u16 HPI_PAD_GetProgramType(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwPTY
+);
+
+u16 HPI_PAD_GetRdsPI(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwPI
+);
+
+u16 HPI_PAD_GetProgramTypeString(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ const u32 dwDataType,
+ const u32 nPTY,
+ char *pszData,
+ const u32 dwDataLength
+);
/****************************/
/* AES/EBU Receiver control */
@@ -2987,7 +3127,8 @@ u16 HPI_FormatCreate(
#define HPI_ADAPTER_GET_PROPERTY HPI_MAKE_INDEX(HPI_OBJ_ADAPTER, 15)
#define HPI_ADAPTER_ENUM_PROPERTY HPI_MAKE_INDEX(HPI_OBJ_ADAPTER, 16)
#define HPI_ADAPTER_MODULE_INFO HPI_MAKE_INDEX(HPI_OBJ_ADAPTER, 17)
-#define HPI_ADAPTER_FUNCTION_COUNT 17
+#define HPI_ADAPTER_DEBUG_READ HPI_MAKE_INDEX(HPI_OBJ_ADAPTER, 18)
+#define HPI_ADAPTER_FUNCTION_COUNT 18
/* OUTPUT STREAM */
#define HPI_OSTREAM_OPEN HPI_MAKE_INDEX(HPI_OBJ_OSTREAM, 1)
#define HPI_OSTREAM_CLOSE HPI_MAKE_INDEX(HPI_OBJ_OSTREAM, 2)
@@ -3135,7 +3276,7 @@ struct hpi_msg_format {
};
/** Buffer+format structure.
- Must be kept 7 * 32 bits to match public struct hpi_data HPI_DATAstruct */
+ Must be kept 7 * 32 bits to match public struct hpi_datastruct */
struct hpi_msg_data {
struct hpi_msg_format Format;
u8 *pbData;
@@ -3145,7 +3286,7 @@ struct hpi_msg_data {
u32 dwDataSize;
};
-/** struct hpi_data HPI_DATAstructure used up to 3.04 driver */
+/** struct hpi_datastructure used up to 3.04 driver */
struct hpi_data_legacy32 {
struct hpi_format Format;
u32 pbData;
@@ -3153,7 +3294,7 @@ struct hpi_data_legacy32 {
};
#ifdef HPI64BIT
-/* Compatibility version of struct hpi_data HPI_DATA*/
+/* Compatibility version of struct hpi_data*/
struct hpi_data_compat32 {
struct hpi_msg_format Format;
u32 pbData;
@@ -3218,6 +3359,10 @@ union hpi_adapterx_msg {
struct {
u16 index;
} module_info;
+ struct {
+ u32 dwDspAddress;
+ u32 dwCountBytes;
+ } debug_read;
};
struct hpi_adapter_res {
@@ -3334,7 +3479,7 @@ union hpi_mixerx_msg {
union hpi_mixerx_res {
struct {
- u32 dwBytesReturned; /* number of items returned */
+ u32 dwBytesReturned; /* size of items returned */
u32 pData; /* pointer to data array */
u16 wMoreToDo; /* indicates if there is more to do */
} gcabi;
@@ -3360,6 +3505,7 @@ struct hpi_control_union_msg {
u32 dwGain;
u32 dwBand;
u32 dwDeemphasis;
+ u32 dwProgram;
struct {
u32 dwMode;
u32 dwValue;
@@ -3394,6 +3540,10 @@ union hpi_control_union_res {
u32 dwBLER;
} rds;
} tuner;
+ struct {
+ char szData[8];
+ u32 dwRemainingChars;
+ } chars8;
};
/* HPI_CONTROLX_STRUCTURES */
@@ -3419,6 +3569,17 @@ struct hpi_controlx_msg_cobranet_bigdata {
#endif
};
+/** Used for PADS control reading of string fields.
+*/
+struct hpi_controlx_msg_pad_data {
+ u32 dwField;
+ u32 dwByteCount;
+ u8 *pbData;
+#ifndef HPI64BIT
+ u32 dwPadding;
+#endif
+};
+
/** Used for generic data
*/
@@ -3432,6 +3593,7 @@ struct hpi_controlx_msg {
struct hpi_controlx_msg_cobranet_data cobranet_data;
struct hpi_controlx_msg_cobranet_bigdata cobranet_bigdata;
struct hpi_controlx_msg_generic generic;
+ struct hpi_controlx_msg_pad_data pad_data;
/* nothing extra to send for status read */
} u;
u16 wControlIndex;
@@ -3657,6 +3819,7 @@ struct hpi_response {
struct hpi_clock_res t; /* dsp time */
struct hpi_profile_res p;
struct hpi_async_res as;
+ u8 bytes[52];
} u;
};
@@ -3696,11 +3859,17 @@ struct hpi_control_defn {
Used for efficient transfer of the control state
between DSP and host or across a network
*/
-struct hpi_control_cache_single {
+struct hpi_control_cache_info {
/** one of HPI_CONTROL_* */
- u16 ControlType;
+ u8 ControlType;
+ /** The total size of cached information in 32-bit words. */
+ u8 nSizeIn32bitWords;
/** The original index of the control on the DSP */
u16 ControlIndex;
+};
+
+struct hpi_control_cache_single {
+ struct hpi_control_cache_info i;
union {
struct { /* volume */
u16 anLog[2];
@@ -3750,6 +3919,20 @@ struct hpi_control_cache_single {
} g;
} u;
};
+
+struct hpi_control_cache_pad {
+ struct hpi_control_cache_info i;
+ u32 dwFieldValidFlags;
+ u8 cChannel[8];
+ u8 cArtist[40];
+ u8 cTitle[40];
+ u8 cComment[200];
+ u32 dwPTY;
+ u32 dwPI;
+ u32 dwTrafficSupported;
+ u32 dwTrafficAnouncement;
+};
+
/*/////////////////////////////////////////////////////////////////////////// */
/* declarations for 2^N sized FIFO buffer (internal to HPI<->DSP interaction) */
struct hpi_fifo_buffer {
diff --git a/pci/asihpi/hpidebug.h b/pci/asihpi/hpidebug.h
index b8b6f61..d99a685 100644
--- a/pci/asihpi/hpidebug.h
+++ b/pci/asihpi/hpidebug.h
@@ -170,10 +170,11 @@ void hpi_debug_data(
"HPI_ADAPTER_SET_PROPERTY", \
"HPI_ADAPTER_GET_PROPERTY", \
"HPI_ADAPTER_ENUM_PROPERTY", \
- "HPI_ADAPTER_MODULE_INFO" \
+ "HPI_ADAPTER_MODULE_INFO", \
+ "HPI_ADAPTER_DEBUG_READ" \
}
-function_count_check(HPI_ADAPTER, 17);
+function_count_check(HPI_ADAPTER, 18);
#define HPI_OSTREAM_STRINGS \
{ \
@@ -328,9 +329,10 @@ function_count_check(HPI_ASYNCEVENT, 6);
"HPI_CONTROL_COBRANET", \
"HPI_CONTROL_TONE_DETECT", \
"HPI_CONTROL_SILENCE_DETECT" \
+ "HPI_CONTROL_PAD" \
}
-compile_time_assert((HPI_CONTROL_LAST_INDEX + 1) == (24),
+compile_time_assert((HPI_CONTROL_LAST_INDEX + 1) == (25),
controltype_strings_dont_match_defs);
#define HPI_SOURCENODE_STRINGS \
diff --git a/pci/asihpi/hpifunc.c b/pci/asihpi/hpifunc.c
index ef61d18..6c33a80 100644
--- a/pci/asihpi/hpifunc.c
+++ b/pci/asihpi/hpifunc.c
@@ -606,6 +606,35 @@ u16 HPI_AdapterSelfTest(
return (hr.wError);
}
+u16 HPI_AdapterDebugRead(
+ struct hpi_hsubsys *phSubSys,
+ u16 wAdapterIndex,
+ u32 dwDspAddress,
+ char *pBuffer,
+ int *dwCountBytes
+)
+{
+ struct hpi_message hm;
+ struct hpi_response hr;
+ HPI_InitMessage(&hm, HPI_OBJ_ADAPTER, HPI_ADAPTER_DEBUG_READ);
+ hm.wAdapterIndex = wAdapterIndex;
+ hm.u.ax.debug_read.dwDspAddress = dwDspAddress;
+
+ if (*dwCountBytes > sizeof(hr.u.bytes))
+ *dwCountBytes = sizeof(hr.u.bytes);
+
+ hm.u.ax.debug_read.dwCountBytes = *dwCountBytes;
+
+ HPI_Message(&hm, &hr);
+
+ if (!hr.wError) {
+ *dwCountBytes = hr.wSize - 12;
+ memcpy(pBuffer, &hr.u.bytes, *dwCountBytes);
+ } else
+ *dwCountBytes = 0;
+ return (hr.wError);
+}
+
u16 HPI_AdapterSetProperty(
struct hpi_hsubsys *phSubSys,
u16 wAdapterIndex,
@@ -1692,6 +1721,61 @@ u16 HPI_ControlQuery(
return (hr.wError);
}
+static u16 HPI_Control_GetString(
+ const struct hpi_hsubsys *phSubSys,
+ const u32 hControlHandle,
+ const u16 wAttribute,
+ char *pszString,
+ const u32 wStringLength
+)
+{
+ unsigned int subStringIndex = 0, j = 0;
+ char c = 0;
+ unsigned int n = 0;
+ u16 wHE = 0;
+
+ if ((wStringLength < 1) || (wStringLength > 256))
+ return HPI_ERROR_INVALID_CONTROL_VALUE;
+ for (subStringIndex = 0; subStringIndex < wStringLength;
+ subStringIndex += 8) {
+ struct hpi_message hm;
+ struct hpi_response hr;
+
+ HPI_InitMessage(&hm, HPI_OBJ_CONTROL, HPI_CONTROL_GET_STATE);
+ u32TOINDEXES(hControlHandle, &hm.wAdapterIndex,
+ &hm.u.c.wControlIndex);
+ hm.u.c.wAttribute = wAttribute;
+ hm.u.c.dwParam1 = subStringIndex;
+ hm.u.c.dwParam2 = 0;
+ HPI_Message(&hm, &hr);
+
+ if (subStringIndex == 0
+ && (hr.u.cu.chars8.dwRemainingChars + 8) >
+ wStringLength)
+ return HPI_ERROR_INVALID_CONTROL_VALUE;
+
+ if (hr.wError) {
+ wHE = hr.wError;
+ break;
+ }
+ for (j = 0; j < 8; j++) {
+ c = hr.u.cu.chars8.szData[j];
+ pszString[subStringIndex + j] = c;
+ n++;
+ if (n >= wStringLength) {
+ pszString[wStringLength - 1] = 0;
+ wHE = HPI_ERROR_INVALID_CONTROL_VALUE;
+ break;
+ }
+ if (c == 0)
+ break;
+ }
+ if (c == 0)
+ break;
+ }
+ return wHE;
+}
+
#if 0
u16 HPI_Tuner_QueryFrequency(
@@ -2976,6 +3060,50 @@ u16 HPI_Tuner_GetDeemphasis(
pdwDeemphasis);
}
+u16 HPI_Tuner_SetProgram(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 dwProgram
+)
+{
+ return HPI_ControlParamSet(phSubSys, hControl, HPI_TUNER_PROGRAM,
+ dwProgram, 0);
+}
+
+u16 HPI_Tuner_GetProgram(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwProgram
+)
+{
+ return HPI_ControlParam1Get(phSubSys, hControl, HPI_TUNER_PROGRAM,
+ pdwProgram);
+}
+
+u16 HPI_Tuner_GetHdRadioDspVersion(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszDspVersion,
+ const u32 dwStringSize
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl,
+ HPI_TUNER_HDRADIO_DSP_VERSION, pszDspVersion, dwStringSize);
+}
+
+u16 HPI_Tuner_GetHdRadioSdkVersion(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszSdkVersion,
+ const u32 dwStringSize
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl,
+ HPI_TUNER_HDRADIO_SDK_VERSION, pszSdkVersion, dwStringSize);
+}
+
u16 HPI_Tuner_GetStatus(
struct hpi_hsubsys *phSubSys,
u32 hControl,
@@ -3022,6 +3150,16 @@ u16 HPI_Tuner_GetMode(
nMode, 0, pnValue, NULL);
}
+u16 HPI_Tuner_GetHdRadioSignalQuality(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwQuality
+)
+{
+ return HPI_ControlParamGet(phSubSys, hControl,
+ HPI_TUNER_HDRADIO_SIGNAL_QUALITY, 0, 0, pdwQuality, NULL);
+}
+
u16 HPI_Tuner_GetRDS(
struct hpi_hsubsys *phSubSys,
u32 hControl,
@@ -3042,6 +3180,82 @@ 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,
+ char *pszString,
+ const u32 dwDataLength
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl, HPI_PAD_CHANNEL_NAME, pszString, dwDataLength);
+}
+
+u16 HPI_PAD_GetArtist(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszString,
+ const u32 dwDataLength
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl, HPI_PAD_ARTIST, pszString, dwDataLength);
+}
+
+u16 HPI_PAD_GetTitle(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszString,
+ const u32 dwDataLength
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl, HPI_PAD_TITLE, pszString, dwDataLength);
+}
+
+u16 HPI_PAD_GetComment(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ char *pszString,
+ const u32 dwDataLength
+)
+{
+ return HPI_Control_GetString(phSubSys,
+ hControl, HPI_PAD_COMMENT, pszString, dwDataLength);
+}
+
+u16 HPI_PAD_GetProgramType(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwPTY
+)
+{
+ return HPI_ControlParamGet(phSubSys, hControl, HPI_PAD_PROGRAM_TYPE,
+ 0, 0, pdwPTY, NULL);
+}
+
+u16 HPI_PAD_GetRdsPI(
+ struct hpi_hsubsys *phSubSys,
+ u32 hControl,
+ u32 *pdwPI
+)
+{
+ return HPI_ControlParamGet(phSubSys, hControl, HPI_PAD_PROGRAM_ID,
+ 0, 0, pdwPI, NULL);
+}
+
u16 HPI_VolumeSetGain(
struct hpi_hsubsys *phSubSys,
u32 hControl,
--
1.5.4.3
next prev parent reply other threads:[~2008-06-05 4:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-05 4:06 [PATCH - ASIHPI 1/8] Common init files for HPI linux
2008-06-05 4:06 ` [PATCH - ASIHPI 2/8] Fix sampleclock source get. Fix volume control dB range linux
2008-06-05 4:06 ` [PATCH - ASIHPI 3/8] Replace hpimod.c with hpioctl.c linux
2008-06-05 4:06 ` [PATCH - ASIHPI 4/8] Include pci table again, avoiding warning about extern linux
2008-06-05 4:06 ` [PATCH - ASIHPI 5/8] Log warning if DSP code version doesn't match driver linux
2008-06-05 4:06 ` linux [this message]
2008-06-05 4:07 ` [PATCH - ASIHPI 7/8] Support variable size cached control information linux
2008-06-05 4:07 ` [PATCH - ASIHPI 8/8] Checkpatch tweaks linux
2008-06-05 4:34 ` [PATCH - ASIHPI 1/8] Common init files for HPI Eliot Blennerhassett
2008-06-06 10:34 ` Takashi Iwai
2008-06-11 23:22 ` Eliot Blennerhassett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1212638821-2779-6-git-send-email-linux@audioscience.com \
--to=linux@audioscience.com \
--cc=alsa-devel@alsa-project.org \
--cc=eblennerhassett@audioscience.com \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.