GPIO関連

GPIOの何に何が繋がっているとか不明

GPIO関連情報

  • kernel
kernel/arch/arm/mach-msm/include/mach/gpio.h
#define GPIO_CFG(gpio, func, dir, pull, drvstr) \
        ((((gpio) & 0x3FF) << 4)        |         \
         ((func) & 0xf)                  |        \
         (((dir) & 0x1) << 14)           |        \
         (((pull) & 0x3) << 15)          |        \
         (((drvstr) & 0xF) << 17))
kernel/arch/arm/mach-msm/gpio.c
GPIO_CFG(gpio, func, dir, pull, drvstr) の結果は
int gpio_tlmm_config(unsigned config, unsigned disable)
の引数 config として使用される。
int gpio_tlmm_config(unsigned config, unsigned disable)
{
    return msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, &disable);
}

kernel/arch/arm/mach-msm/generic_gpio.c
kernel/arch/arm/mach-msm/gpio_hw.h
CONFIG_ARCH_QSD8X50=y なので、gpio_hw.h より gpio_hw-8xxx.h が読み込まれる。
kernel/arch/arm/mach-msm/gpio_hw-8xxx.h
arch/arm/mach-msm/proc_comm.c
msm_proc_comm()はここにあるが、ざっと見ただけでは分からなかった。

メモリマップ

未だに、良く理解していないので誤りがあるかもしれません。
arch/arm/mach-msm/include/mach/msm_iomap.h
#define MSM_SHARED_RAM_BASE   IOMEM(0xE0100000)
#define MSM_SHARED_RAM_SIZE   SZ_1M

#define MSM_GPIO1_BASE        IOMEM(0xE0003000)
#define MSM_GPIO1_PHYS        0xA9000000
#define MSM_GPIO1_SIZE        SZ_4K

#define MSM_GPIO2_BASE        IOMEM(0xE0004000)
#define MSM_GPIO2_PHYS        0xA9100000
#define MSM_GPIO2_SIZE        SZ_4K

次のファイルにおいて、
kernel/arch/arm/mach-msm/proc_comm.c
int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2)
関数内にて、
	unsigned base = (unsigned)MSM_SHARED_RAM_BASE;
 (省略)
	writel(cmd, base + APP_COMMAND);
	writel(data1 ? *data1 : 0, base + APP_DATA1);
	writel(data2 ? *data2 : 0, base + APP_DATA2);
という感じで使われる。
writel は
writel(val, addr)
という並びで良さそうだ。

GPIO割り当て(?)

現状、未確定情報なので、間違いかもしれません。
ほぼ全て、
kernel/arch/arm/mach-msm/board-deckard.c
より
番号 デバイス 方向 プル状態 Drive Strength (?) 有効/無効
0 parallel CAMERA DATA0
1 parallel CAMERA DATA1
2 parallel CAMERA DATA2
3 parallel CAMERA DATA3
4 parallel CAMERA DATA4
5 parallel CAMERA DATA5
6 parallel CAMERA DATA6
7 parallel CAMERA DATA7
8 parallel CAMERA DATA8
9 parallel CAMERA DATA9
10 parallel CAMERA DATA10
11 parallel CAMERA DATA11
12 parallel CAMERA PCLK
13 parallel CAMERA HSYNC_IN
14 parallel CAMERA VSYNC_IN
15 parallel CAMERA MCLK
17 spi??
18 BT SYSRST
19 BT WAKE
20 spi_cs0??
21 BT HOST_WAKE
22 BT VDD_IO
27 音源 出力 無し GPIO_2MA 有効
28 音源 入力 プルダウン GPIO_2MA 有効
34 TOUCHPAD_SUSPEND
37 smb380 SH_ACCEL_IRQ
38 SH_JOG_U_IRQ (TOUCHPAD_IRQ?)
39 SH_JOG_D_IRQ
40 SH_JOG_R_IRQ
41 SH_JOG_L_IRQ
42 SH_KBD_IRQ
43 BT RFR
44 BT CTS
45 BT Rx
46 BT Tx
48 SH_JOG_POWER
51 SDC1
52 SDC1
53 SDC1
54 SDC1
55 SDC1
56 SDC1
60 I2C-0 SCL
61 I2C-0 SDA
62 SDC2
63 SDC2
64 SDC2
65 SDC2
66 SDC2
67 SDC2
68 音源 PCM_DOUT
69 音源 PCM_DIN
70 音源 PCM_SYNC
87 smc91x?
88 TOUCH_HSSP_CLK
89 TOUCH_HSSP_DATA
92 SH_TOUCH_IRQ
95 I2C-1 SCL
96 I2C-1 SDA
95? parallel CAMERA I2C_SCL
96? parallel CAMERA I2C_SDA
102 音源 出力 無し GPIO_2MA 有効
106 TSIF_A_SYNC
107 TSIF_A_DATA
108 TSIF_A_EN
109 TSIF_A_CLK
121 音源 出力 無し GPIO_2MA 有効
114 液晶
134 akm8973 SH_COMPS_IRQ
134? parallel FFA front Sensor Standby
135 akm8973 SH_COMPS_RST
137 parallel CAMERA FFA front Sensor Reset
139 fsusb ?
140 fsusb ?
141 fsusb ?
142 音源 CC_I2S_CLK
143 音源 SADC_WSOUT
144 音源 SADC_DIN
145 音源 SDAC_DOUT
146 音源 MA_CLK_OUT

