SPI DTSI

GPIO配置,电平的上拉,下拉。输入输出配置:

下面是某个平台上的gpio的配置:

xx.c

*power management*/
int gf_power_on(struct gf_dev* gf_dev)
{
    int rc = 0;
    if (gpio_is_valid(gf_dev->pwr_gpio)) {
        gpio_set_value(gf_dev->pwr_gpio, 1);
    }
    msleep(10);
    pr_info("---- power on ok ----\n");

    return rc;
}

int gf_power_off(struct gf_dev* gf_dev)
{
    int rc = 0;
    if (gpio_is_valid(gf_dev->pwr_gpio)) {
        gpio_set_value(gf_dev->pwr_gpio, 0);
        gpio_set_value(gf_dev->reset_gpio, 0);
    }
    pr_info("---- power off ----\n");
    return rc;
}

/********************************************************************
 *CPU output low level in RST pin to reset GF. This is the MUST action for GF.
 *Take care of this function. IO Pin driver strength / glitch and so on.
 ********************************************************************/
int gf_hw_reset(struct gf_dev *gf_dev, unsigned int delay_ms)
{
    if(gf_dev == NULL) {
        pr_info("Input buff is NULL.\n");
        return -1;
    }
    gpio_direction_output(gf_dev->reset_gpio, 0); //这里注意一下gpio的方向(输入或者输出)
gpio_set_value(gf_dev->reset_gpio, 0); mdelay(3); gpio_set_value(gf_dev->reset_gpio, 1);//是拉高为高电平(1),或者拉低为低电平(0) mdelay(delay_ms); return 0; } int gf_irq_num(struct gf_dev *gf_dev) { if(gf_dev == NULL) { pr_info("Input buff is NULL.\n"); return -1; } else { return gpio_to_irq(gf_dev->irq_gpio); } }

DTSI的配置  xx.dtsi

kernel/arch/arm64/boot/dts/qcom/sdm660-bbry-athena.dtsi

&tlmm {
    goodix_pwr_active: goodix_pwr_active{
          mux {
                        pins = "gpio12";
                     function = "gpio";
                };
               config {
                  pins = "gpio12";
                       drive-strength = <2>;
                       bias-disable = <0>;
                 output-high;
              };
     };
    goodix_reset_reset: goodix_reset_reset{
                mux {
                      pins = "gpio20";
                   function = "gpio";
              };
             config {
                        pins = "gpio20";
                     drive-strength = <2>;
                     bias-disable = <0>;
                       output-low;
             };
    };
   goodix_reset_active: goodix_reset_active{
             mux {
                   pins = "gpio20";
                        function = "gpio";
           };
          config {
                     pins = "gpio20";
                  drive-strength = <2>;
                  bias-disable = <0>;
                    output-high;
         };
        };

       goodix_irq_active: goodix_irq_active {
              mux {
                    pins = "gpio72";
                 function = "gpio";
            };
           config {
                      pins = "gpio72";
                   drive-strength = <2>;
                   bias-disable = <0>;
                     input-enable;
         };
        };

};

&soc {

 goodix_gf5216{
            status = "ok";
           compatible = "goodix,fingerprint";
              spi-max-frequency = <4800000>;
             reg = <0>;
                input-device-name = "gf5216";
                interrupt-parent = <&tlmm>;
          interrupts = <72 0>;

             goodix,gpio_reset = <&tlmm 20 0x00>;
          goodix,gpio_irq = <&tlmm 72 0x00>;
         goodix,gpio_pwr = <&tlmm 12 0x00>;

                pinctrl-names = "goodixfp_pwr_active",
                               "goodixfp_reset_reset",
                         "goodixfp_reset_active",
                          "goodixfp_irq_active";

             pinctrl-0 = <&goodix_pwr_active>;
         pinctrl-1 = <&goodix_reset_reset>;
            pinctrl-2 = <&goodix_reset_active>;
              pinctrl-3 = <&goodix_irq_active>;
  };
};

 扩展阅读:

https://blog.csdn.net/ibelieve1974/article/details/72235579

嵌入式中的BSP---BSP到底是什么?

https://blog.csdn.net/qq_38500662/article/details/80965774

BSP与HAL的关系

转载于:https://www.cnblogs.com/chsigu/p/10731097.html

首先,要在rk3399的设备树中添加SPI控制器节点。设备树是用于描述设备硬件信息的一种数据结构,它以树形结构组织设备及其配置信息。 在设备树中添加SPI控制器节点的过程如下: 1. 找到rk3399的设备树文件,一般是"arch/arm64/boot/dts/rockchip/rk3399.dtsi"。 2. 找到SPI控制器节点相关的代码,这些代码一般集中在"spi@ff1d0000"这样的节点中。如果rk3399的设备树文件中没有这个节点,就要手动添加它。 3. 在SPI控制器节点中添加SPI设备节点(也就是芯片设备节点)。这里假设要添加的SPI设备为"spi0_flash",则添加的代码如下: spi0_flash: spi@0 { status = "okay"; compatible = "winbond,w25q128jv"; reg = <0>; spi-max-frequency = <10000000>; spi-cpha; spi-cpol; }; 在这个代码块中,"spi0_flash"是设备节点的名称,在设备树中必须唯一;"status"表示设备节点是否启用,"okay"表示启用;"compatible"表示设备节点所使用的设备驱动程序;"reg"表示设备在总线上的地址;"spi-max-frequency"表示SPI总线的最大时钟频率;"spi-cpha"和"spi-cpol"表示SPI总线的相位和极性。 4. 保存设备树文件,并重新编译内核镜像和设备树文件。 5. 将新的内核镜像和设备树文件烧录到rk3399开发板上,并重启设备,使其生效。 这样,就成功添加了一个SPI设备节点。当操作系统使用SPI总线时,它会自动识别并使用这个节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值