|
发表于 2015-1-22 17:32:08
只看该作者
推荐
好啊!
首先:
1、在firefly-rk3288.dts中我们看到8846配置的地方有配置如下3个GPIO口;
/include/ "act8846.dtsi"
&act8846 {
gpios =<&gpio7 GPIO_B6 GPIO_ACTIVE_LOW>,<&gpio0 GPIO_A1 GPIO_ACTIVE_HIGH>,<&gpio7 GPIO_B2 GPIO_ACTIVE_HIGH>,<&gpio0 GPIO_B3 GPIO_ACTIVE_HIGH>;
2、接着我们找到8846 PMU解析这几个IO口的地方:
kernel/drivers/regulator/act8846.c中的act8846_parse_dt函数会去解析这几个IO口
gpio = of_get_named_gpio(act8846_pmic_np,"gpios", 0);
if (!gpio_is_valid(gpio))
printk("invalid gpio: %d\n",gpio);
pdata->pmic_sleep_gpio = gpio;
pdata->pmic_sleep = true;
gpio = of_get_named_gpio(act8846_pmic_np,"gpios", 1);
if (!gpio_is_valid(gpio))
printk("invalid gpio: %d\n",gpio);
pdata->pmic_hold_gpio = gpio;
pdata->pm_off = of_property_read_bool(act8846_pmic_np,"act8846,system-power-controller");
gpio = of_get_named_gpio(act8846_pmic_np,"gpios", 2);
if (!gpio_is_valid(gpio))
printk("invalid gpio: %d\n",gpio);
pdata->pmic_cpu_det_gpio = gpio;
of_get_named_gpio函数的第三个参数:0,1, 2就firefly-rk3288.dts里定义的IO口顺序
3、然后根据这里IO口取的名字比较见名知意,在结合原理图上查看对应的IO的功能,就大概知道这里设置这 几个IO口是什么功能了:比如说SDK中的:第一个IO口是PMU的SLEEP口,让PMU进入SLEEP模式,第二个是PMU_HOLD,用来维持PMU的电压,第三个是CPU_DET,主要是在关机的时候断开和主控的连接;
4、自己也可以按照这个流程设置一些开机或者关机就必须置高或者置低的口
写的不对的请各位指正,谢谢! |
|