• 内核驱动 i2c-mux-gpio


    描述

    i2c-mux-gpio 是一个i2c mux驱动程序,提供从主i2c总线和通过GPIO管脚控制的硬件MUX访问i2c总线段。

    例如:

     ----------              ----------  Bus segment 1   - - - - -
    |          | SCL/SDA    |          |-------------- |           |
    |          |------------|          |
    |          |            |          | Bus segment 2 |           |
    |  Linux   | GPIO 1..N  |   MUX    |---------------   Devices
    |          |------------|          |               |           |
    |          |            |          | Bus segment M
    |          |            |          |---------------|           |
     ----------              ----------                  - - - - -

    主I2C总线的SCL/SDA多路复用到总线段1..N,根据GPIO管脚1..N的设置。

    使用方法

    i2c-mux-gpio 使用平台总线,因此需要提供一个结构体 platform_device,其 platform_data 指向一个结构体 i2c_mux_gpio_platform_data,其中包含主总线的I2C适配器编号、要创建的总线段的数量以及用于控制它的GPIO引脚。

    例如,一个MUX提供了通过3个GPIO管脚控制的4个总线段:

    #include <linux/platform_data/i2c-mux-gpio.h>
    #include <linux/platform_device.h>
    
    static const unsigned myboard_gpiomux_gpios[] = {
          AT91_PIN_PC26, AT91_PIN_PC25, AT91_PIN_PC24
    };
    
    static const unsigned myboard_gpiomux_values[] = {
          0, 1, 2, 3
    };
    
    static struct i2c_mux_gpio_platform_data myboard_i2cmux_data = {
          .parent         = 1,
          .base_nr        = 2, /* optional */
          .values         = myboard_gpiomux_values,
          .n_values       = ARRAY_SIZE(myboard_gpiomux_values),
          .gpios          = myboard_gpiomux_gpios,
          .n_gpios        = ARRAY_SIZE(myboard_gpiomux_gpios),
          .idle           = 4, /* optional */
    };
    
    static struct platform_device myboard_i2cmux = {
          .name           = "i2c-mux-gpio",
          .id             = 0,
          .dev            = {
                  .platform_data  = &myboard_i2cmux_data,
          },
    };

    如果你在注册时不知道绝对的GPIO pin号,你可以提供一个芯片名称(.chip_name)和相对的GPIO pin号,i2c-mux-gpio驱动程序会为你做这些工作,包括延迟探测如果GPIO芯片不能立即可用。

    设备注册

    当注册你的i2c-mux-gpio设备时,你应该传递它使用的任何GPIO引脚的编号作为设备ID。这保证了每个实例都有一个不同的ID。

    或者,如果您不需要一个稳定的设备名称,您可以简单地传递PLATFORM_DEVID_AUTO作为设备ID,平台核心将为您的设备分配一个动态ID。如果您在注册时不知道GPIO pin号的绝对值,这甚至是唯一的选择。

    本文来自博客园,作者:王楼小子,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/15149445.html

  • 相关阅读:
    css文档流
    gitolite搭建
    Packets out of order. Expected 1 received 27...
    前端常见跨域解决方案
    跨时代的分布式数据库 – 阿里云DRDS详解
    Redis持久化机制
    redis实现消息队列
    队列
    ide-helper
    Bitmap 位操作相关
  • 原文地址:https://www.cnblogs.com/wanglouxiaozi/p/15149445.html
Copyright © 2020-2023  润新知