GPIOの何に何が繋がっているとか不明
GPIO関連情報
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