2007年2月16日 星期五
S3C2410 MMC / Linux 2.6.19
2.The linux DMA stack has been modified since 2.6.18
Fix s3c2410mci.h
#define S3C2410SDI_DMA DMACH_SDI
3.make zImage
4.Create device node
mknod mmcblk0 b 254 0
mknod mmcblk0p1 b 254 1
5.mount sd card
mount -t vfat -o sync /dev/mmcblk0p1 /mnt
2007年2月14日 星期三
Linux USB Ethernet/RNDIS gadget
From http://embedded.seattle.intel-research.net/wiki/index.php?title=Setting_up_USBnet
Currently the Linux kernel supports a CDC Ethernet USB Gadget driver (see USBnet (http://www.linux-usb.org/usbnet/) for more information); however, Windows in unable to use this device because it only support RNDIS Ethernet drivers (the CDC Ethernet driver does work under Linux though).
I'm fail to running Linux USB Ethernet/RNDIS gadget with Windows XP by MS default RNDIS driver. (Error code 10).
Finally I found MCCI RNDIS (Evalution version). It works.
I get it from http://members.driverguide.com/driver/detail.php?driverid=557038
1.Linux Ethernet/RNDIS device
ifconfig usb0 10.0.0.1
2.Windows Ethernet/RNDIS host
Set IP address for Eval MCCI?USB networking device (NDIS 5)
For example 10.0.0.2
Then it works as a real ethernet connection ...
2007年2月6日 星期二
Howto initramfs on linux-2.6.x
@Create external cpio archie
1.Create root file system on $BUSYBOX/ramdisk
2.cd $BUSYBOX/ramdisk
3.find . | cpio -o -H newc > ../initramfs.cpio
4.cp $BUSYBOX/initramfs.cpio $KERNEL/usr
5.cd $KERNEL
6.Set kernel config -> CONFIG_INITRAMFS_SOURCE="usr/initramfs.cpio"
7.make zImage
Note:Busybox can be dynamic linked, but be sure shared libraries in /lib
/*
* check if there is an early userspace init. If yes, let it do all
* the work
*/
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init"; <- Symblic link /init to /bin/sh. We can run into shell and never return
if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
ramdisk_execute_command = NULL;
prepare_namespace();
}
@Create cpio archie by script
1.Create script file $KERNEL/usr/cpio_list
dir /dev 755 0 0
nod /dev/ram0 644 0 0 b 1 0
nod /dev/null 644 0 0 c 1 3
nod /dev/zero 644 0 0 c 1 5
nod /dev/random 644 0 0 c 1 8
nod /dev/urandom 644 0 0 c 1 9
nod /dev/tty0 644 0 0 c 4 0
nod /dev/tty1 644 0 0 c 4 1
nod /dev/tty2 644 0 0 c 4 2
nod /dev/tty 644 0 0 c 5 0
nod /dev/console 644 0 0 c 5 1
nod /dev/loop0 644 0 0 b 7 0
nod /dev/rtc 644 0 0 c 10 135
nod /dev/dsp 644 0 0 c 14 3
slink /dev/sound/dsp /dev/dsp 644 0 0
nod /dev/mtdblock0 644 0 0 b 31 0
nod /dev/mtdblock1 644 0 0 b 31 1
nod /dev/mtdblock2 644 0 0 b 31 2
nod /dev/mtd0 644 0 0 c 90 0
nod /dev/mtd1 644 0 0 c 90 1
nod /dev/mtd2 644 0 0 c 90 2
nod /dev/ttySAC0 644 0 0 c 204 64
nod /dev/ttySAC1 644 0 0 c 204 65
nod /dev/ttySAC2 644 0 0 c 204 66
dir /dev/pts 644 0 0
dir /bin 755 1000 1000
file /bin/busybox /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/bin/busybox 755 0 0
slink /bin/sh /bin/busybox 777 0 0
slink /bin/login /bin/busybox 777 0 0
slink /bin/mount /bin/busybox 777 0 0
slink /bin/umount /bin/busybox 777 0 0
slink /bin/hostname /bin/busybox 777 0 0
slink /bin/ifconfig /bin/busybox 777 0 0
slink /bin/ping /bin/busybox 777 0 0
slink /bin/netstat /bin/busybox 777 0 0
slink /bin/date /bin/busybox 777 0 0
slink /bin/ls /bin/busybox 777 0 0
slink /bin/ln /bin/busybox 777 0 0
slink /bin/mkdir /bin/busybox 777 0 0
slink /bin/mv /bin/busybox 777 0 0
slink /bin/rm /bin/busybox 777 0 0
slink /bin/cat /bin/busybox 777 0 0
slink /bin/echo /bin/busybox 777 0 0
slink /bin/kill /bin/busybox 777 0 0
slink /bin/killall /bin/busybox 777 0 0
slink /bin/ps /bin/busybox 777 0 0
slink /bin/df /bin/busybox 777 0 0
slink /bin/free /bin/busybox 777 0 0
dir /sbin 755 0 0
slink /sbin/init /bin/busybox 755 0 0
slink /sbin/getty /bin/busybox 755 0 0
slink /sbin/poweroff /bin/busybox 755 0 0
slink /sbin/halt /bin/busybox 755 0 0
slink /sbin/reboot /bin/busybox 755 0 0
slink /sbin/hwclock /bin/busybox 755 0 0
slink /sbin/insmod /bin/busybox 755 0 0
slink /sbin/rmmod /bin/busybox 755 0 0
slink /sbin/lsmod /bin/busybox 755 0 0
slink /sbin/modprobe /bin/busybox 755 0 0
slink /sbin/syslogd /bin/busybox 755 0 0
file /sbin/ftpd /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/sbin/ftpd 755 0 0
slink /init /bin/sh 755 0 0
dir /etc 755 0 0
file /etc/inittab /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/inittab 644 0 0
file /etc/fstab /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/fstab 644 0 0
file /etc/passwd /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/passwd 644 0 0
file /etc/group /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/group 644 0 0
file /etc/resolv.conf /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/resolv.conf 644 0 0
file /etc/hosts /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/hosts 644 0 0
file /etc/host.conf /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/host.conf 644 0 0
file /etc/services /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/services 644 0 0
dir /etc/init.d 755 0 0
file /etc/init.d/rcS /home/gigijoe/S3C2410/busybox-1.2.1/ramdisk/etc/init.d/rcS 755 0 0
dir /proc 755 0 0
dir /sys 755 0 0
dir /mnt 755 0 0
dir /tmp 755 0 0
dir /var 755 0 0
dir /var/log 755 0 0
2.Set kernel config -> CONFIG_INITRAMFS_SOURCE="usr/cpio_list"
3.make zImage
2007年2月5日 星期一
USB gadget serial, gserial.inf
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%LINUX%
DriverVer=08/17/2004,0.0.2.0
; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com)
[Manufacturer]
%LINUX%=GSerialDeviceList
[GSerialDeviceList]
%GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7
[DestinationDirs]
DefaultDestDir=10,System32\Drivers
[GSerialInstall]
CopyFiles=GSerialCopyFiles
AddReg=GSerialAddReg
[GSerialCopyFiles]
usbser.sys
[GSerialAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[GSerialInstall.Services]
AddService = usbser,0x0002,GSerialService
[GSerialService]
DisplayName = %GSERIAL_DISPLAY_NAME%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\usbser.sys
LoadOrderGroup = Base
[Strings]
LINUX = "Linux"
GSERIAL = "Gadget Serial"
GSERIAL_DISPLAY_NAME = "USB Gadget Serial Driver"
; MS-Windows driver config matching some basic modes of the
; Linux-USB Ethernet/RNDIS gadget firmware:
;
; - RNDIS plus CDC Ethernet ... this may be familiar as a DOCSIS
; cable modem profile, and supports most non-Microsoft USB hosts
;
; - RNDIS plus CDC Subset ... used by hardware that incapable of
; full CDC Ethernet support.
;
; Microsoft only directly supports RNDIS drivers, and bundled them into XP.
; The Microsoft "Remote NDIS USB Driver Kit" is currently found at:
; http://www.microsoft.com/whdc/hwdev/resources/HWservices/rndis.mspx
[Version]
Signature = "$CHICAGO$"
Class = Net
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
Provider = %Linux%
Compatible = 1
MillenniumPreferred = .ME
DriverVer = 03/30/2004,0.0.0.0
; catalog file would be used by WHQL
;CatalogFile = Linux.cat
[Manufacturer]
%Linux% = LinuxDevices,NT.5.1
[LinuxDevices]
; NetChip IDs, used by both firmware modes
%LinuxDevice% = RNDIS, USB\VID_0525&PID_a4a2
[LinuxDevices.NT.5.1]
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2
[ControlFlags]
ExcludeFromSelect=*
; Windows 98, Windows 98 Second Edition specific sections --------
[RNDIS]
DeviceID = usb8023
MaxInstance = 512
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_98, RNDIS_AddReg_Common
[RNDIS_AddReg_98]
HKR, , DevLoader, 0, *ndis
HKR, , DeviceVxDs, 0, usb8023.sys
HKR, NDIS, LogDriverName, 0, "usb8023"
HKR, NDIS, MajorNdisVersion, 1, 5
HKR, NDIS, MinorNdisVersion, 1, 0
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_98"
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_98"
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_98"
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
[RNDIS_Install_98]
CopyFiles=RNDIS_CopyFiles_98
[RNDIS_CopyFiles_98]
usb8023.sys, usb8023w.sys, , 0
rndismp.sys, rndismpw.sys, , 0
; Windows Millennium Edition specific sections --------------------
[RNDIS.ME]
DeviceID = usb8023
MaxInstance = 512
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_ME, RNDIS_AddReg_Common
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15
[RNDIS_AddReg_ME]
HKR, , DevLoader, 0, *ndis
HKR, , DeviceVxDs, 0, usb8023.sys
HKR, NDIS, LogDriverName, 0, "usb8023"
HKR, NDIS, MajorNdisVersion, 1, 5
HKR, NDIS, MinorNdisVersion, 1, 0
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_ME"
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_ME"
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_ME"
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
[RNDIS_Install_ME]
CopyFiles=RNDIS_CopyFiles_ME
[RNDIS_CopyFiles_ME]
usb8023.sys, usb8023m.sys, , 0
rndismp.sys, rndismpm.sys, , 0
; Windows 2000 specific sections ---------------------------------
[RNDIS.NT]
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common
CopyFiles = RNDIS_CopyFiles_NT
[RNDIS.NT.Services]
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_NT, RNDIS_EventLog
[RNDIS_CopyFiles_NT]
; no rename of files on Windows 2000, use the 'k' names as is
usb8023k.sys, , , 0
rndismpk.sys, , , 0
[RNDIS_ServiceInst_NT]
DisplayName = %ServiceDisplayName%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\usb8023k.sys
LoadOrderGroup = NDIS
AddReg = RNDIS_WMI_AddReg_NT
[RNDIS_WMI_AddReg_NT]
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismpk.sys"
; Windows XP specific sections -----------------------------------
[RNDIS.NT.5.1]
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common
; no copyfiles - the files are already in place
[RNDIS.NT.5.1.Services]
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_51, RNDIS_EventLog
[RNDIS_ServiceInst_51]
DisplayName = %ServiceDisplayName%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\usb8023.sys
LoadOrderGroup = NDIS
AddReg = RNDIS_WMI_AddReg_51
[RNDIS_WMI_AddReg_51]
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismp.sys"
; Windows 2000 and Windows XP common sections --------------------
[RNDIS_AddReg_NT]
HKR, Ndi, Service, 0, "USB_RNDIS"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
[RNDIS_EventLog]
AddReg = RNDIS_EventLog_AddReg
[RNDIS_EventLog_AddReg]
HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll"
HKR, , TypesSupported, 0x00010001, 7
; Common Sections -------------------------------------------------
[RNDIS_AddReg_Common]
HKR, NDI\params\NetworkAddress, ParamDesc, 0, %NetworkAddress%
HKR, NDI\params\NetworkAddress, type, 0, "edit"
HKR, NDI\params\NetworkAddress, LimitText, 0, "12"
HKR, NDI\params\NetworkAddress, UpperCase, 0, "1"
HKR, NDI\params\NetworkAddress, default, 0, " "
HKR, NDI\params\NetworkAddress, optional, 0, "1"
[SourceDisksNames]
1=%SourceDisk%,,1
[SourceDisksFiles]
usb8023m.sys=1
rndismpm.sys=1
usb8023w.sys=1
rndismpw.sys=1
usb8023k.sys=1
rndismpk.sys=1
[DestinationDirs]
RNDIS_CopyFiles_98 = 10, system32/drivers
RNDIS_CopyFiles_ME = 10, system32/drivers
RNDIS_CopyFiles_NT = 12
[Strings]
ServiceDisplayName = "USB Remote NDIS Network Device Driver"
NetworkAddress = "Network Address"
Linux = "Linux Developer Community"
LinuxDevice = "Linux USB Ethernet/RNDIS Gadget"
SourceDisk = "Ethernet/RNDIS Gadget Driver Install Disk"
Vinetic 2cpe v2.2
CFLAGS="-O2 -G 0" ./configure --host=mipsel-linux --target=mipsel-linux --enable-warnings --enable-obsolete-bitfield-event-interface --enable-module --enable-kernelincl=/home/gigijoe/ECS040/linux_2_4_31/include --cache-file=/dev/null
drv_vinetic-1.2.6
CFLAGS="-O2 -G 0" ./configure --host=mipsel-linux --target=mipsel-linux --enable-warnings --enable-spi --disable-udp-redirect --enable-kernelincl=/home/gigijoe/ECS040/linux_2_4_31/include --enable-boardname=AM5120 --disable-v1 --with-access-mode=INTEL_DEMUX --with-access-width=8 --enable-2cpe --with-max-devices=1 --enable-trace --enable-obsolete-premapping --enable-tapiincl=/home/gigijoe/ECS040/Vinetic_BSP/drv_tapi-3.5.1/src/ --cache-file=/dev/null
drv_vinetic-1.1.20
< src/tapi/src/drv_tapi_io.h >
/** TAPI phone volume control */
/** Switch the phone off */
#define IFX_TAPI_LINE_VOLUME_OFF (0xFF)
/** Switch the volume to low, -24 dB */
#define IFX_TAPI_LINE_VOLUME_LOW (-24)
/** Switch the volume to medium, 0 dB */
#define IFX_TAPI_LINE_VOLUME_MEDIUM (0)
/** Switch the volume to high, 24 dB */
#define IFX_TAPI_LINE_VOLUME_HIGH (24)
/** TAPI Lec control */
/** LEC delay line maximum length */
#define IFX_TAPI_LEC_LEN_MAX (16)
/** LEC delay line minimum length */
#define IFX_TAPI_LEC_LEN_MIN (4)
< src/drv_vinetic_tapi.c >
/**
Set the phone volume
\param pChannel Handle to TAPI_CONNECTION structure
\param pVol Handle to IFX_TAPI_LINE_VOLUME_t structure
\return Return value according to IFX_return_t
- IFX_ERROR if an error occured
- IFX_SUCCESS if successful
\remarks
Gain Parameter are given in 'dB'. The range is -24dB ... 24dB.
*/
IFX_return_t TAPI_LL_Phone_Volume (TAPI_CONNECTION *pChannel,
IFX_TAPI_LINE_VOLUME_t const *pVol)
{
IFX_int32_t ret;
IFX_uint8_t ch = pChannel->nChannel;
IFX_boolean_t bALM_mute = IFX_FALSE;
VINETIC_DEVICE *pDev = (VINETIC_DEVICE *)pChannel->pDevice;
/* range check, cos gain var is integer */
if ((pVol->nGainTx < (IFX_TAPI_LINE_VOLUME_LOW)) ||
(pVol->nGainTx > IFX_TAPI_LINE_VOLUME_HIGH) ||
(pVol->nGainRx < (IFX_TAPI_LINE_VOLUME_LOW)) ||
(pVol->nGainRx > IFX_TAPI_LINE_VOLUME_HIGH))
{
/* parameter are out of supported range */
if ((pVol->nGainRx == IFX_TAPI_LINE_VOLUME_OFF) &&
(pVol->nGainTx == IFX_TAPI_LINE_VOLUME_OFF))
{
/* special case: mute the interface with both parameter set to
IFX_TAPI_LINE_VOLUME_OFF */
bALM_mute = IFX_TRUE;
}
else
{
LOG (TAPI_DRV,DBG_LEVEL_HIGH,
("\n\rDRV_ERROR: Volume Gain out of range!\n\r"));
return IFX_ERROR;
}
}
/* protect fw msg */
IFXOS_MutexLock (pDev->memberAcc);
if (bALM_mute == IFX_FALSE)
{
/* get actual settings into local var */
pDev->pAlmCh[ch].ali_ch.bit.gain_x =
(IFX_uint32_t)VINETIC_AlmPcmGain [pVol->nGainTx + 24];
pDev->pAlmCh[ch].ali_ch.bit.gain_r =
(IFX_uint32_t)VINETIC_AlmPcmGain [pVol->nGainRx + 24];
pDev->pAlmCh[ch].ali_ch.bit.en = 1;
}
else
{
/* mute the interface */
pDev->pAlmCh[ch].ali_ch.bit.en = 0;
}
/* write local configuration if */
ret = CmdWrite (pDev, pDev->pAlmCh[ch].ali_ch.value, CMD_ALM_CH_LEN);
/* release lock */
IFXOS_MutexUnlock (pDev->memberAcc);
/* SetTraceLevel (VINETIC, DBG_LEVEL_HIGH); */
return (ret == IFX_SUCCESS) ? IFX_SUCCESS : IFX_ERROR;
}
drv_tapi-3.5.1
< src/drv_tapi_io.h >
/** TAPI phone volume control */
/** Switch the volume to low, -12 dB */
#define IFX_TAPI_LINE_VOLUME_LOW (-12)
/** Switch the volume to medium, -6 dB */
#define IFX_TAPI_LINE_VOLUME_MEDIUM (-6)
/** Switch the volume to high, 0 dB */
#define IFX_TAPI_LINE_VOLUME_HIGH (0)
/** Switch the volume to minimum gain, -24 dB, note that DTMF detection etc
might not work properly on such low signgals */
#define IFX_TAPI_LINE_VOLUME_MIN_GAIN (-24)
/** Switch the volume to maximum gain, +24 dB */
#define IFX_TAPI_LINE_VOLUME_MAX_GAIN (24)
/** TAPI Lec control */
/** LEC delay line maximum length */
#define IFX_TAPI_LEC_LEN_MAX (16)
/** LEC delay line minimum length */
#define IFX_TAPI_LEC_LEN_MIN (4)
drv_vinetic-1.2.6
< src/drv_vinetic_pcm.c >
/**
Sets the PCM interface volume.
\param pChannel Handle to TAPI_CHANNEL structure
\param pVol Handle to IFX_TAPI_LINE_VOLUME_t structure
\return Return value according to IFX_return_t
- IFX_ERROR if an error occured
- IFX_SUCCESS if successful
\remarks
Gain Parameter are given in 'dB'. The range is -24dB ... 24dB.
*/
IFX_return_t IFX_TAPI_LL_PCM_Volume_Set (IFX_TAPI_LL_CH_t *pLLChannel,
IFX_TAPI_LINE_VOLUME_t const *pVol)
{
IFX_int32_t ret;
VINETIC_CHANNEL *pCh = (VINETIC_CHANNEL *) pLLChannel;
VINETIC_DEVICE *pDev = (VINETIC_DEVICE*) (pCh->pParent);
/* range check, cos gain var is integer */
if ((pVol->nGainTx < (IFX_TAPI_LINE_VOLUME_LOW)) ||
(pVol->nGainTx > IFX_TAPI_LINE_VOLUME_HIGH) ||
(pVol->nGainRx < (IFX_TAPI_LINE_VOLUME_LOW)) ||
(pVol->nGainRx > IFX_TAPI_LINE_VOLUME_HIGH))
{
/* parameter are out of supported range */
TRACE (VINETIC,DBG_LEVEL_HIGH,
("\n\rDRV_ERROR: Volume Gain out of range for PCM!\n\r"));
return IFX_ERROR;
}
/* protect fw msg */
IFXOS_MutexLock (pDev->memberAcc);
/* get actual settings into local var */
pCh->pPCM->fw_pcm_ch.bit.gain_1 = (IFX_uint32_t)VINETIC_AlmPcmGain [pVol->nGainTx + 24];
pCh->pPCM->fw_pcm_ch.bit.gain_2 = (IFX_uint32_t)VINETIC_AlmPcmGain [pVol->nGainRx + 24];
pCh->pPCM->fw_pcm_ch.bit.en = 1;
/* write local configuration if */
ret = CmdWrite (pDev, pCh->pPCM->fw_pcm_ch.value, CMD_PCM_CH_LEN);
/* release lock */
IFXOS_MutexUnlock (pDev->memberAcc);
return ret;
}