2007年2月16日 星期五

S3C2410 MMC / Linux 2.6.19

1.Get s3c2420 mmc from http://www.handhelds.org/moin/moin.cgi/HpIpaqH1940Downloads

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

[Version]
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

drv_tapi-3.5.1

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;
}