msm8953 android9.0 GPIO子系统核心部分,在哪个文件中?
时间: 2024-04-03 20:35:04 浏览: 65
在Android 9.0中,GPIO子系统的核心代码主要包含在内核源码的`drivers/gpio`目录下的文件中。其中,`gpio.c`文件包含了GPIO子系统的核心代码,如gpio_request()、gpio_direction_input()、gpio_direction_output()等函数的实现。`gpio_sysfs.c`文件则实现了GPIO用户接口,通过sysfs文件系统与GPIO子系统交互。在`include/linux/gpio.h`头文件中定义了GPIO子系统的API。
此外,GPIO子系统还依赖于具体的GPIO控制器驱动,不同的硬件平台可能需要不同的GPIO控制器驱动。在内核源码的`drivers/gpio`目录下,还包含了一些GPIO控制器驱动的实现,如`gpio-msm-v2.c`是适用于高通MSM平台的GPIO控制器驱动。
相关问题
msm8953 android9.0 GPIO子系统代码?
Android 9.0中的GPIO子系统是基于Linux内核的GPIO子系统进行开发的,主要由以下几个组件组成:
1. GPIO控制器驱动:用于控制GPIO控制器的初始化、配置和控制等操作。
2. GPIO子系统核心:提供了一组API用于对GPIO进行操作,如gpio_request()、gpio_direction_input()、gpio_direction_output()等。
3. GPIO用户接口:由用户空间的应用程序调用,通过sysfs文件系统与GPIO子系统交互,如/sys/class/gpio/目录下的文件。
以下是GPIO子系统的核心代码:
```
struct gpio_chip {
const char *label; // GPIO控制器的标签
struct device *parent; // GPIO控制器的设备节点
unsigned int base; // GPIO控制器的基地址
int ngpio; // GPIO控制器支持的GPIO引脚数量
int can_sleep; // GPIO控制器是否支持睡眠模式
int (*request)(struct gpio_chip *chip, unsigned int offset);
void (*free)(struct gpio_chip *chip, unsigned int offset);
int (*direction_input)(struct gpio_chip *chip, unsigned int offset);
int (*direction_output)(struct gpio_chip *chip, unsigned int offset, int value);
int (*get)(struct gpio_chip *chip, unsigned int offset);
void (*set)(struct gpio_chip *chip, unsigned int offset, int value);
int (*get_direction)(struct gpio_chip *chip, unsigned int offset);
int (*set_config)(struct gpio_chip *chip, unsigned int offset, unsigned long config);
struct gpio_irq_chip irq; // 中断控制器
};
int gpio_request(unsigned int gpio, const char *label)
{
struct gpio_chip *chip = gpio_to_chip(gpio);
int ret;
if (!chip)
return -ENODEV;
if (gpio >= chip->ngpio)
return -EINVAL;
ret = chip->request(chip, gpio);
if (!ret) {
struct gpio_desc *desc = &gpio_desc[gpio];
desc->chip = chip;
desc->offset = gpio;
desc->label = label;
desc->flags = 0;
desc->value = 0;
}
return ret;
}
int gpio_direction_input(unsigned int gpio)
{
struct gpio_chip *chip = gpio_to_chip(gpio);
if (!chip)
return -ENODEV;
if (gpio >= chip->ngpio)
return -EINVAL;
return chip->direction_input(chip, gpio);
}
int gpio_direction_output(unsigned int gpio, int value)
{
struct gpio_chip *chip = gpio_to_chip(gpio);
if (!chip)
return -ENODEV;
if (gpio >= chip->ngpio)
return -EINVAL;
return chip->direction_output(chip, gpio, value);
}
int gpio_get_value(unsigned int gpio)
{
struct gpio_chip *chip = gpio_to_chip(gpio);
if (!chip)
return -ENODEV;
if (gpio >= chip->ngpio)
return -EINVAL;
return chip->get(chip, gpio);
}
void gpio_set_value(unsigned int gpio, int value)
{
struct gpio_chip *chip = gpio_to_chip(gpio);
if (!chip)
return;
if (gpio >= chip->ngpio)
return;
chip->set(chip, gpio, value);
}
```
以上是GPIO子系统的核心代码,可以看到,GPIO子系统提供了一组API用于对GPIO进行操作,如gpio_request()、gpio_direction_input()、gpio_direction_output()等,这些API都是由GPIO控制器驱动和GPIO控制器硬件实现的。
msm8953 android9.0 内核API请求配置GPIO在哪个文件中?
针对你的问题,msm8953 Android 9.0 内核中请求配置 GPIO 的代码通常分散在多个文件中,具体取决于具体的硬件平台和驱动程序。
一般来说,这些代码会包含在一个 GPIO 驱动程序中,该驱动程序用于管理特定硬件平台上的 GPIO 引脚。以下是一些可能涉及的文件:
1. gpio.h:这是 GPIO API 的头文件,包含了用于请求、设置和读取 GPIO 引脚的函数原型和常量定义。
2. gpio-msm-v2.c:这是 MSM 平台上 GPIO 驱动程序的主要代码文件,包含了实现 GPIO API 函数的具体代码。在这个文件中,通常会包含 gpio_request()、gpio_direction_input() 等函数的实现。
3. board-<platform>.c:这是针对具体硬件平台的代码文件,包含了初始化 GPIO 引脚和配置 GPIO 控制器的代码。在这个文件中,可以找到使用 gpio_request() 和 gpio_direction_input() 等函数请求和配置 GPIO 引脚的代码。
4. device-tree:在一些硬件平台上,GPIO 引脚的配置信息可能会包含在设备树(Device Tree)中。在设备树中,可以找到 GPIO 引脚的编号、功能描述和控制器信息等。
以上仅是一些可能涉及的文件,具体情况可能因为硬件平台的不同而有所变化。如果你需要查找具体的代码实现,可以参考 Qualcomm 官方的文档和开发者社区的讨论,或者查阅移植至你的具体硬件平台的 Android 内核源码。
阅读全文