diff options
Diffstat (limited to 'drivers/input')
| -rwxr-xr-x | drivers/input/misc/tri_state_key.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/drivers/input/misc/tri_state_key.c b/drivers/input/misc/tri_state_key.c index ebc4655b4f9..5a104f29029 100755 --- a/drivers/input/misc/tri_state_key.c +++ b/drivers/input/misc/tri_state_key.c @@ -36,23 +36,14 @@ 4½ÅºÍ3½ÅÁ¬½Ó 1 0 | Normal */ -typedef enum { - MODE_UNKNOWN, - MODE_MUTE, - MODE_DO_NOT_DISTURB, - MODE_NORMAL, - MODE_MAX_NUM -} tri_mode_t; - -#define MODE_TOTAL_SILENCE 600 -#define MODE_ALARMS_ONLY 601 -#define MODE_PRIORITY_ONLY 602 -#define MODE_NONE 603 + +#define KEYCODE_BASE 600 +#define TOTAL_KEYCODES 6 static int current_mode = 0; -static int keyCode_slider_top = MODE_ALARMS_ONLY; -static int keyCode_slider_middle = MODE_PRIORITY_ONLY; -static int keyCode_slider_bottom = MODE_NONE; +static int keyCode_slider_top = KEYCODE_BASE + 1; +static int keyCode_slider_middle = KEYCODE_BASE + 2; +static int keyCode_slider_bottom = KEYCODE_BASE + 3; struct switch_dev_data { //tri_mode_t last_type; @@ -103,17 +94,17 @@ static void switch_dev_work(struct work_struct *work) mutex_lock(&sem); if(!gpio_get_value(switch_data->key2_gpio)) { - mode = MODE_NORMAL; + mode = 3; keyCode = keyCode_slider_bottom; } else if(gpio_get_value(switch_data->key1_gpio)) { - mode = MODE_DO_NOT_DISTURB; + mode = 2; keyCode = keyCode_slider_middle; } else { - mode = MODE_MUTE; + mode = 1; keyCode = keyCode_slider_top; } if (current_mode != mode) { @@ -319,7 +310,7 @@ static ssize_t keyCode_top_write(struct file *file, const char __user *page, siz if (sscanf(buf, "%d", &data) != 1) return t; - if (data < 600 || data > 603) + if (data < KEYCODE_BASE || data >= (KEYCODE_BASE + TOTAL_KEYCODES)) return t; keyCode_slider_top = data; @@ -363,7 +354,7 @@ static ssize_t keyCode_middle_write(struct file *file, const char __user *page, if (sscanf(buf, "%d", &data) != 1) return t; - if (data < 600 || data > 603) + if (data < KEYCODE_BASE || data >= (KEYCODE_BASE + TOTAL_KEYCODES)) return t; keyCode_slider_middle = data; @@ -407,7 +398,7 @@ static ssize_t keyCode_bottom_write(struct file *file, const char __user *page, if (sscanf(buf, "%d", &data) != 1) return t; - if (data < 600 || data > 603) + if (data < KEYCODE_BASE || data >= (KEYCODE_BASE + TOTAL_KEYCODES)) return t; keyCode_slider_bottom = data; @@ -437,6 +428,7 @@ static int tristate_dev_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct proc_dir_entry *procdir; int error=0; + int i; //void __iomem *cfg_reg; @@ -464,10 +456,8 @@ static int tristate_dev_probe(struct platform_device *pdev) switch_data->input->name = DRV_NAME; switch_data->input->dev.parent = &pdev->dev; set_bit(EV_KEY, switch_data->input->evbit); - set_bit(MODE_TOTAL_SILENCE, switch_data->input->keybit); - set_bit(MODE_ALARMS_ONLY, switch_data->input->keybit); - set_bit(MODE_PRIORITY_ONLY, switch_data->input->keybit); - set_bit(MODE_NONE, switch_data->input->keybit); + for (i = KEYCODE_BASE; i < KEYCODE_BASE + TOTAL_KEYCODES; i++) + set_bit(i, switch_data->input->keybit); input_set_drvdata(switch_data->input, switch_data); error = input_register_device(switch_data->input); if (error) { |
