在 gpio-keyc的基础上改写的旋转按钮 ec11的驱动,已经经过了测试。可自定义左旋和右旋的键值。如果按键值输入是第三个引脚,也支持按键操作
补存的头文件:
gpio_ec11.h
#ifndef _GPIO_EC11_H
#define _GPIO_EC11_H
struct device;
struct gpio_desc;
/**
 * struct gpio_ec11_button - configuration parameters
 * @leftcode:  ec11 left direction input event code (KEY_*, SW_*)
 * @rightcode:  ec11 right direction input event code (KEY_*, SW_*)
 * @gpio:  %-1 if this key does not support gpio
 * @gpio:  %-1 if this key does not support gpio
 * @active_low:  %true indicates that button is considered
 *   depressed when gpio is low
 * @desc:  label that will be attached to button's gpio
 * @type:  input event type (%EV_KEY, %EV_SW, %EV_ABS)
 * @wakeup:  configure the button as a wake-up source
 * @debounce_interval: debounce ticks interval in msecs
 * @can_disable: %true indicates that userspace is allowed to
 *   disable button via sysfs
 * @value:  axis value for %EV_ABS
 * @irq:  Irq number in case of interrupt keys
 * @gpiod:  GPIO descriptor
 */
struct gpio_ec11_button {
 unsigned int code;
 unsigned int leftcode;  /*记录左旋键值*/
 unsigned int rightcode;  /*记录右旋键值*/
 int gpio;  /*旋转编码器A引脚的gpio号*/
 int subgpio;  /*旋转编码器B引脚的gpio号*/
 int active_low;
 const char *desc;
 unsigned int type;
 int wakeup;
 int debounce_interval;
 bool can_disable;
 int value;
 unsigned int irq;
 unsigned int irq_flags;
 struct gpio_desc *gpiod;
};
/**
 * struct gpio_ec11_platform_data - platform data for gpio_ec11 driver
 * @buttons:  pointer to array of &gpio;_keys_button structures
 *   describing buttons attached to the device
 * @nbuttons:  number of elements in @buttons array
 * @poll_interval: polling interval in msecs - for polling driver only
 * @rep:  enable input subsystem auto repeat
 * @enable:  platform hook for enabling the device
 * @disable:  platform hook for disabling the device
 * @name:  input device name
 */
struct gpio_ec11_platform_data {
 struct gpio_ec11_button *buttons;
 int nbuttons;
 unsigned int poll_interval;
 unsigned int rep:1;
 int (*enable)(struct device *dev);
 void (*disable)(struct device *dev);
 const char *name;
};
#endif
                                    
                                    
                                        
                                            1