[PATCH 5/7] staging: nvec: cleanup the string mess
Marc Dietrich
marvin24 at gmx.de
Thu Jun 14 21:57:39 UTC 2012
Use the newly introduced NVEC_CALL to cleanup the various nvec
command strings in the nvec driver.
Signed-off-by: Marc Dietrich <marvin24 at gmx.de>
---
drivers/staging/nvec/nvec.c | 39 +++++++++++++++--------------
drivers/staging/nvec/nvec.h | 49 ++++++++++++++++++++++++++++++++++++-
drivers/staging/nvec/nvec_kbd.c | 31 ++++++++++++-----------
drivers/staging/nvec/nvec_leds.c | 5 +---
drivers/staging/nvec/nvec_power.c | 12 ++++-----
drivers/staging/nvec/nvec_ps2.c | 25 ++++++-------------
6 files changed, 98 insertions(+), 63 deletions(-)
diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
index a2d65f0..dd8b317 100644
--- a/drivers/staging/nvec/nvec.c
+++ b/drivers/staging/nvec/nvec.c
@@ -73,10 +73,6 @@ enum nvec_msg_category {
NVEC_MSG_TX,
};
-static const unsigned char EC_DISABLE_EVENT_REPORTING[3] = "\x04\x00\x00";
-static const unsigned char EC_ENABLE_EVENT_REPORTING[3] = "\x04\x00\x01";
-static const unsigned char EC_GET_FIRMWARE_VERSION[2] = "\x07\x15";
-
static struct nvec_chip *nvec_power_handle;
static struct mfd_cell nvec_devices[] = {
@@ -711,8 +707,11 @@ static void nvec_disable_i2c_slave(struct nvec_chip *nvec)
static void nvec_power_off(void)
{
- nvec_write_async(nvec_power_handle, EC_DISABLE_EVENT_REPORTING, 3);
- nvec_write_async(nvec_power_handle, "\x04\x01", 2);
+ /* disable event reporting */
+ NVEC_CALL(nvec_power_handle, SLEEP, GLOBAL_EVENTS, NVEC_DISABLE);
+
+ /* AP power down */
+ NVEC_CALL(nvec_power_handle, SLEEP, AP_PWR_DOWN);
}
static int __devinit tegra_nvec_probe(struct platform_device *pdev)
@@ -818,8 +817,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
/* enable event reporting */
- nvec_write_async(nvec, EC_ENABLE_EVENT_REPORTING,
- sizeof(EC_ENABLE_EVENT_REPORTING));
+ NVEC_CALL(nvec, SLEEP, GLOBAL_EVENTS, NVEC_ENABLE);
nvec->nvec_status_notifier.notifier_call = nvec_status_notifier;
nvec_register_notifier(nvec, &nvec->nvec_status_notifier, 0);
@@ -828,9 +826,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
pm_power_off = nvec_power_off;
/* Get Firmware Version */
- msg = nvec_write_sync(nvec, EC_GET_FIRMWARE_VERSION,
- sizeof(EC_GET_FIRMWARE_VERSION));
-
+ msg = NVEC_SYNC_CALL(nvec, CNTL, READ_FW_VER);
if (msg) {
dev_warn(nvec->dev, "ec firmware version %02x.%02x.%02x / %02x\n",
msg->data[4], msg->data[5], msg->data[6], msg->data[7]);
@@ -843,14 +839,14 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
if (ret)
dev_err(nvec->dev, "error adding subdevices\n");
- /* unmute speakers? */
- nvec_write_async(nvec, "\x0d\x10\x59\x95", 4);
+ /* unmute speaker amplifier */
+ NVEC_CALL(nvec, OEM0, 10h, 0x59, 0x95);
/* enable lid switch event */
- nvec_write_async(nvec, "\x01\x01\x01\x00\x00\x02\x00", 7);
+ NVEC_CALL(nvec, SYS, CNF_EVENT_REPORTING, NVEC_ENABLE, 0, 0, 0x02, 0);
/* enable power button event */
- nvec_write_async(nvec, "\x01\x01\x01\x00\x00\x80\x00", 7);
+ NVEC_CALL(nvec, SYS, CNF_EVENT_REPORTING, NVEC_ENABLE, 0, 0, 0x80, 0);
return 0;
}
@@ -859,7 +855,9 @@ static int __devexit tegra_nvec_remove(struct platform_device *pdev)
{
struct nvec_chip *nvec = platform_get_drvdata(pdev);
- nvec_write_async(nvec, EC_DISABLE_EVENT_REPORTING, 3);
+ /* disable global event reporting */
+ NVEC_CALL(nvec, SLEEP, GLOBAL_EVENTS, NVEC_DISABLE);
+
mfd_remove_devices(nvec->dev);
destroy_workqueue(nvec->wq);
@@ -876,9 +874,9 @@ static int nvec_suspend(struct device *dev)
dev_dbg(nvec->dev, "suspending\n");
/* keep these sync or you'll break suspend */
- msg = nvec_write_sync(nvec, EC_DISABLE_EVENT_REPORTING, 3);
+ msg = NVEC_SYNC_CALL(nvec, SLEEP, GLOBAL_EVENTS, NVEC_DISABLE);
nvec_msg_free(nvec, msg);
- msg = nvec_write_sync(nvec, "\x04\x02", 2);
+ msg = NVEC_SYNC_CALL(nvec, SLEEP, AP_SUSPEND);
nvec_msg_free(nvec, msg);
nvec_disable_i2c_slave(nvec);
@@ -892,8 +890,11 @@ static int nvec_resume(struct device *dev)
struct nvec_chip *nvec = platform_get_drvdata(pdev);
dev_dbg(nvec->dev, "resuming\n");
+
tegra_init_i2c_slave(nvec);
- nvec_write_async(nvec, EC_ENABLE_EVENT_REPORTING, 3);
+
+ /* enable global event reporting */
+ NVEC_CALL(nvec, SLEEP, GLOBAL_EVENTS, NVEC_ENABLE);
return 0;
}
diff --git a/drivers/staging/nvec/nvec.h b/drivers/staging/nvec/nvec.h
index 3c56875..ae5e574 100644
--- a/drivers/staging/nvec/nvec.h
+++ b/drivers/staging/nvec/nvec.h
@@ -59,6 +59,8 @@ enum nvec_event_size {
* enum nvec_msg_type - The type of a message
* @NVEC_SYS: A system request/response
* @NVEC_BAT: A battery request/response
+ * @NVEC_GPIO: A gpio request/response
+ * @NVEC_SLEEP: A sleep request/response
* @NVEC_KBD: A keyboard request/response
* @NVEC_PS2: A mouse request/response
* @NVEC_CNTL: A EC control request/response
@@ -71,13 +73,58 @@ enum nvec_event_size {
enum nvec_msg_type {
NVEC_SYS = 1,
NVEC_BAT,
- NVEC_KBD = 5,
+ NVEC_GPIO,
+ NVEC_SLEEP,
+ NVEC_KBD,
NVEC_PS2,
NVEC_CNTL,
+ NVEC_OEM0 = 0x0d,
NVEC_KB_EVT = 0x80,
NVEC_PS2_EVT,
};
+enum nvec_bool {
+ NVEC_DISABLE,
+ NVEC_ENABLE,
+};
+
+enum nvec_sys_subcmd {
+ NVEC_SYS_GET_SYSTEM_STATUS,
+ NVEC_SYS_CNF_EVENT_REPORTING,
+ NVEC_SYS_ACK_SYSTEM_STATUS,
+ NVEC_SYS_CNF_WAKE = 0xfd,
+};
+
+enum nvec_sleep_subcmd {
+ NVEC_SLEEP_GLOBAL_EVENTS,
+ NVEC_SLEEP_AP_PWR_DOWN,
+ NVEC_SLEEP_AP_SUSPEND,
+};
+
+enum nvec_cntl_subcmd {
+ NVEC_CNTL_READ_FW_VER = 0x15,
+};
+
+enum nvec_kbd_subcmd {
+ NVEC_KBD_CNF_WAKE = 3,
+ NVEC_KBD_CNF_WAKE_KEY_REPORTING,
+ NVEC_KBD_SET_LEDS = 0xed,
+ NVEC_KBD_KBD_ENABLE = 0xf4,
+};
+
+enum nvec_ps2_subcmd {
+ NVEC_PS2_SEND_CMD = 1,
+ NVEC_PS2_RECEIVE,
+ NVEC_PS2_AUTO_RECEIVE,
+ NVEC_PS2_CANCEL_AUTO_RECEIVE = 4,
+ NVEC_PS2_PS2_ENABLE = 0xf4,
+ NVEC_PS2_PS2_DISABLE,
+};
+
+enum nvec_oem0_subcmd {
+ NVEC_OEM0_10h = 0x10,
+};
+
/* construct a nvec command string */
#define NVEC_CMD_STR(type, subtype, payload...) \
{ NVEC_##type, NVEC_##type##_##subtype, payload }
diff --git a/drivers/staging/nvec/nvec_kbd.c b/drivers/staging/nvec/nvec_kbd.c
index 36ef6a6..d1dd10e 100644
--- a/drivers/staging/nvec/nvec_kbd.c
+++ b/drivers/staging/nvec/nvec_kbd.c
@@ -21,10 +21,6 @@
#include "nvec-keytable.h"
#include "nvec.h"
-#define ACK_KBD_EVENT {'\x05', '\xed', '\x01'}
-
-static const char led_on[3] = "\x05\xed\x07";
-static const char led_off[3] = "\x05\xed\x00";
static unsigned char keycodes[ARRAY_SIZE(code_tab_102us)
+ ARRAY_SIZE(extcode_tab_us102)];
@@ -42,9 +38,11 @@ static void nvec_kbd_toggle_led(void)
keys_dev.caps_lock = !keys_dev.caps_lock;
if (keys_dev.caps_lock)
- nvec_write_async(keys_dev.nvec, led_on, sizeof(led_on));
+ /* FIXME: should be BIT(0) only */
+ NVEC_CALL(keys_dev.nvec, KBD, SET_LEDS,
+ (BIT(0) | BIT(1) | BIT(2)));
else
- nvec_write_async(keys_dev.nvec, led_off, sizeof(led_off));
+ NVEC_CALL(keys_dev.nvec, KBD, SET_LEDS, 0);
}
static int nvec_keys_notifier(struct notifier_block *nb,
@@ -82,7 +80,7 @@ static int nvec_keys_notifier(struct notifier_block *nb,
static int nvec_kbd_event(struct input_dev *dev, unsigned int type,
unsigned int code, int value)
{
- unsigned char buf[] = ACK_KBD_EVENT;
+ unsigned char buf[] = NVEC_CMD_STR(KBD, SET_LEDS, 0);
struct nvec_chip *nvec = keys_dev.nvec;
if (type == EV_REP)
@@ -137,20 +135,21 @@ static int __devinit nvec_kbd_probe(struct platform_device *pdev)
keys_dev.nvec = nvec;
nvec_register_notifier(nvec, &keys_dev.notifier, 0);
- /* Enable keyboard */
- nvec_write_async(nvec, "\x05\xf4", 2);
-
- /* keyboard reset? */
- nvec_write_async(nvec, "\x05\x03\x01\x01", 4);
- nvec_write_async(nvec, "\x05\x04\x01", 3);
- nvec_write_async(nvec, "\x06\x01\xff\x03", 4);
+ /* enable keyboard */
+ NVEC_CALL(nvec, KBD, KBD_ENABLE);
+ /* enable keyboard wake on special keys */
+ NVEC_CALL(nvec, KBD, CNF_WAKE, NVEC_ENABLE, BIT(1));
+ /* enable keyboard wake key reporting */
+ NVEC_CALL(nvec, KBD, CNF_WAKE_KEY_REPORTING, NVEC_ENABLE);
+ /* ps/2 mouse reset */
+ NVEC_CALL(nvec, PS2, SEND_CMD, 0xff, 0x03);
/* FIXME
wait until keyboard reset is finished
or until we have a sync write */
mdelay(1000);
- /* Disable caps lock LED */
- nvec_write_async(nvec, led_off, sizeof(led_off));
+ /* switch off all LEDs */
+ NVEC_CALL(nvec, KBD, SET_LEDS, 0);
return 0;
diff --git a/drivers/staging/nvec/nvec_leds.c b/drivers/staging/nvec/nvec_leds.c
index 53cb571..6796d75 100644
--- a/drivers/staging/nvec/nvec_leds.c
+++ b/drivers/staging/nvec/nvec_leds.c
@@ -21,8 +21,6 @@
#define to_nvec_led(led_cdev) \
container_of(led_cdev, struct nvec_led, cdev)
-#define NVEC_LED_REQ {'\x0d', '\x10', '\x45', '\x10', '\x00'}
-
#define NVEC_LED_MAX 8
struct nvec_led {
@@ -34,13 +32,12 @@ static void nvec_led_brightness_set(struct led_classdev *led_cdev,
enum led_brightness value)
{
struct nvec_led *led = to_nvec_led(led_cdev);
- unsigned char buf[] = NVEC_LED_REQ;
+ unsigned char buf[] = { NVEC_OEM0, 0x10, 0x45, 0x10, 0 };
buf[4] = value;
nvec_write_async(led->nvec, buf, sizeof(buf));
led->cdev.brightness = value;
-
}
static int __devinit nvec_led_probe(struct platform_device *pdev)
diff --git a/drivers/staging/nvec/nvec_power.c b/drivers/staging/nvec/nvec_power.c
index 063f6d5..96c4635 100644
--- a/drivers/staging/nvec/nvec_power.c
+++ b/drivers/staging/nvec/nvec_power.c
@@ -111,7 +111,7 @@ static const int bat_init[] = {
static void get_bat_mfg_data(struct nvec_power *power)
{
int i;
- char buf[] = { '\x02', '\x00' };
+ char buf[] = { NVEC_BAT, 0 };
for (i = 0; i < ARRAY_SIZE(bat_init); i++) {
buf[1] = bat_init[i];
@@ -348,20 +348,20 @@ static int const bat_iter[] = {
static void nvec_power_poll(struct work_struct *work)
{
- char buf[] = { '\x01', '\x00' };
+ char buf[] = { NVEC_SYS, 0 };
struct nvec_power *power = container_of(work, struct nvec_power,
poller.work);
if (counter >= ARRAY_SIZE(bat_iter))
counter = 0;
-/* AC status via sys req */
+ /* AC status via sys req */
nvec_write_async(power->nvec, buf, 2);
msleep(100);
-/* select a battery request function via round robin
- doing it all at once seems to overload the power supply */
- buf[0] = '\x02'; /* battery */
+ /* select a battery request function via round robin
+ doing it all at once seems to overload the power supply */
+ buf[0] = NVEC_BAT;
buf[1] = bat_iter[counter++];
nvec_write_async(power->nvec, buf, 2);
diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
index 8b66cc0..f6582d6 100644
--- a/drivers/staging/nvec/nvec_ps2.c
+++ b/drivers/staging/nvec/nvec_ps2.c
@@ -21,9 +21,7 @@
#include "nvec.h"
-#define START_STREAMING {'\x06', '\x03', '\x06'}
-#define STOP_STREAMING {'\x06', '\x04'}
-#define SEND_COMMAND {'\x06', '\x01', '\xf4', '\x01'}
+#define PACKET_SIZE 6
#ifdef NVEC_PS2_DEBUG
#define NVEC_PHD(str, buf, len) \
@@ -33,8 +31,6 @@
#define NVEC_PHD(str, buf, len)
#endif
-static const unsigned char MOUSE_RESET[] = {'\x06', '\x01', '\xff', '\x03'};
-
struct nvec_ps2 {
struct serio *ser_dev;
struct notifier_block notifier;
@@ -45,19 +41,17 @@ static struct nvec_ps2 ps2_dev;
static int ps2_startstreaming(struct serio *ser_dev)
{
- unsigned char buf[] = START_STREAMING;
- return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
+ return NVEC_CALL(ps2_dev.nvec, PS2, AUTO_RECEIVE, PACKET_SIZE);
}
static void ps2_stopstreaming(struct serio *ser_dev)
{
- unsigned char buf[] = STOP_STREAMING;
- nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
+ NVEC_CALL(ps2_dev.nvec, PS2, CANCEL_AUTO_RECEIVE);
}
static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
{
- unsigned char buf[] = SEND_COMMAND;
+ unsigned char buf[] = NVEC_CMD_STR(PS2, SEND_CMD, 0, 1);
buf[2] = cmd & 0xff;
@@ -118,7 +112,7 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev)
serio_register_port(ser_dev);
/* mouse reset */
- nvec_write_async(nvec, MOUSE_RESET, 4);
+ NVEC_CALL(ps2_dev.nvec, PS2, SEND_CMD, 0xff, 0x03);
return 0;
}
@@ -129,11 +123,8 @@ static int nvec_mouse_suspend(struct device *dev)
struct platform_device *pdev = to_platform_device(dev);
struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
- /* disable mouse */
- nvec_write_async(nvec, "\x06\xf4", 2);
-
- /* send cancel autoreceive */
- nvec_write_async(nvec, "\x06\x04", 2);
+ NVEC_CALL(nvec, PS2, PS2_DISABLE);
+ NVEC_CALL(nvec, PS2, CANCEL_AUTO_RECEIVE);
return 0;
}
@@ -146,7 +137,7 @@ static int nvec_mouse_resume(struct device *dev)
ps2_startstreaming(ps2_dev.ser_dev);
/* enable mouse */
- nvec_write_async(nvec, "\x06\xf5", 2);
+ NVEC_CALL(nvec, PS2, PS2_ENABLE);
return 0;
}
--
1.7.9.5
More information about the devel
mailing list