定数情報

GPIOでの定数

#define
MSM_SHARED_RAM_BASE IOMEM(0xE0100000)
#define
MSM_SHARED_RAM_SIZE SZ_1M

kernel/arch/arm/mach-msm/gpio.c
/* private gpio_configure flags */
#define MSM_GPIOF_ENABLE_INTERRUPT      0x10000000
#define MSM_GPIOF_DISABLE_INTERRUPT     0x20000000
#define MSM_GPIOF_ENABLE_WAKE           0x40000000
#define MSM_GPIOF_DISABLE_WAKE          0x80000000

kernel/arch/arm/mach-msm/include/mach/gpio.h
/* extended gpio api */
#define GPIOF_IRQF_MASK         0x0000ffff /* use to specify edge detection without */
#define GPIOF_IRQF_TRIGGER_NONE 0x00010000 /* IRQF_TRIGGER_NONE is 0 which also means "as already configured" */
#define GPIOF_INPUT             0x00020000
#define GPIOF_DRIVE_OUTPUT      0x00040000
#define GPIOF_OUTPUT_LOW        0x00080000
#define GPIOF_OUTPUT_HIGH       0x00100000

#define GPIOIRQF_SHARED         0x00000001 /* the irq line is shared with other inputs */

kernel/arch/arm/mach-msm/include/mach/irqs-8xxx.h
#define NR_GPIO_IRQS 165

GPIOのDEBUG情報を出力するには?

kernel/arch/arm/mach-msm/generic_gpio.c
を下記のように改変した。DEBUG 出力部分はmsm8k_* 部分より引用した。
$ diff -ubB generic_gpio.c.orig generic_gpio.c
--- generic_gpio.c.orig	2011-02-11 00:16:34.813793748 +0900
+++ generic_gpio.c	2011-02-10 22:41:50.923720072 +0900
@@ -21,6 +21,12 @@
 #include <asm/gpio.h>
 #include "gpio_chip.h"
 
+#if 1
+#define D(fmt, args...) printk(KERN_INFO "generic_gpio: " fmt, ##args)
+#else
+#define D(fmt, args...) do {} while (0)
+#endif
+
 #define GPIO_NUM_TO_CHIP_INDEX(gpio) ((gpio)>>5)
 
 struct gpio_state {
@@ -225,6 +231,7 @@
 	if (chip && chip->read)
 		ret = chip->read(chip, gpio);
 	spin_unlock_irqrestore(&gpio_chips_lock, irq_flags);
+	D("%s(): gpio=%3u ret=%d\n",__FUNCTION__ , gpio , ret );
 	return ret;
 }
 EXPORT_SYMBOL(gpio_get_value);
@@ -240,6 +247,7 @@
 	if (chip && chip->write)
 		ret = chip->write(chip, gpio, on);
 	spin_unlock_irqrestore(&gpio_chips_lock, irq_flags);
+	D("%s(): gpio=%3u ret=%d\n",__FUNCTION__ , gpio , on );
 }
 EXPORT_SYMBOL(gpio_set_value);

間違いが多く含まれているかもしれません、何かお気づきの点が有りましたら、Twitterか下記まで。
コメント
名前:
コメント:

すべてのコメントを見る




最終更新:2011年03月09日 01:50
ツールボックス

下から選んでください:

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