1.更改串口配置涉及文件
arch/arm/mach-msm/board-8610-gpiomux.c -- 功能选择;
arch/arm/boot/dts/msm8610.dtsi -- pdata注册;
arch/arm/mach-msm/clock-8610.c -- uart clk初始化;
驱动文件:
低速版本:compatible = "qcom,msm-lsuart-v14";@msm_serial_hs_lite.c
高速版本:compatible = "qcom,msm-hsuart-v14";msm_serial_hs.c
生成节点:
低速:/dev/ttyHSLx
高速:/dev/ttyHSx
2. 高通很多管脚支持复用,比如msm8610的gpio4,6,7,8脚
GPIO_6/BLSP2_SPI_CS_N /BLSP2_UART_CTS_N /BLSP2_I2C_SDA_A AV14 不是唤醒中断
GPIO_7/WVGA_MODE_EN/ BLSP2_SPI_CLK/ BLSP2_UART_RFR_N /BLSP2_I2C_SCL_A AW13
GPIO_5/BLSP2_SPI_MISO/ BLSP2_UART_RX/BLSP1_I2C_SCL_B AU13 不是唤醒中断
GPIO_4/BLSP2_SPI_MOSI/ BLSP2_UART_TX/BLSP1_I2C_SDA_B
支持GPIO,SPI,UART,I2C;
3.配置成UART
3.1. 管脚功能定义为uart@arch/arm/mach-msm/board-8610-gpiomux.c:
static struct msm_gpiomux_config msm_focaltech_configs[] __initdata = {
{
{
.gpio = 4, /* BLSP1 QUP4 SPI_DATA_MOSI */
.settings = {
[GPIOMUX_ACTIVE] = &gpio_uart_config,
[GPIOMUX_SUSPENDED] = &gpio_uart_config,
},
},
{
.gpio = 5, /* BLSP1 QUP4 SPI_DATA_MISO */
.settings = {
[GPIOMUX_ACTIVE] = &gpio_uart_config,
[GPIOMUX_SUSPENDED] = &gpio_uart_config,
},
},
};
3.2.在dts中加入uart的platform_data配置@arch/arm/boot/dts/msm8610.dtsi,同时注释原有的spi_2定义:
</pre><pre name="code" class="cpp">serial@f991e000 {
compatible = "qcom,msm-lsuart-v14"; // 低速版本@msm_serial_hs_lite.c
reg = <0xf991e000 0x1000>; // address
interrupts = <0 108 0>;
status = "ok";
qcom,msm-bus,name = "blsp1_uart2"; // UART
qcom,msm-bus,num-cases = <2>;
qcom,msm-bus,num-paths = <1>;
qcom,msm-bus,vectors-KBps =
<86 512 0 0>,
<86 512 500 800>;
};
3.3. 添加uart时钟定义,不然驱动注册是会因找不到clk失败@arch/arm/mach-msm/clock-8610.c:
+ CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991e000.serial"),
+ CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, "f991e000.serial"),
4.配置成SPI
4.1. 管脚功能定义为uart@arch/arm/mach-msm/board-8610-gpiomux.c:
{
.gpio = 4, /* BLSP1 QUP4 SPI_DATA_MOSI */
.settings = {
[GPIOMUX_ACTIVE] = &gpio_spi_config,
[GPIOMUX_SUSPENDED] = &gpio_spi_susp_config,
},
},
{
.gpio = 5, /* BLSP1 QUP4 SPI_DATA_MISO */
.settings = {
[GPIOMUX_ACTIVE] = &gpio_out_act_cfg,
[GPIOMUX_SUSPENDED] = &gpio_out_sus_cfg,
},
},
4.2. 在dts中加入spi2的platform_data配置@arch/arm/boot/dts/msm8610.dtsi:
aliases {
sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
sdhc2 = &sdhc_2; /* SDC2 SD card slot */
spi4 = &spi_4;
spi2 = &spi_2;
};
spi_2: spi@f9924000 { // spi_2作为别名,这样就可以有多个“spi“这个节点名
compatible = "qcom,spi-qup-v2";
#address-cells = <1>;
#size-cells = <0>;
reg-names = "spi_physical", "spi_bam_physical";
reg = <0xf9924000 0x1000>,
<0xf9904000 0x15000>;
interrupt-names = "spi_irq", "spi_bam_irq";
interrupts = <0 96 0>, <0 238 0>;
spi-max-frequency = <50000000>;
qcom,gpio-mosi = <&msmgpio 4 0>;
qcom,gpio-miso = <&msmgpio 5 0>;
qcom,gpio-clk = <&msmgpio 7 0>;
qcom,gpio-cs0 = <&msmgpio 6 0>;
qcom,infinite-mode = <0>;
qcom,use-bam;
qcom,ver-reg-exists;
qcom,bam-consumer-pipe-index = <14>;
qcom,bam-producer-pipe-index = <15>;
qcom,master-id = <86>;
};