Commit 162c7d8c authored by Marc Dietrich's avatar Marc Dietrich Committed by Greg Kroah-Hartman

staging: nvec: coding style fixes / add copyright notice

This patch fixes coding style and adds copyright notices.
Signed-off-by: default avatarMarc Dietrich <marvin24@gmx.de>
[jak@jak-linux.org: Merge later cleanup into that patch]
Signed-off-by: default avatarJulian Andres Klode <jak@jak-linux.org>
Acked-by: default avatarMarc Dietrich <marvin24@gmx.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7974035c
ToDo list (incomplete, unordered) ToDo list (incomplete, unordered)
- convert mouse, keyboard, and power to platform devices
- add copyright / driver author / license
- add compile as module support - add compile as module support
- move nvec devices to mfd cells?
- adjust to kernel style
- fix clk usage - fix clk usage
should not be using clk_get_sys(), but clk_get(&pdev->dev, conn) should not be using clk_get_sys(), but clk_get(&pdev->dev, conn)
where conn is either NULL if the device only has one clock, or where conn is either NULL if the device only has one clock, or
the device specific name if it has multiple clocks. the device specific name if it has multiple clocks.
- move half of the nvec init stuff to i2c-tegra.c
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
*/ */
static unsigned short code_tab_102us[] = { static unsigned short code_tab_102us[] = {
KEY_GRAVE, // 0x00 /* 0x00 */
KEY_GRAVE,
KEY_ESC, KEY_ESC,
KEY_1, KEY_1,
KEY_2, KEY_2,
...@@ -38,7 +39,8 @@ static unsigned short code_tab_102us[] = { ...@@ -38,7 +39,8 @@ static unsigned short code_tab_102us[] = {
KEY_EQUAL, KEY_EQUAL,
KEY_BACKSPACE, KEY_BACKSPACE,
KEY_TAB, KEY_TAB,
KEY_Q, // 0x10 /* 0x10 */
KEY_Q,
KEY_W, KEY_W,
KEY_E, KEY_E,
KEY_R, KEY_R,
...@@ -54,7 +56,8 @@ static unsigned short code_tab_102us[] = { ...@@ -54,7 +56,8 @@ static unsigned short code_tab_102us[] = {
KEY_LEFTCTRL, KEY_LEFTCTRL,
KEY_A, KEY_A,
KEY_S, KEY_S,
KEY_D, // 0x20 /* 0x20 */
KEY_D,
KEY_F, KEY_F,
KEY_G, KEY_G,
KEY_H, KEY_H,
...@@ -70,7 +73,8 @@ static unsigned short code_tab_102us[] = { ...@@ -70,7 +73,8 @@ static unsigned short code_tab_102us[] = {
KEY_X, KEY_X,
KEY_C, KEY_C,
KEY_V, KEY_V,
KEY_B, // 0x30 /* 0x30 */
KEY_B,
KEY_N, KEY_N,
KEY_M, KEY_M,
KEY_COMMA, KEY_COMMA,
...@@ -86,13 +90,15 @@ static unsigned short code_tab_102us[] = { ...@@ -86,13 +90,15 @@ static unsigned short code_tab_102us[] = {
KEY_F3, KEY_F3,
KEY_F4, KEY_F4,
KEY_F5, KEY_F5,
KEY_F6, // 0x40 /* 0x40 */
KEY_F6,
KEY_F7, KEY_F7,
KEY_F8, KEY_F8,
KEY_F9, KEY_F9,
KEY_F10, KEY_F10,
KEY_FN, KEY_FN,
0, //VK_SCROLL /* VK_SCROLL */
0,
KEY_KP7, KEY_KP7,
KEY_KP8, KEY_KP8,
KEY_KP9, KEY_KP9,
...@@ -102,26 +108,30 @@ static unsigned short code_tab_102us[] = { ...@@ -102,26 +108,30 @@ static unsigned short code_tab_102us[] = {
KEY_KP6, KEY_KP6,
KEY_KPPLUS, KEY_KPPLUS,
KEY_KP1, KEY_KP1,
KEY_KP2, // 0x50 /* 0x50 */
KEY_KP2,
KEY_KP3, KEY_KP3,
KEY_KP0, KEY_KP0,
KEY_KPDOT, KEY_KPDOT,
KEY_MENU, //VK_SNAPSHOT /* VK_SNAPSHOT */
KEY_MENU,
KEY_POWER, KEY_POWER,
KEY_102ND, //VK_OEM_102 henry+ 0x2B (43) BACKSLASH have been used,change to use 0X56 (86) /* VK_OEM_102 */
KEY_F11, //VK_F11 KEY_102ND,
KEY_F12, //VK_F12 KEY_F11,
KEY_F12,
0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
/* 0x60 */
0, 0,
0, // 60
0, 0,
0, 0,
KEY_SEARCH, // add search key map KEY_SEARCH,
0, 0,
0, 0,
0, 0,
...@@ -134,10 +144,11 @@ static unsigned short code_tab_102us[] = { ...@@ -134,10 +144,11 @@ static unsigned short code_tab_102us[] = {
0, 0,
0, 0,
0, 0,
0, // 70 /* 0x70 */
0, 0,
0, 0,
KEY_KP5, //73 for JP keyboard '\' key, report 0x4c 0,
KEY_KP5,
0, 0,
0, 0,
0, 0,
...@@ -147,7 +158,7 @@ static unsigned short code_tab_102us[] = { ...@@ -147,7 +158,7 @@ static unsigned short code_tab_102us[] = {
0, 0,
0, 0,
0, 0,
KEY_KP9, //7d for JP keyboard '|' key, report 0x49 KEY_KP9,
}; };
static unsigned short extcode_tab_us102[] = { static unsigned short extcode_tab_us102[] = {
...@@ -167,72 +178,93 @@ static unsigned short extcode_tab_us102[] = { ...@@ -167,72 +178,93 @@ static unsigned short extcode_tab_us102[] = {
0, 0,
0, 0,
0, 0,
0, // 0xE0 0x10 /* 0x10 */
0,
0,
0,
0,
0,
0,
0,
0,
0,
/* VK_MEDIA_NEXT_TRACK */
0,
0,
0,
/* VK_RETURN */
0,
KEY_RIGHTCTRL,
0, 0,
0, 0,
/* 0x20 */
KEY_MUTE,
/* VK_LAUNCH_APP1 */
0, 0,
/* VK_MEDIA_PLAY_PAUSE */
0, 0,
0, 0,
/* VK_MEDIA_STOP */
0, 0,
0, 0,
0, 0,
0, //VK_MEDIA_NEXT_TRACK,
0, 0,
0, 0,
0, //VK_RETURN,
KEY_RIGHTCTRL, //VK_RCONTROL,
0, 0,
0, 0,
KEY_MUTE, // 0xE0 0x20
0, //VK_LAUNCH_APP1
0, //VK_MEDIA_PLAY_PAUSE
0, 0,
0, //VK_MEDIA_STOP
0, 0,
0, 0,
0, 0,
0, 0,
/* 0x30 */
KEY_VOLUMEUP,
0, 0,
/* VK_BROWSER_HOME */
0, 0,
0, 0,
0, 0,
/* VK_DIVIDE */
KEY_KPSLASH,
0, 0,
/* VK_SNAPSHOT */
KEY_SYSRQ,
/* VK_RMENU */
KEY_RIGHTALT,
/* VK_OEM_NV_BACKLIGHT_UP */
0, 0,
/* VK_OEM_NV_BACKLIGHT_DN */
0, 0,
KEY_VOLUMEUP, // 0xE0 0x30 /* VK_OEM_NV_BACKLIGHT_AUTOTOGGLE */
0,
/* VK_OEM_NV_POWER_INFO */
0,
/* VK_OEM_NV_WIFI_TOGGLE */
0,
/* VK_OEM_NV_DISPLAY_SELECT */
0,
/* VK_OEM_NV_AIRPLANE_TOGGLE */
0,
/* 0x40 */
0,
KEY_LEFT,
0, 0,
0, //VK_BROWSER_HOME
0, 0,
0, 0,
KEY_KPSLASH, //VK_DIVIDE
0, 0,
KEY_SYSRQ, //VK_SNAPSHOT
KEY_RIGHTALT, //VK_RMENU
0, //VK_OEM_NV_BACKLIGHT_UP
0, //VK_OEM_NV_BACKLIGHT_DN
0, //VK_OEM_NV_BACKLIGHT_AUTOTOGGLE
0, //VK_OEM_NV_POWER_INFO
0, //VK_OEM_NV_WIFI_TOGGLE
0, //VK_OEM_NV_DISPLAY_SELECT
0, //VK_OEM_NV_AIRPLANE_TOGGLE
0, //0xE0 0x40
KEY_LEFT, //VK_OEM_NV_RESERVED henry+ for JP keyboard
0, //VK_OEM_NV_RESERVED
0, //VK_OEM_NV_RESERVED
0, //VK_OEM_NV_RESERVED
0, //VK_OEM_NV_RESERVED
KEY_CANCEL, KEY_CANCEL,
KEY_HOME, KEY_HOME,
KEY_UP, KEY_UP,
KEY_PAGEUP, //VK_PRIOR KEY_PAGEUP,
0, 0,
KEY_LEFT, KEY_LEFT,
0, 0,
KEY_RIGHT, KEY_RIGHT,
0, 0,
KEY_END, KEY_END,
KEY_DOWN, // 0xE0 0x50 /* 0x50 */
KEY_PAGEDOWN, //VK_NEXT KEY_DOWN,
KEY_PAGEDOWN,
KEY_INSERT, KEY_INSERT,
KEY_DELETE, KEY_DELETE,
0, 0,
...@@ -242,25 +274,34 @@ static unsigned short extcode_tab_us102[] = { ...@@ -242,25 +274,34 @@ static unsigned short extcode_tab_us102[] = {
0, 0,
0, 0,
0, 0,
KEY_LEFTMETA, //VK_LWIN KEY_LEFTMETA,
0, //VK_RWIN 0,
KEY_ESC, //VK_APPS KEY_ESC,
KEY_KPMINUS, //for power button workaround KEY_KPMINUS,
0,
0,
0,
0,
0,
0,
/* VK_BROWSER_SEARCH */
0,
/* VK_BROWSER_FAVORITES */
0,
/* VK_BROWSER_REFRESH */
0,
/* VK_BROWSER_STOP */
0, 0,
/* VK_BROWSER_FORWARD */
0, 0,
/* VK_BROWSER_BACK */
0, 0,
/* VK_LAUNCH_APP2 */
0, 0,
/* VK_LAUNCH_MAIL */
0, 0,
/* VK_LAUNCH_MEDIA_SELECT */
0, 0,
0, //VK_BROWSER_SEARCH
0, //VK_BROWSER_FAVORITES
0, //VK_BROWSER_REFRESH
0, //VK_BROWSER_STOP
0, //VK_BROWSER_FORWARD
0, //VK_BROWSER_BACK
0, //VK_LAUNCH_APP2
0, //VK_LAUNCH_MAIL
0, //VK_LAUNCH_MEDIA_SELECT
}; };
static unsigned short* code_tabs[] = {code_tab_102us, extcode_tab_us102 }; static unsigned short *code_tabs[] = { code_tab_102us, extcode_tab_us102 };
This diff is collapsed.
/*
* NVEC: NVIDIA compliant embedded controller interface
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
*
* Authors: Pierre-Hugues Husson <phhusson@free.fr>
* Ilya Petrov <ilya.muromec@gmail.com>
* Marc Dietrich <marvin24@gmx.de>
*
* 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.
*
*/
#ifndef __LINUX_MFD_NVEC #ifndef __LINUX_MFD_NVEC
#define __LINUX_MFD_NVEC #define __LINUX_MFD_NVEC
...@@ -17,7 +32,7 @@ typedef enum { ...@@ -17,7 +32,7 @@ typedef enum {
} how_care; } how_care;
typedef enum { typedef enum {
NVEC_SYS=1, NVEC_SYS = 1,
NVEC_BAT, NVEC_BAT,
NVEC_KBD = 5, NVEC_KBD = 5,
NVEC_PS2, NVEC_PS2,
...@@ -64,22 +79,27 @@ struct nvec_chip { ...@@ -64,22 +79,27 @@ struct nvec_chip {
struct work_struct rx_work, tx_work; struct work_struct rx_work, tx_work;
struct nvec_msg *rx, *tx; struct nvec_msg *rx, *tx;
/* sync write stuff */ /* sync write stuff */
struct semaphore sync_write_mutex; struct semaphore sync_write_mutex;
struct completion sync_write; struct completion sync_write;
u16 sync_write_pending; u16 sync_write_pending;
struct nvec_msg *last_sync_msg; struct nvec_msg *last_sync_msg;
}; };
extern void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size); extern void nvec_write_async(struct nvec_chip *nvec, const unsigned char *data,
short size);
extern int nvec_register_notifier(struct nvec_chip *nvec, extern int nvec_register_notifier(struct nvec_chip *nvec,
struct notifier_block *nb, unsigned int events); struct notifier_block *nb,
unsigned int events);
extern int nvec_unregister_notifier(struct device *dev, extern int nvec_unregister_notifier(struct device *dev,
struct notifier_block *nb, unsigned int events); struct notifier_block *nb,
unsigned int events);
const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size, how_care care_resp, void (*rt_handler)(unsigned char *data)); const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size,
how_care care_resp,
void (*rt_handler) (unsigned char *data));
#define I2C_CNFG 0x00 #define I2C_CNFG 0x00
#define I2C_CNFG_PACKET_MODE_EN (1<<10) #define I2C_CNFG_PACKET_MODE_EN (1<<10)
......
/*
* nvec_kbd: keyboard driver for a NVIDIA compliant embedded controller
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
*
* Authors: Pierre-Hugues Husson <phhusson@free.fr>
* Marc Dietrich <marvin24@gmx.de>
*
* 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/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include "nvec-keytable.h" #include "nvec-keytable.h"
#include "nvec.h" #include "nvec.h"
...@@ -38,7 +53,8 @@ static int nvec_keys_notifier(struct notifier_block *nb, ...@@ -38,7 +53,8 @@ static int nvec_keys_notifier(struct notifier_block *nb,
code = msg[1] & 0x7f; code = msg[1] & 0x7f;
state = msg[1] & 0x80; state = msg[1] & 0x80;
input_report_key(keys_dev.input, code_tabs[_size][code], !state); input_report_key(keys_dev.input, code_tabs[_size][code],
!state);
input_sync(keys_dev.input); input_sync(keys_dev.input);
return NOTIFY_STOP; return NOTIFY_STOP;
...@@ -138,3 +154,7 @@ static int __init nvec_kbd_init(void) ...@@ -138,3 +154,7 @@ static int __init nvec_kbd_init(void)
} }
module_init(nvec_kbd_init); module_init(nvec_kbd_init);
MODULE_AUTHOR("Marc Dietrich <marvin24@gmx.de>");
MODULE_DESCRIPTION("NVEC keyboard driver");
MODULE_LICENSE("GPL");
/*
* nvec_power: power supply driver for a NVIDIA compliant embedded controller
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
*
* Authors: Ilya Petrov <ilya.muromec@gmail.com>
* Marc Dietrich <marvin24@gmx.de>
*
* 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/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -5,10 +19,10 @@ ...@@ -5,10 +19,10 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/delay.h> #include <linux/delay.h>
#include "nvec.h" #include "nvec.h"
struct nvec_power struct nvec_power {
{
struct notifier_block notifier; struct notifier_block notifier;
struct delayed_work poller; struct delayed_work poller;
struct nvec_chip *nvec; struct nvec_chip *nvec;
...@@ -58,7 +72,8 @@ struct bat_response { ...@@ -58,7 +72,8 @@ struct bat_response {
u8 length; u8 length;
u8 sub_type; u8 sub_type;
u8 status; u8 status;
union { /* payload */ /* payload */
union {
char plc[30]; char plc[30];
u16 plu; u16 plu;
s16 pls; s16 pls;
...@@ -71,16 +86,15 @@ static struct power_supply nvec_psy; ...@@ -71,16 +86,15 @@ static struct power_supply nvec_psy;
static int nvec_power_notifier(struct notifier_block *nb, static int nvec_power_notifier(struct notifier_block *nb,
unsigned long event_type, void *data) unsigned long event_type, void *data)
{ {
struct nvec_power *power = container_of(nb, struct nvec_power, notifier); struct nvec_power *power =
container_of(nb, struct nvec_power, notifier);
struct bat_response *res = (struct bat_response *)data; struct bat_response *res = (struct bat_response *)data;
if (event_type != NVEC_SYS) if (event_type != NVEC_SYS)
return NOTIFY_DONE; return NOTIFY_DONE;
if(res->sub_type == 0) if (res->sub_type == 0) {
{ if (power->on != res->plu) {
if (power->on != res->plu)
{
power->on = res->plu; power->on = res->plu;
power_supply_changed(&nvec_psy); power_supply_changed(&nvec_psy);
} }
...@@ -89,8 +103,7 @@ static int nvec_power_notifier(struct notifier_block *nb, ...@@ -89,8 +103,7 @@ static int nvec_power_notifier(struct notifier_block *nb,
return NOTIFY_OK; return NOTIFY_OK;
} }
static const int bat_init[] = static const int bat_init[] = {
{
LAST_FULL_CHARGE_CAPACITY, DESIGN_CAPACITY, CRITICAL_CAPACITY, LAST_FULL_CHARGE_CAPACITY, DESIGN_CAPACITY, CRITICAL_CAPACITY,
MANUFACTURER, MODEL, TYPE, MANUFACTURER, MODEL, TYPE,
}; };
...@@ -100,8 +113,7 @@ static void get_bat_mfg_data(struct nvec_power *power) ...@@ -100,8 +113,7 @@ static void get_bat_mfg_data(struct nvec_power *power)
int i; int i;
char buf[] = { '\x02', '\x00' }; char buf[] = { '\x02', '\x00' };
for (i = 0; i < ARRAY_SIZE(bat_init); i++) for (i = 0; i < ARRAY_SIZE(bat_init); i++) {
{
buf[1] = bat_init[i]; buf[1] = bat_init[i];
nvec_write_async(power->nvec, buf, 2); nvec_write_async(power->nvec, buf, 2);
} }
...@@ -110,36 +122,36 @@ static void get_bat_mfg_data(struct nvec_power *power) ...@@ -110,36 +122,36 @@ static void get_bat_mfg_data(struct nvec_power *power)
static int nvec_power_bat_notifier(struct notifier_block *nb, static int nvec_power_bat_notifier(struct notifier_block *nb,
unsigned long event_type, void *data) unsigned long event_type, void *data)
{ {
struct nvec_power *power = container_of(nb, struct nvec_power, notifier); struct nvec_power *power =
container_of(nb, struct nvec_power, notifier);
struct bat_response *res = (struct bat_response *)data; struct bat_response *res = (struct bat_response *)data;
int status_changed = 0; int status_changed = 0;
if (event_type != NVEC_BAT) if (event_type != NVEC_BAT)
return NOTIFY_DONE; return NOTIFY_DONE;
switch(res->sub_type) switch (res->sub_type) {
{
case SLOT_STATUS: case SLOT_STATUS:
if (res->plc[0] & 1) if (res->plc[0] & 1) {
{ if (power->bat_present == 0) {
if (power->bat_present == 0)
{
status_changed = 1; status_changed = 1;
get_bat_mfg_data(power); get_bat_mfg_data(power);
} }
power->bat_present = 1; power->bat_present = 1;
switch ((res->plc[0] >> 1) & 3) switch ((res->plc[0] >> 1) & 3) {
{
case 0: case 0:
power->bat_status = POWER_SUPPLY_STATUS_NOT_CHARGING; power->bat_status =
POWER_SUPPLY_STATUS_NOT_CHARGING;
break; break;
case 1: case 1:
power->bat_status = POWER_SUPPLY_STATUS_CHARGING; power->bat_status =
POWER_SUPPLY_STATUS_CHARGING;
break; break;
case 2: case 2:
power->bat_status = POWER_SUPPLY_STATUS_DISCHARGING; power->bat_status =
POWER_SUPPLY_STATUS_DISCHARGING;
break; break;
default: default:
power->bat_status = POWER_SUPPLY_STATUS_UNKNOWN; power->bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
...@@ -183,16 +195,16 @@ static int nvec_power_bat_notifier(struct notifier_block *nb, ...@@ -183,16 +195,16 @@ static int nvec_power_bat_notifier(struct notifier_block *nb,
power->bat_temperature = res->plu - 2732; power->bat_temperature = res->plu - 2732;
break; break;
case MANUFACTURER: case MANUFACTURER:
memcpy(power->bat_manu, &res->plc, res->length-2); memcpy(power->bat_manu, &res->plc, res->length - 2);
power->bat_model[res->length-2] = '\0'; power->bat_model[res->length - 2] = '\0';
break; break;
case MODEL: case MODEL:
memcpy(power->bat_model, &res->plc, res->length-2); memcpy(power->bat_model, &res->plc, res->length - 2);
power->bat_model[res->length-2] = '\0'; power->bat_model[res->length - 2] = '\0';
break; break;
case TYPE: case TYPE:
memcpy(power->bat_type, &res->plc, res->length-2); memcpy(power->bat_type, &res->plc, res->length - 2);
power->bat_type[res->length-2] = '\0'; power->bat_type[res->length - 2] = '\0';
/* this differs a little from the spec /* this differs a little from the spec
fill in more if you find some */ fill in more if you find some */
if (!strncmp(power->bat_type, "Li", 30)) if (!strncmp(power->bat_type, "Li", 30))
...@@ -228,8 +240,7 @@ static int nvec_battery_get_property(struct power_supply *psy, ...@@ -228,8 +240,7 @@ static int nvec_battery_get_property(struct power_supply *psy,
{ {
struct nvec_power *power = dev_get_drvdata(psy->dev->parent); struct nvec_power *power = dev_get_drvdata(psy->dev->parent);
switch(psp) switch (psp) {
{
case POWER_SUPPLY_PROP_STATUS: case POWER_SUPPLY_PROP_STATUS:
val->intval = power->bat_status; val->intval = power->bat_status;
break; break;
...@@ -327,9 +338,8 @@ static struct power_supply nvec_psy = { ...@@ -327,9 +338,8 @@ static struct power_supply nvec_psy = {
.get_property = nvec_power_get_property, .get_property = nvec_power_get_property,
}; };
static int counter = 0; static int counter;
static int const bat_iter[] = static int const bat_iter[] = {
{
SLOT_STATUS, VOLTAGE, CURRENT, CAPACITY_REMAINING, SLOT_STATUS, VOLTAGE, CURRENT, CAPACITY_REMAINING,
#ifdef EC_FULL_DIAG #ifdef EC_FULL_DIAG
AVERAGE_CURRENT, TEMPERATURE, TIME_REMAINING, AVERAGE_CURRENT, TEMPERATURE, TIME_REMAINING,
...@@ -355,15 +365,14 @@ static void nvec_power_poll(struct work_struct *work) ...@@ -355,15 +365,14 @@ static void nvec_power_poll(struct work_struct *work)
buf[1] = bat_iter[counter++]; buf[1] = bat_iter[counter++];
nvec_write_async(power->nvec, buf, 2); nvec_write_async(power->nvec, buf, 2);
// printk("%02x %02x\n", buf[0], buf[1]);
schedule_delayed_work(to_delayed_work(work), msecs_to_jiffies(5000)); schedule_delayed_work(to_delayed_work(work), msecs_to_jiffies(5000));
}; };
static int __devinit nvec_power_probe(struct platform_device *pdev) static int __devinit nvec_power_probe(struct platform_device *pdev)
{ {
struct power_supply *psy; struct power_supply *psy;
struct nvec_power *power = kzalloc(sizeof(struct nvec_power), GFP_NOWAIT); struct nvec_power *power =
kzalloc(sizeof(struct nvec_power), GFP_NOWAIT);
struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent); struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
dev_set_drvdata(&pdev->dev, power); dev_set_drvdata(&pdev->dev, power);
...@@ -398,7 +407,6 @@ static int __devinit nvec_power_probe(struct platform_device *pdev) ...@@ -398,7 +407,6 @@ static int __devinit nvec_power_probe(struct platform_device *pdev)
static struct platform_driver nvec_power_driver = { static struct platform_driver nvec_power_driver = {
.probe = nvec_power_probe, .probe = nvec_power_probe,
// .remove = __devexit_p(nvec_power_remove),
.driver = { .driver = {
.name = "nvec-power", .name = "nvec-power",
.owner = THIS_MODULE, .owner = THIS_MODULE,
......
/*
* nvec_ps2: mouse driver for a NVIDIA compliant embedded controller
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
*
* Authors: Pierre-Hugues Husson <phhusson@free.fr>
* Ilya Petrov <ilya.muromec@gmail.com>
* Marc Dietrich <marvin24@gmx.de>
*
* 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/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/serio.h> #include <linux/serio.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include "nvec.h" #include "nvec.h"
#define START_STREAMING {'\x06','\x03','\x01'} #define START_STREAMING {'\x06', '\x03', '\x01'}
#define STOP_STREAMING {'\x06','\x04'} #define STOP_STREAMING {'\x06', '\x04'}
#define SEND_COMMAND {'\x06','\x01','\xf4','\x01'} #define SEND_COMMAND {'\x06', '\x01', '\xf4', '\x01'}
struct nvec_ps2 static const unsigned char MOUSE_RESET[] = {'\x06', '\x01', '\xff', '\x03'};
{
struct nvec_ps2 {
struct serio *ser_dev; struct serio *ser_dev;
struct notifier_block notifier; struct notifier_block notifier;
struct nvec_chip *nvec; struct nvec_chip *nvec;
...@@ -31,12 +48,6 @@ static void ps2_stopstreaming(struct serio *ser_dev) ...@@ -31,12 +48,6 @@ static void ps2_stopstreaming(struct serio *ser_dev)
nvec_write_async(ps2_dev.nvec, buf, sizeof(buf)); nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
} }
/* is this really needed?
static void nvec_resp_handler(unsigned char *data) {
serio_interrupt(ser_dev, data[4], 0);
}
*/
static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd) static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
{ {
unsigned char buf[] = SEND_COMMAND; unsigned char buf[] = SEND_COMMAND;
...@@ -62,14 +73,12 @@ static int nvec_ps2_notifier(struct notifier_block *nb, ...@@ -62,14 +73,12 @@ static int nvec_ps2_notifier(struct notifier_block *nb,
case NVEC_PS2: case NVEC_PS2:
if (msg[2] == 1) if (msg[2] == 1)
for(i = 0; i < (msg[1] - 2); i++) for (i = 0; i < (msg[1] - 2); i++)
serio_interrupt(ps2_dev.ser_dev, msg[i+4], 0); serio_interrupt(ps2_dev.ser_dev, msg[i + 4], 0);
else if (msg[1] != 2) /* !ack */ else if (msg[1] != 2) { /* !ack */
{ print_hex_dump(KERN_WARNING, "unhandled mouse event: ",
printk("nvec_ps2: unhandled mouse event "); DUMP_PREFIX_NONE, 16, 1,
for(i = 0; i <= (msg[1]+1); i++) msg, msg[1] + 2, true);
printk("%02x ", msg[i]);
printk(".\n");
} }
return NOTIFY_STOP; return NOTIFY_STOP;
...@@ -78,19 +87,18 @@ static int nvec_ps2_notifier(struct notifier_block *nb, ...@@ -78,19 +87,18 @@ static int nvec_ps2_notifier(struct notifier_block *nb,
return NOTIFY_DONE; return NOTIFY_DONE;
} }
static int __devinit nvec_mouse_probe(struct platform_device *pdev) static int __devinit nvec_mouse_probe(struct platform_device *pdev)
{ {
struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent); struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
struct serio *ser_dev = kzalloc(sizeof(struct serio), GFP_KERNEL); struct serio *ser_dev = kzalloc(sizeof(struct serio), GFP_KERNEL);
ser_dev->id.type=SERIO_8042; ser_dev->id.type = SERIO_8042;
ser_dev->write=ps2_sendcommand; ser_dev->write = ps2_sendcommand;
ser_dev->open=ps2_startstreaming; ser_dev->open = ps2_startstreaming;
ser_dev->close=ps2_stopstreaming; ser_dev->close = ps2_stopstreaming;
strlcpy(ser_dev->name, "NVEC PS2", sizeof(ser_dev->name)); strlcpy(ser_dev->name, "nvec mouse", sizeof(ser_dev->name));
strlcpy(ser_dev->phys, "NVEC I2C slave", sizeof(ser_dev->phys)); strlcpy(ser_dev->phys, "nvec", sizeof(ser_dev->phys));
ps2_dev.ser_dev = ser_dev; ps2_dev.ser_dev = ser_dev;
ps2_dev.notifier.notifier_call = nvec_ps2_notifier; ps2_dev.notifier.notifier_call = nvec_ps2_notifier;
...@@ -100,7 +108,7 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev) ...@@ -100,7 +108,7 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev)
serio_register_port(ser_dev); serio_register_port(ser_dev);
/* mouse reset */ /* mouse reset */
nvec_write_async(nvec, "\x06\x01\xff\x03", 4); nvec_write_async(nvec, MOUSE_RESET, 4);
return 0; return 0;
} }
...@@ -119,3 +127,7 @@ static int __init nvec_mouse_init(void) ...@@ -119,3 +127,7 @@ static int __init nvec_mouse_init(void)
} }
module_init(nvec_mouse_init); module_init(nvec_mouse_init);
MODULE_DESCRIPTION("NVEC mouse driver");
MODULE_AUTHOR("Marc Dietrich <marvin24@gmx.de>");
MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment