MTK6762 的LED驱动
MTK的驱动不是使用一些初级教程的找到对应IO去配置寄存器,需要用到的知识有平台总线、pinctrl子系统以及设备树等等,在这里我就具体去讲解这些知识了,在论坛里已经有了很多大佬讲的很好。
需要修改设备树和增加自己的驱动文件以及添加makefile文件
一、修改设备树
路径:mt6762_Q\kernel-4.9\arch\arm64\boot\dts\mediatek
文件: MT6762.dts
二、 增加自己的驱动文件
路径:mt6762_Q\kernel-4.9\drivers\misc\mediatek
在此路径添加自己的驱动文件夹 如:green_led
在此路径的Makefile添加自己的文件夹信息 如:obj-y += green_led /
路径:mt6762_Q\kernel-4.9\drivers\misc\mediatek\ green_led
在此路径添加自己写的驱动.c文件和编译Makefile文件
如在此文件夹添加green_led.c 和Makefile
此路径的Makefile 添加驱动编译信息如:obj-y += green_led.o
到此文件添加结束
green_led.c
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/input.h>
#include <linux/input/mt.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/gpio.h>
#include <linux/regulator/consumer.h>
#include <linux/firmware.h>
#include <linux/debugfs.h>
#include <linux/errno.h>
#include <linux/io.h>
#include <linux/fs.h>
#include <linux/string.h>
static struct pinctrl *greenctrl = NULL;//句柄
static struct pinctrl_state *green_led_Hight = NULL;//句柄
static struct pinctrl_state *