現在の状況
- 初期化時の ioctl コマンドが判明したので、内部情報を可視化する作業中
ソースコード
kernel/arch/arm/mach-msm/qdsp6/msm8k_audio_dev_ctrl.c
初期化シーケンス
cmd=4004610a AUDIO_SET_VOLUME
vol=100
コード例:
unsigned int vol=100;
ioctl( fd_madc1 , AUDIO_SET_VOLUME , &vol );
cmd=40046120 AUDIO_SWITCH_DEVICE
new_device=0x30 I2S_RX_SPKR
コード例:
unsigned int dev=0x30;
ioctl( fd_madc1 , AUDIO_SWITCH_DEVICE, &dev );
cmd=4004610a AUDIO_SET_VOLUME
vol=100
cmd=40046120 AUDIO_SWITCH_DEVICE
new_device=0x06 SPKR_PHONE_MIC
cmd=40046121 AUDIO_SET_MUTE
mute=0 path=1
コード例:
// msm_audio.h で定義
struct msm_mute_info {
uint32_t mute;
uint32_t path;
};
struct msm_mute_info mute;
// msm_audio.h より
// #define SND_MUTE_UNMUTED 0
// #define SND_MUTE_MUTED 1
mute.mute=0;
// msm8k_cad_devices.h より
// #define CAD_RX_DEVICE 0x00
// #define CAD_TX_DEVICE 0x01
// #define CAD_AUXPGA_DEVICE 0x02
mute.path=1;
ioctl( fd_madc1 , AUDIO_SET_MUTE , &mute );
dmesgによる情報
msm8k_audio_dev_ctrl_open(): msm8k_audio_dev_ctrl_open
msm8k_audio_dev_ctrl_ioctl(): msm8k_audio_dev_ctrl_ioctl() cmd=4004610a 7e860c6c
audio_set_device_volume(): audio_set_device_volume
audio_set_device_volume_path(): audio_set_device_volume_path
msm8k_audio_dev_ctrl_release(): msm8k_audio_dev_ctrl_release
msm8k_audio_dev_ctrl_open(): msm8k_audio_dev_ctrl_open
msm8k_audio_dev_ctrl_ioctl(): msm8k_audio_dev_ctrl_ioctl() cmd=40046120 2b0b3bcc
audio_switch_device(): audio_switch_device new_device=30
get_cad_hw_device_id(): get_cad_hw_device_id new_device=00000030
get_cad_hw_device_id(): [audio_switch_device] case I2S_RX_SPKR
msm8k_audio_dev_ctrl_open(): msm8k_audio_dev_ctrl_open
msm8k_audio_dev_ctrl_ioctl(): msm8k_audio_dev_ctrl_ioctl() cmd=4004610a 2b0b3b9c
audio_set_device_volume(): audio_set_device_volume
audio_set_device_volume_path(): audio_set_device_volume_path
msm8k_audio_dev_ctrl_release(): msm8k_audio_dev_ctrl_release
msm8k_audio_dev_ctrl_ioctl(): msm8k_audio_dev_ctrl_ioctl() cmd=40046120 2b0b3bc8
audio_switch_device(): audio_switch_device new_device=6
get_cad_hw_device_id(): get_cad_hw_device_id new_device=00000006
msm8k_audio_dev_ctrl_ioctl(): msm8k_audio_dev_ctrl_ioctl() cmd=40046121 2b0b3bc0
audio_set_device_mute(): audio_set_device_mute
msm8k_audio_dev_ctrl_release(): msm8k_audio_dev_ctrl_release
ioctlの定義
kernel/include/linux/msm_audio.h
/* PCM Audio */
#define AUDIO_IOCTL_MAGIC 'a'
#define AUDIO_START _IOW(AUDIO_IOCTL_MAGIC, 0, unsigned)
#define AUDIO_STOP _IOW(AUDIO_IOCTL_MAGIC, 1, unsigned)
#define AUDIO_FLUSH _IOW(AUDIO_IOCTL_MAGIC, 2, unsigned)
#define AUDIO_GET_CONFIG _IOR(AUDIO_IOCTL_MAGIC, 3, unsigned)
#define AUDIO_SET_CONFIG _IOW(AUDIO_IOCTL_MAGIC, 4, unsigned)
#define AUDIO_GET_STATS _IOR(AUDIO_IOCTL_MAGIC, 5, unsigned)
#define AUDIO_ENABLE_AUDPP _IOW(AUDIO_IOCTL_MAGIC, 6, unsigned)
#define AUDIO_SET_ADRC _IOW(AUDIO_IOCTL_MAGIC, 7, unsigned)
#define AUDIO_SET_EQ _IOW(AUDIO_IOCTL_MAGIC, 8, unsigned)
#define AUDIO_SET_RX_IIR _IOW(AUDIO_IOCTL_MAGIC, 9, unsigned)
#define AUDIO_SET_VOLUME _IOW(AUDIO_IOCTL_MAGIC, 10, unsigned)
#define AUDIO_PAUSE _IOW(AUDIO_IOCTL_MAGIC, 11, unsigned)
#define AUDIO_PLAY_DTMF _IOW(AUDIO_IOCTL_MAGIC, 12, unsigned)
#define AUDIO_GET_EVENT _IOR(AUDIO_IOCTL_MAGIC, 13, unsigned)
#define AUDIO_ABORT_GET_EVENT _IOW(AUDIO_IOCTL_MAGIC, 14, unsigned)
#define AUDIO_REGISTER_PMEM _IOW(AUDIO_IOCTL_MAGIC, 15, unsigned)
#define AUDIO_DEREGISTER_PMEM _IOW(AUDIO_IOCTL_MAGIC, 16, unsigned)
#define AUDIO_ASYNC_WRITE _IOW(AUDIO_IOCTL_MAGIC, 17, unsigned)
#define AUDIO_ASYNC_READ _IOW(AUDIO_IOCTL_MAGIC, 18, unsigned)
#define AUDIO_SET_INCALL _IOW(AUDIO_IOCTL_MAGIC, 19, struct msm_voicerec_mode)
#define AUDIO_GET_NUM_SND_DEVICE _IOR(AUDIO_IOCTL_MAGIC, 20, unsigned)
#define AUDIO_GET_SND_DEVICES _IOWR(AUDIO_IOCTL_MAGIC, 21, \
struct msm_snd_device_list)
#define AUDIO_ENABLE_SND_DEVICE _IOW(AUDIO_IOCTL_MAGIC, 22, unsigned)
#define AUDIO_DISABLE_SND_DEVICE _IOW(AUDIO_IOCTL_MAGIC, 23, unsigned)
#define AUDIO_ROUTE_STREAM _IOW(AUDIO_IOCTL_MAGIC, 24, \
struct msm_audio_route_config)
#define AUDIO_GET_PCM_CONFIG _IOR(AUDIO_IOCTL_MAGIC, 30, unsigned)
#define AUDIO_SET_PCM_CONFIG _IOW(AUDIO_IOCTL_MAGIC, 31, unsigned)
#define AUDIO_SWITCH_DEVICE _IOW(AUDIO_IOCTL_MAGIC, 32, unsigned)
#define AUDIO_SET_MUTE _IOW(AUDIO_IOCTL_MAGIC, 33, unsigned)
#define AUDIO_GET_STREAM_INFO _IOR(AUDIO_IOCTL_MAGIC, 34, \
struct msm_audio_bitstream_info)
#define AUDIO_SET_PAN _IOW(AUDIO_IOCTL_MAGIC, 35, unsigned)
#define AUDIO_SET_QCONCERT_PLUS _IOW(AUDIO_IOCTL_MAGIC, 36, unsigned)
#define AUDIO_SET_MBADRC _IOW(AUDIO_IOCTL_MAGIC, 37, unsigned)
#define AUDIO_SET_VOLUME_PATH _IOW(AUDIO_IOCTL_MAGIC, 38, \
struct msm_vol_info)
#define AUDIO_SET_MAX_VOL_ALL _IOW(AUDIO_IOCTL_MAGIC, 39, unsigned)
#define AUDIO_SET_STREAM_CONFIG _IOW(AUDIO_IOCTL_MAGIC, 40, \
struct msm_audio_stream_config)
#define AUDIO_GET_STREAM_CONFIG _IOR(AUDIO_IOCTL_MAGIC, 41, \
struct msm_audio_stream_config)
#define AUDIO_SET_MUTE_EX _IOW(AUDIO_IOCTL_MAGIC, 42, unsigned)
#define AUDIO_MAX_COMMON_IOCTL_NUM 100
/* CONFLICTING ioctls added by Google. */
#define AUDIO_ENABLE_AUDPRE _IOW(AUDIO_IOCTL_MAGIC, 11, unsigned)
#define AUDIO_SET_AGC _IOW(AUDIO_IOCTL_MAGIC, 12, unsigned)
#define AUDIO_SET_NS _IOW(AUDIO_IOCTL_MAGIC, 13, unsigned)
#define AUDIO_SET_TX_IIR _IOW(AUDIO_IOCTL_MAGIC, 14, unsigned)
/* End conflicts. */
デバイス定義
kwrnel/include/linux/msm_audio.h
#define HANDSET_MIC 0x01
#define HANDSET_SPKR 0x02
#define HEADSET_MIC 0x03
#define HEADSET_SPKR_MONO 0x04
#define HEADSET_SPKR_STEREO 0x05
#define SPKR_PHONE_MIC 0x06
#define SPKR_PHONE_MONO 0x07
#define SPKR_PHONE_STEREO 0x08
#define BT_SCO_MIC 0x09
#define BT_SCO_SPKR 0x0A
#define BT_A2DP_SPKR 0x0B
#define TTY_HEADSET_MIC 0x0C
#define TTY_HEADSET_SPKR 0x0D
#define I2S_RX_SPKR 0x30
#define I2S_RX_HEADSET 0x31
#define HANDSETMIC_HEADSET_MIC 0x32
#define I2S_RX_HANDSETMIC_HEADSET 0x33
#define LINE_IN_MIC 0x34
#define I2S_RX_FAREND_TERMINAL 0x35
#define LOOPBACK_SPKR_MIC 0x50
#define LOOPBACK_HEADSET_MIC 0x51
#define LOOPBACK_EAR 0x52
#define LOOPBACK_HEADPHONE 0x53
#define LOOPBACK_SPKR 0x54
間違いが多く含まれているかもしれません、何かお気づきの点が有りましたら、Twitterか下記まで。
コメント
最終更新:2011年03月01日 23:56