全志A20 keyadc驱动程序及toolbox测试代码
//TODO:文件分类, 功能
一,
//TODO:程序的分解
二,
//TODO:程序的调试和测试
三,
附录:
//TODO:keyadc驱动程序
/*
* linux/drivers/char/keyadc.c
*
* Copyright (C) 2013 Jack Chen, chwenj@gmail.com
*
* - Base on Allwinner A20 K70 platform;
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
* for more details.
*/
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/cdev.h>
#include <linux/input.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#include <asm/uaccess.h>
/****************************************************************/
#define MAGIC '8'
#define KEYADC_SET _IOW(MAGIC, 0, unsigned long)
#define KEYADC_GET _IOR(MAGIC, 1, unsigned long)
#define KEYADC_VOLUP (0x11)
#define KEYADC_VOLDOWN (0x12)
#define KEYADC_HOME (0x13)
#define KEYADC_BACK (0x14)
#define KEY_IRQNO (AW_IRQ_LRADC)
#define INPUTNAME "keyadc_input"
#define PLATFORMNAME "platform_keyadc"
#define DEVNAME "keyadc"
#define WORKQUEUENAME "keyadc_workqueue"
#define IRQNAME "keyadc_irq"
//#define DEBUGMASK
#ifdef DEBUGMASK
#define dprintk(fmt, arg...) printk(fmt, ## arg)
#else
#define dprintk(fmt, arg...)
#endif
/****************************************************************/
static struct sun7i_lradc_regs {
#define LRADC_BASE_ADDR (0xf1c22800)
#define LRADC_CTRL (0x00)
#define LRADC_INTC (0x04)
#define LRADC_INTS (0x08)
#define LRADC_DATA0 (0x0c)
#define LRADC_DATA1 (0x10)
//regs
/*LRADC_CTRL*/
u32 ctrl;
/*LRADC_INTC*/
u32 intc;
/*LRADC_INTS*/
u32 ints;
/*LRADC_DATA0*/
u32 data0;
/*LRADC_DATA1*/
u32 data1;
//bits
#define FIRST_CONCERT_DLY (2<<24)
#define CHAN (0x3)
#define ADC_CHAN_SELECT (CHAN<<22)
#defi