Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input updates from Dmitry Torokhov:
 "A new driver for slidebar on Ideapad laptops and a bunch of assorted
  driver fixes"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (32 commits)
  Input: add SYN_MAX and SYN_CNT constants
  Input: max11801_ts - convert to devm
  Input: egalax-ts - fix typo and improve text
  Input: MAINTAINERS - change maintainer for cyttsp driver
  Input: cyttsp4 - kill 'defined but not used' compiler warnings
  Input: add driver for slidebar on Lenovo IdeaPad laptops
  Input: omap-keypad - set up irq type from DT
  Input: omap-keypad - enable wakeup capability for keypad.
  Input: omap-keypad - clear interrupts on open
  Input: omap-keypad - convert to threaded IRQ
  Input: omap-keypad - use bitfiled instead of hardcoded values
  Input: cyttsp4 - remove useless NULL test from cyttsp4_watchdog_timer()
  Input: wacom - fix error return code in wacom_probe()
  Input: as5011 - fix error return code in as5011_probe()
  Input: keyboard, serio - simplify use of devm_ioremap_resource
  Input: tegra-kbc - simplify use of devm_ioremap_resource
  Input: htcpen - fix incorrect placement of __initdata
  Input: qt1070 - add power management ops
  Input: wistron_btns - add MODULE_DEVICE_TABLE
  Input: wistron_btns - mark the Medion MD96500 keymap as tested
  ...
This commit is contained in:
Linus Torvalds
2013-09-07 10:38:46 -07:00
33 changed files with 770 additions and 321 deletions

View File

