audio_dev_ctrl関連


現在の状況

  • 初期化時の 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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。