@@ -291,7 +291,7 @@ err_free_mem:
return err;
}
#ifdef CONFIG_PM
#ifdef CONFIG_PM_SLEEP
static int cy8ctmg110_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
@@ -319,9 +319,9 @@ static int cy8ctmg110_resume(struct device *dev)
}
return 0;
}
#endif
static SIMPLE_DEV_PM_OPS(cy8ctmg110_pm, cy8ctmg110_suspend, cy8ctmg110_resume);
#endif
static int cy8ctmg110_remove(struct i2c_client *client)
{
@@ -351,9 +351,7 @@ static struct i2c_driver cy8ctmg110_driver = {
.driver = {
.owner = THIS_MODULE,
.name = CY8CTMG110_DRIVER_NAME,
#ifdef CONFIG_PM
.pm = &cy8ctmg110_pm,
#endif
},
.id_table = cy8ctmg110_idtable,
.probe = cy8ctmg110_probe,

View File

@@ -1246,9 +1246,6 @@ static void cyttsp4_watchdog_timer(unsigned long handle)
dev_vdbg(cd->dev, "%s: Watchdog timer triggered\n", __func__);
if (!cd)
return;
if (!work_pending(&cd->watchdog_work))
schedule_work(&cd->watchdog_work);
@@ -1552,106 +1549,6 @@ exit:
return rc;
}
static int cyttsp4_core_sleep(struct cyttsp4 *cd)
{
int rc;
rc = cyttsp4_request_exclusive(cd, cd->dev,
CY_CORE_SLEEP_REQUEST_EXCLUSIVE_TIMEOUT);
if (rc < 0) {
dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
__func__, cd->exclusive_dev, cd->dev);
return 0;
}
rc = cyttsp4_core_sleep_(cd);
if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
else
dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
return rc;
}
static int cyttsp4_core_wake_(struct cyttsp4 *cd)
{
struct device *dev = cd->dev;
int rc;
u8 mode;
int t;
/* Already woken? */
mutex_lock(&cd->system_lock);
if (cd->sleep_state == SS_SLEEP_OFF) {
mutex_unlock(&cd->system_lock);
return 0;
}
cd->int_status &= ~CY_INT_IGNORE;
cd->int_status |= CY_INT_AWAKE;
cd->sleep_state = SS_WAKING;
if (cd->cpdata->power) {
dev_dbg(dev, "%s: Power up HW\n", __func__);
rc = cd->cpdata->power(cd->cpdata, 1, dev, &cd->ignore_irq);
} else {
dev_dbg(dev, "%s: No power function\n", __func__);
rc = -ENOSYS;
}
if (rc < 0) {
dev_err(dev, "%s: HW Power up fails r=%d\n",
__func__, rc);
/* Initiate a read transaction to wake up */
cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode);
} else
dev_vdbg(cd->dev, "%s: HW power up succeeds\n",
__func__);
mutex_unlock(&cd->system_lock);
t = wait_event_timeout(cd->wait_q,
(cd->int_status & CY_INT_AWAKE) == 0,
msecs_to_jiffies(CY_CORE_WAKEUP_TIMEOUT));
if (IS_TMO(t)) {
dev_err(dev, "%s: TMO waiting for wakeup\n", __func__);
mutex_lock(&cd->system_lock);
cd->int_status &= ~CY_INT_AWAKE;
/* Try starting up */
cyttsp4_queue_startup_(cd);
mutex_unlock(&cd->system_lock);
}
mutex_lock(&cd->system_lock);
cd->sleep_state = SS_SLEEP_OFF;
mutex_unlock(&cd->system_lock);
cyttsp4_start_wd_timer(cd);
return 0;
}
static int cyttsp4_core_wake(struct cyttsp4 *cd)
{
int rc;
rc = cyttsp4_request_exclusive(cd, cd->dev,
CY_CORE_REQUEST_EXCLUSIVE_TIMEOUT);
if (rc < 0) {
dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
__func__, cd->exclusive_dev, cd->dev);
return 0;
}
rc = cyttsp4_core_wake_(cd);
if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
else
dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
return rc;
}
static int cyttsp4_startup_(struct cyttsp4 *cd)
{
int retry = CY_CORE_STARTUP_RETRY_COUNT;
@@ -1821,6 +1718,106 @@ static void cyttsp4_free_si_ptrs(struct cyttsp4 *cd)
}
#if defined(CONFIG_PM_SLEEP) || defined(CONFIG_PM_RUNTIME)
static int cyttsp4_core_sleep(struct cyttsp4 *cd)
{
int rc;
rc = cyttsp4_request_exclusive(cd, cd->dev,
CY_CORE_SLEEP_REQUEST_EXCLUSIVE_TIMEOUT);
if (rc < 0) {
dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
__func__, cd->exclusive_dev, cd->dev);
return 0;
}
rc = cyttsp4_core_sleep_(cd);
if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
else
dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
return rc;
}
static int cyttsp4_core_wake_(struct cyttsp4 *cd)
{
struct device *dev = cd->dev;
int rc;
u8 mode;
int t;
/* Already woken? */
mutex_lock(&cd->system_lock);
if (cd->sleep_state == SS_SLEEP_OFF) {
mutex_unlock(&cd->system_lock);
return 0;
}
cd->int_status &= ~CY_INT_IGNORE;
cd->int_status |= CY_INT_AWAKE;
cd->sleep_state = SS_WAKING;
if (cd->cpdata->power) {
dev_dbg(dev, "%s: Power up HW\n", __func__);
rc = cd->cpdata->power(cd->cpdata, 1, dev, &cd->ignore_irq);
} else {
dev_dbg(dev, "%s: No power function\n", __func__);
rc = -ENOSYS;
}
if (rc < 0) {
dev_err(dev, "%s: HW Power up fails r=%d\n",
__func__, rc);
/* Initiate a read transaction to wake up */
cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode);
} else
dev_vdbg(cd->dev, "%s: HW power up succeeds\n",
__func__);
mutex_unlock(&cd->system_lock);
t = wait_event_timeout(cd->wait_q,
(cd->int_status & CY_INT_AWAKE) == 0,
msecs_to_jiffies(CY_CORE_WAKEUP_TIMEOUT));
if (IS_TMO(t)) {
dev_err(dev, "%s: TMO waiting for wakeup\n", __func__);
mutex_lock(&cd->system_lock);
cd->int_status &= ~CY_INT_AWAKE;
/* Try starting up */
cyttsp4_queue_startup_(cd);
mutex_unlock(&cd->system_lock);
}
mutex_lock(&cd->system_lock);
cd->sleep_state = SS_SLEEP_OFF;
mutex_unlock(&cd->system_lock);
cyttsp4_start_wd_timer(cd);
return 0;
}
static int cyttsp4_core_wake(struct cyttsp4 *cd)
{
int rc;
rc = cyttsp4_request_exclusive(cd, cd->dev,
CY_CORE_REQUEST_EXCLUSIVE_TIMEOUT);
if (rc < 0) {
dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
__func__, cd->exclusive_dev, cd->dev);
return 0;
}
rc = cyttsp4_core_wake_(cd);
if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
else
dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
return rc;
}
static int cyttsp4_core_suspend(struct device *dev)
{
struct cyttsp4 *cd = dev_get_drvdata(dev);

View File

@@ -264,7 +264,7 @@ static int eeti_ts_remove(struct i2c_client *client)
return 0;
}
#ifdef CONFIG_PM
#ifdef CONFIG_PM_SLEEP
static int eeti_ts_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
@@ -302,9 +302,9 @@ static int eeti_ts_resume(struct device *dev)
return 0;
}
#endif
static SIMPLE_DEV_PM_OPS(eeti_ts_pm, eeti_ts_suspend, eeti_ts_resume);
#endif
static const struct i2c_device_id eeti_ts_id[] = {
{ "eeti_ts", 0 },
@@ -315,9 +315,7 @@ MODULE_DEVICE_TABLE(i2c, eeti_ts_id);
static struct i2c_driver eeti_ts_driver = {
.driver = {
.name = "eeti_ts",
#ifdef CONFIG_PM
.pm = &eeti_ts_pm,
#endif
},
.probe = eeti_ts_probe,
.remove = eeti_ts_remove,

View File

@@ -221,7 +221,7 @@ static struct isa_driver htcpen_isa_driver = {
}
};
static struct dmi_system_id __initdata htcshift_dmi_table[] = {
static struct dmi_system_id htcshift_dmi_table[] __initdata = {
{
.ident = "Shift",
.matches = {

View File

@@ -181,12 +181,11 @@ static int max11801_ts_probe(struct i2c_client *client,
struct input_dev *input_dev;
int error;
data = kzalloc(sizeof(struct max11801_data), GFP_KERNEL);
input_dev = input_allocate_device();
data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
input_dev = devm_input_allocate_device(&client->dev);
if (!data || !input_dev) {
dev_err(&client->dev, "Failed to allocate memory\n");
error = -ENOMEM;
goto err_free_mem;
return -ENOMEM;
}
data->client = client;
@@ -205,38 +204,21 @@ static int max11801_ts_probe(struct i2c_client *client,
max11801_ts_phy_init(data);
error = request_threaded_irq(client->irq, NULL, max11801_ts_interrupt,
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
"max11801_ts", data);
error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
max11801_ts_interrupt,
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
"max11801_ts", data);
if (error) {
dev_err(&client->dev, "Failed to register interrupt\n");
goto err_free_mem;
return error;
}
error = input_register_device(data->input_dev);
if (error)
goto err_free_irq;
return error;
i2c_set_clientdata(client, data);
return 0;
err_free_irq:
free_irq(client->irq, data);
err_free_mem:
input_free_device(input_dev);
kfree(data);
return error;
}
static int max11801_ts_remove(struct i2c_client *client)
{
struct max11801_data *data = i2c_get_clientdata(client);
free_irq(client->irq, data);
input_unregister_device(data->input_dev);
kfree(data);
return 0;
}
static const struct i2c_device_id max11801_ts_id[] = {
@@ -252,7 +234,6 @@ static struct i2c_driver max11801_ts_driver = {
},
.id_table = max11801_ts_id,
.probe = max11801_ts_probe,
.remove = max11801_ts_remove,
};
module_i2c_driver(max11801_ts_driver);