mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-21 04:53:46 -04:00
Merge branch 'next' into for-linus
Prepare input updates for 6.13 merge window.
This commit is contained in:
@@ -141,7 +141,7 @@ static struct platform_driver pm80x_onkey_driver = {
|
||||
.pm = &pm80x_onkey_pm_ops,
|
||||
},
|
||||
.probe = pm80x_onkey_probe,
|
||||
.remove_new = pm80x_onkey_remove,
|
||||
.remove = pm80x_onkey_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(pm80x_onkey_driver);
|
||||
|
||||
@@ -941,7 +941,7 @@ static irqreturn_t ad714x_interrupt_thread(int irq, void *data)
|
||||
struct ad714x_chip *ad714x = data;
|
||||
int i;
|
||||
|
||||
mutex_lock(&ad714x->mutex);
|
||||
guard(mutex)(&ad714x->mutex);
|
||||
|
||||
ad714x->read(ad714x, STG_LOW_INT_STA_REG, &ad714x->l_state, 3);
|
||||
|
||||
@@ -954,8 +954,6 @@ static irqreturn_t ad714x_interrupt_thread(int irq, void *data)
|
||||
for (i = 0; i < ad714x->hw->touchpad_num; i++)
|
||||
ad714x_touchpad_state_machine(ad714x, i);
|
||||
|
||||
mutex_unlock(&ad714x->mutex);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -1169,13 +1167,11 @@ static int ad714x_suspend(struct device *dev)
|
||||
|
||||
dev_dbg(ad714x->dev, "%s enter\n", __func__);
|
||||
|
||||
mutex_lock(&ad714x->mutex);
|
||||
guard(mutex)(&ad714x->mutex);
|
||||
|
||||
data = ad714x->hw->sys_cfg_reg[AD714X_PWR_CTRL] | 0x3;
|
||||
ad714x->write(ad714x, AD714X_PWR_CTRL, data);
|
||||
|
||||
mutex_unlock(&ad714x->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1184,7 +1180,7 @@ static int ad714x_resume(struct device *dev)
|
||||
struct ad714x_chip *ad714x = dev_get_drvdata(dev);
|
||||
dev_dbg(ad714x->dev, "%s enter\n", __func__);
|
||||
|
||||
mutex_lock(&ad714x->mutex);
|
||||
guard(mutex)(&ad714x->mutex);
|
||||
|
||||
/* resume to non-shutdown mode */
|
||||
|
||||
@@ -1197,8 +1193,6 @@ static int ad714x_resume(struct device *dev)
|
||||
|
||||
ad714x->read(ad714x, STG_LOW_INT_STA_REG, &ad714x->l_state, 3);
|
||||
|
||||
mutex_unlock(&ad714x->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -244,29 +244,21 @@ static int ati_remote2_open(struct input_dev *idev)
|
||||
if (r) {
|
||||
dev_err(&ar2->intf[0]->dev,
|
||||
"%s(): usb_autopm_get_interface() = %d\n", __func__, r);
|
||||
goto fail1;
|
||||
return r;
|
||||
}
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
scoped_guard(mutex, &ati_remote2_mutex) {
|
||||
if (!(ar2->flags & ATI_REMOTE2_SUSPENDED)) {
|
||||
r = ati_remote2_submit_urbs(ar2);
|
||||
if (r)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(ar2->flags & ATI_REMOTE2_SUSPENDED)) {
|
||||
r = ati_remote2_submit_urbs(ar2);
|
||||
if (r)
|
||||
goto fail2;
|
||||
ar2->flags |= ATI_REMOTE2_OPENED;
|
||||
}
|
||||
|
||||
ar2->flags |= ATI_REMOTE2_OPENED;
|
||||
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
|
||||
usb_autopm_put_interface(ar2->intf[0]);
|
||||
|
||||
return 0;
|
||||
|
||||
fail2:
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
usb_autopm_put_interface(ar2->intf[0]);
|
||||
fail1:
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -276,14 +268,12 @@ static void ati_remote2_close(struct input_dev *idev)
|
||||
|
||||
dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
guard(mutex)(&ati_remote2_mutex);
|
||||
|
||||
if (!(ar2->flags & ATI_REMOTE2_SUSPENDED))
|
||||
ati_remote2_kill_urbs(ar2);
|
||||
|
||||
ar2->flags &= ~ATI_REMOTE2_OPENED;
|
||||
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
}
|
||||
|
||||
static void ati_remote2_input_mouse(struct ati_remote2 *ar2)
|
||||
@@ -713,16 +703,14 @@ static ssize_t ati_remote2_store_channel_mask(struct device *dev,
|
||||
return r;
|
||||
}
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
|
||||
if (mask != ar2->channel_mask) {
|
||||
r = ati_remote2_setup(ar2, mask);
|
||||
if (!r)
|
||||
ar2->channel_mask = mask;
|
||||
scoped_guard(mutex, &ati_remote2_mutex) {
|
||||
if (mask != ar2->channel_mask) {
|
||||
r = ati_remote2_setup(ar2, mask);
|
||||
if (!r)
|
||||
ar2->channel_mask = mask;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
|
||||
usb_autopm_put_interface(ar2->intf[0]);
|
||||
|
||||
return r ? r : count;
|
||||
@@ -892,15 +880,13 @@ static int ati_remote2_suspend(struct usb_interface *interface,
|
||||
|
||||
dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
guard(mutex)(&ati_remote2_mutex);
|
||||
|
||||
if (ar2->flags & ATI_REMOTE2_OPENED)
|
||||
ati_remote2_kill_urbs(ar2);
|
||||
|
||||
ar2->flags |= ATI_REMOTE2_SUSPENDED;
|
||||
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -917,7 +903,7 @@ static int ati_remote2_resume(struct usb_interface *interface)
|
||||
|
||||
dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
guard(mutex)(&ati_remote2_mutex);
|
||||
|
||||
if (ar2->flags & ATI_REMOTE2_OPENED)
|
||||
r = ati_remote2_submit_urbs(ar2);
|
||||
@@ -925,8 +911,6 @@ static int ati_remote2_resume(struct usb_interface *interface)
|
||||
if (!r)
|
||||
ar2->flags &= ~ATI_REMOTE2_SUSPENDED;
|
||||
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -943,11 +927,11 @@ static int ati_remote2_reset_resume(struct usb_interface *interface)
|
||||
|
||||
dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__);
|
||||
|
||||
mutex_lock(&ati_remote2_mutex);
|
||||
guard(mutex)(&ati_remote2_mutex);
|
||||
|
||||
r = ati_remote2_setup(ar2, ar2->channel_mask);
|
||||
if (r)
|
||||
goto out;
|
||||
return r;
|
||||
|
||||
if (ar2->flags & ATI_REMOTE2_OPENED)
|
||||
r = ati_remote2_submit_urbs(ar2);
|
||||
@@ -955,9 +939,6 @@ static int ati_remote2_reset_resume(struct usb_interface *interface)
|
||||
if (!r)
|
||||
ar2->flags &= ~ATI_REMOTE2_SUSPENDED;
|
||||
|
||||
out:
|
||||
mutex_unlock(&ati_remote2_mutex);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -355,6 +355,35 @@ static void cm109_submit_buzz_toggle(struct cm109_dev *dev)
|
||||
__func__, error);
|
||||
}
|
||||
|
||||
static void cm109_submit_ctl(struct cm109_dev *dev)
|
||||
{
|
||||
int error;
|
||||
|
||||
guard(spinlock_irqsave)(&dev->ctl_submit_lock);
|
||||
|
||||
dev->irq_urb_pending = 0;
|
||||
|
||||
if (unlikely(dev->shutdown))
|
||||
return;
|
||||
|
||||
if (dev->buzzer_state)
|
||||
dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
|
||||
else
|
||||
dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
|
||||
|
||||
dev->ctl_data->byte[HID_OR1] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR2] = dev->keybit;
|
||||
|
||||
dev->buzzer_pending = 0;
|
||||
dev->ctl_urb_pending = 1;
|
||||
|
||||
error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
|
||||
if (error)
|
||||
dev_err(&dev->intf->dev,
|
||||
"%s: usb_submit_urb (urb_ctl) failed %d\n",
|
||||
__func__, error);
|
||||
}
|
||||
|
||||
/*
|
||||
* IRQ handler
|
||||
*/
|
||||
@@ -362,8 +391,6 @@ static void cm109_urb_irq_callback(struct urb *urb)
|
||||
{
|
||||
struct cm109_dev *dev = urb->context;
|
||||
const int status = urb->status;
|
||||
int error;
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
|
||||
dev->irq_data->byte[0],
|
||||
@@ -401,32 +428,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
spin_lock_irqsave(&dev->ctl_submit_lock, flags);
|
||||
|
||||
dev->irq_urb_pending = 0;
|
||||
|
||||
if (likely(!dev->shutdown)) {
|
||||
|
||||
if (dev->buzzer_state)
|
||||
dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
|
||||
else
|
||||
dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
|
||||
|
||||
dev->ctl_data->byte[HID_OR1] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR2] = dev->keybit;
|
||||
|
||||
dev->buzzer_pending = 0;
|
||||
dev->ctl_urb_pending = 1;
|
||||
|
||||
error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
|
||||
if (error)
|
||||
dev_err(&dev->intf->dev,
|
||||
"%s: usb_submit_urb (urb_ctl) failed %d\n",
|
||||
__func__, error);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
|
||||
cm109_submit_ctl(dev);
|
||||
}
|
||||
|
||||
static void cm109_urb_ctl_callback(struct urb *urb)
|
||||
@@ -434,7 +436,6 @@ static void cm109_urb_ctl_callback(struct urb *urb)
|
||||
struct cm109_dev *dev = urb->context;
|
||||
const int status = urb->status;
|
||||
int error;
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
|
||||
dev->ctl_data->byte[0],
|
||||
@@ -449,35 +450,31 @@ static void cm109_urb_ctl_callback(struct urb *urb)
|
||||
__func__, status);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&dev->ctl_submit_lock, flags);
|
||||
guard(spinlock_irqsave)(&dev->ctl_submit_lock);
|
||||
|
||||
dev->ctl_urb_pending = 0;
|
||||
|
||||
if (likely(!dev->shutdown)) {
|
||||
if (unlikely(dev->shutdown))
|
||||
return;
|
||||
|
||||
if (dev->buzzer_pending || status) {
|
||||
dev->buzzer_pending = 0;
|
||||
dev->ctl_urb_pending = 1;
|
||||
cm109_submit_buzz_toggle(dev);
|
||||
} else if (likely(!dev->irq_urb_pending)) {
|
||||
/* ask for key data */
|
||||
dev->irq_urb_pending = 1;
|
||||
error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC);
|
||||
if (error)
|
||||
dev_err(&dev->intf->dev,
|
||||
"%s: usb_submit_urb (urb_irq) failed %d\n",
|
||||
__func__, error);
|
||||
}
|
||||
if (dev->buzzer_pending || status) {
|
||||
dev->buzzer_pending = 0;
|
||||
dev->ctl_urb_pending = 1;
|
||||
cm109_submit_buzz_toggle(dev);
|
||||
} else if (likely(!dev->irq_urb_pending)) {
|
||||
/* ask for key data */
|
||||
dev->irq_urb_pending = 1;
|
||||
error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC);
|
||||
if (error)
|
||||
dev_err(&dev->intf->dev,
|
||||
"%s: usb_submit_urb (urb_irq) failed %d\n",
|
||||
__func__, error);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
|
||||
}
|
||||
|
||||
static void cm109_toggle_buzzer_async(struct cm109_dev *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&dev->ctl_submit_lock, flags);
|
||||
guard(spinlock_irqsave)(&dev->ctl_submit_lock);
|
||||
|
||||
if (dev->ctl_urb_pending) {
|
||||
/* URB completion will resubmit */
|
||||
@@ -486,8 +483,6 @@ static void cm109_toggle_buzzer_async(struct cm109_dev *dev)
|
||||
dev->ctl_urb_pending = 1;
|
||||
cm109_submit_buzz_toggle(dev);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
|
||||
}
|
||||
|
||||
static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on)
|
||||
@@ -556,32 +551,30 @@ static int cm109_input_open(struct input_dev *idev)
|
||||
return error;
|
||||
}
|
||||
|
||||
mutex_lock(&dev->pm_mutex);
|
||||
scoped_guard(mutex, &dev->pm_mutex) {
|
||||
dev->buzzer_state = 0;
|
||||
dev->key_code = -1; /* no keys pressed */
|
||||
dev->keybit = 0xf;
|
||||
|
||||
dev->buzzer_state = 0;
|
||||
dev->key_code = -1; /* no keys pressed */
|
||||
dev->keybit = 0xf;
|
||||
/* issue INIT */
|
||||
dev->ctl_data->byte[HID_OR0] = HID_OR_GPO_BUZ_SPDIF;
|
||||
dev->ctl_data->byte[HID_OR1] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR2] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR3] = 0x00;
|
||||
|
||||
/* issue INIT */
|
||||
dev->ctl_data->byte[HID_OR0] = HID_OR_GPO_BUZ_SPDIF;
|
||||
dev->ctl_data->byte[HID_OR1] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR2] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR3] = 0x00;
|
||||
|
||||
dev->ctl_urb_pending = 1;
|
||||
error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
|
||||
if (error) {
|
||||
dev->ctl_urb_pending = 0;
|
||||
dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
|
||||
__func__, error);
|
||||
} else {
|
||||
dev->open = 1;
|
||||
dev->ctl_urb_pending = 1;
|
||||
error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
|
||||
if (!error) {
|
||||
dev->open = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&dev->pm_mutex);
|
||||
dev->ctl_urb_pending = 0;
|
||||
usb_autopm_put_interface(dev->intf);
|
||||
|
||||
if (error)
|
||||
usb_autopm_put_interface(dev->intf);
|
||||
dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
|
||||
__func__, error);
|
||||
|
||||
return error;
|
||||
}
|
||||
@@ -590,17 +583,15 @@ static void cm109_input_close(struct input_dev *idev)
|
||||
{
|
||||
struct cm109_dev *dev = input_get_drvdata(idev);
|
||||
|
||||
mutex_lock(&dev->pm_mutex);
|
||||
|
||||
/*
|
||||
* Once we are here event delivery is stopped so we
|
||||
* don't need to worry about someone starting buzzer
|
||||
* again
|
||||
*/
|
||||
cm109_stop_traffic(dev);
|
||||
dev->open = 0;
|
||||
|
||||
mutex_unlock(&dev->pm_mutex);
|
||||
scoped_guard(mutex, &dev->pm_mutex) {
|
||||
/*
|
||||
* Once we are here event delivery is stopped so we
|
||||
* don't need to worry about someone starting buzzer
|
||||
* again
|
||||
*/
|
||||
cm109_stop_traffic(dev);
|
||||
dev->open = 0;
|
||||
}
|
||||
|
||||
usb_autopm_put_interface(dev->intf);
|
||||
}
|
||||
@@ -823,9 +814,9 @@ static int cm109_usb_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
|
||||
dev_info(&intf->dev, "cm109: usb_suspend (event=%d)\n", message.event);
|
||||
|
||||
mutex_lock(&dev->pm_mutex);
|
||||
guard(mutex)(&dev->pm_mutex);
|
||||
|
||||
cm109_stop_traffic(dev);
|
||||
mutex_unlock(&dev->pm_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -836,9 +827,9 @@ static int cm109_usb_resume(struct usb_interface *intf)
|
||||
|
||||
dev_info(&intf->dev, "cm109: usb_resume\n");
|
||||
|
||||
mutex_lock(&dev->pm_mutex);
|
||||
guard(mutex)(&dev->pm_mutex);
|
||||
|
||||
cm109_restore_state(dev);
|
||||
mutex_unlock(&dev->pm_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -217,15 +217,13 @@ static int cma3000_open(struct input_dev *input_dev)
|
||||
{
|
||||
struct cma3000_accl_data *data = input_get_drvdata(input_dev);
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
guard(mutex)(&data->mutex);
|
||||
|
||||
if (!data->suspended)
|
||||
cma3000_poweron(data);
|
||||
|
||||
data->opened = true;
|
||||
|
||||
mutex_unlock(&data->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -233,40 +231,34 @@ static void cma3000_close(struct input_dev *input_dev)
|
||||
{
|
||||
struct cma3000_accl_data *data = input_get_drvdata(input_dev);
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
guard(mutex)(&data->mutex);
|
||||
|
||||
if (!data->suspended)
|
||||
cma3000_poweroff(data);
|
||||
|
||||
data->opened = false;
|
||||
|
||||
mutex_unlock(&data->mutex);
|
||||
}
|
||||
|
||||
void cma3000_suspend(struct cma3000_accl_data *data)
|
||||
{
|
||||
mutex_lock(&data->mutex);
|
||||
guard(mutex)(&data->mutex);
|
||||
|
||||
if (!data->suspended && data->opened)
|
||||
cma3000_poweroff(data);
|
||||
|
||||
data->suspended = true;
|
||||
|
||||
mutex_unlock(&data->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(cma3000_suspend);
|
||||
|
||||
|
||||
void cma3000_resume(struct cma3000_accl_data *data)
|
||||
{
|
||||
mutex_lock(&data->mutex);
|
||||
guard(mutex)(&data->mutex);
|
||||
|
||||
if (data->suspended && data->opened)
|
||||
cma3000_poweron(data);
|
||||
|
||||
data->suspended = false;
|
||||
|
||||
mutex_unlock(&data->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(cma3000_resume);
|
||||
|
||||
|
||||
@@ -1263,39 +1263,37 @@ static int da7280_suspend(struct device *dev)
|
||||
{
|
||||
struct da7280_haptic *haptics = dev_get_drvdata(dev);
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
/*
|
||||
* Make sure no new requests will be submitted while device is
|
||||
* suspended.
|
||||
*/
|
||||
spin_lock_irq(&haptics->input_dev->event_lock);
|
||||
haptics->suspended = true;
|
||||
spin_unlock_irq(&haptics->input_dev->event_lock);
|
||||
scoped_guard(spinlock_irq, &haptics->input_dev->event_lock) {
|
||||
haptics->suspended = true;
|
||||
}
|
||||
|
||||
da7280_haptic_stop(haptics);
|
||||
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int da7280_resume(struct device *dev)
|
||||
{
|
||||
struct da7280_haptic *haptics = dev_get_drvdata(dev);
|
||||
int retval;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
retval = da7280_haptic_start(haptics);
|
||||
if (!retval) {
|
||||
spin_lock_irq(&haptics->input_dev->event_lock);
|
||||
error = da7280_haptic_start(haptics);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
scoped_guard(spinlock_irq, &haptics->input_dev->event_lock) {
|
||||
haptics->suspended = false;
|
||||
spin_unlock_irq(&haptics->input_dev->event_lock);
|
||||
}
|
||||
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return retval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
||||
@@ -140,8 +140,8 @@ static void da9052_onkey_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver da9052_onkey_driver = {
|
||||
.probe = da9052_onkey_probe,
|
||||
.remove_new = da9052_onkey_remove,
|
||||
.driver = {
|
||||
.remove = da9052_onkey_remove,
|
||||
.driver = {
|
||||
.name = "da9052-onkey",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -145,8 +145,8 @@ static void da9055_onkey_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver da9055_onkey_driver = {
|
||||
.probe = da9055_onkey_probe,
|
||||
.remove_new = da9055_onkey_remove,
|
||||
.driver = {
|
||||
.remove = da9055_onkey_remove,
|
||||
.driver = {
|
||||
.name = "da9055-onkey",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -537,64 +537,62 @@ static int drv260x_probe(struct i2c_client *client)
|
||||
static int drv260x_suspend(struct device *dev)
|
||||
{
|
||||
struct drv260x_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regmap_update_bits(haptics->regmap,
|
||||
DRV260X_MODE,
|
||||
DRV260X_STANDBY_MASK,
|
||||
DRV260X_STANDBY);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap,
|
||||
DRV260X_MODE,
|
||||
DRV260X_STANDBY_MASK,
|
||||
DRV260X_STANDBY);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to set standby mode\n");
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
gpiod_set_value(haptics->enable_gpio, 0);
|
||||
|
||||
ret = regulator_disable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_disable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to disable regulator\n");
|
||||
regmap_update_bits(haptics->regmap,
|
||||
DRV260X_MODE,
|
||||
DRV260X_STANDBY_MASK, 0);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drv260x_resume(struct device *dev)
|
||||
{
|
||||
struct drv260x_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regulator_enable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_enable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to enable regulator\n");
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(haptics->regmap,
|
||||
DRV260X_MODE,
|
||||
DRV260X_STANDBY_MASK, 0);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap,
|
||||
DRV260X_MODE,
|
||||
DRV260X_STANDBY_MASK, 0);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to unset standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
gpiod_set_value(haptics->enable_gpio, 1);
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(drv260x_pm_ops, drv260x_suspend, drv260x_resume);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
/* Contol registers */
|
||||
/* Control registers */
|
||||
#define DRV2665_STATUS 0x00
|
||||
#define DRV2665_CTRL_1 0x01
|
||||
#define DRV2665_CTRL_2 0x02
|
||||
@@ -225,59 +225,57 @@ static int drv2665_probe(struct i2c_client *client)
|
||||
static int drv2665_suspend(struct device *dev)
|
||||
{
|
||||
struct drv2665_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2665_CTRL_2,
|
||||
DRV2665_STANDBY, DRV2665_STANDBY);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2665_CTRL_2,
|
||||
DRV2665_STANDBY, DRV2665_STANDBY);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to set standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regulator_disable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_disable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to disable regulator\n");
|
||||
regmap_update_bits(haptics->regmap,
|
||||
DRV2665_CTRL_2,
|
||||
DRV2665_STANDBY, 0);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drv2665_resume(struct device *dev)
|
||||
{
|
||||
struct drv2665_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regulator_enable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_enable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to enable regulator\n");
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2665_CTRL_2,
|
||||
DRV2665_STANDBY, 0);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2665_CTRL_2,
|
||||
DRV2665_STANDBY, 0);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to unset standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(drv2665_pm_ops, drv2665_suspend, drv2665_resume);
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
/* Contol registers */
|
||||
/* Control registers */
|
||||
#define DRV2667_STATUS 0x00
|
||||
#define DRV2667_CTRL_1 0x01
|
||||
#define DRV2667_CTRL_2 0x02
|
||||
@@ -402,59 +402,57 @@ static int drv2667_probe(struct i2c_client *client)
|
||||
static int drv2667_suspend(struct device *dev)
|
||||
{
|
||||
struct drv2667_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, DRV2667_STANDBY);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, DRV2667_STANDBY);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to set standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regulator_disable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_disable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to disable regulator\n");
|
||||
regmap_update_bits(haptics->regmap,
|
||||
DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drv2667_resume(struct device *dev)
|
||||
{
|
||||
struct drv2667_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regulator_enable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_enable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to enable regulator\n");
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to unset standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(drv2667_pm_ops, drv2667_suspend, drv2667_resume);
|
||||
|
||||
@@ -77,12 +77,11 @@ static void ibm_panel_process_command(struct ibm_panel *panel)
|
||||
static int ibm_panel_i2c_slave_cb(struct i2c_client *client,
|
||||
enum i2c_slave_event event, u8 *val)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct ibm_panel *panel = i2c_get_clientdata(client);
|
||||
|
||||
dev_dbg(&panel->input->dev, "event: %u data: %02x\n", event, *val);
|
||||
|
||||
spin_lock_irqsave(&panel->lock, flags);
|
||||
guard(spinlock_irqsave)(&panel->lock);
|
||||
|
||||
switch (event) {
|
||||
case I2C_SLAVE_STOP:
|
||||
@@ -114,8 +113,6 @@ static int ibm_panel_i2c_slave_cb(struct i2c_client *client,
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&panel->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
*
|
||||
* The value is in byte range, however, I only figured out
|
||||
* how bits 0b10011001 work. Some other bits, probably,
|
||||
* are meaningfull too.
|
||||
* are meaningful too.
|
||||
*
|
||||
* Possible states:
|
||||
*
|
||||
@@ -95,41 +95,29 @@ static struct platform_device *slidebar_platform_dev;
|
||||
|
||||
static u8 slidebar_pos_get(void)
|
||||
{
|
||||
u8 res;
|
||||
unsigned long flags;
|
||||
guard(spinlock_irqsave)(&io_lock);
|
||||
|
||||
spin_lock_irqsave(&io_lock, flags);
|
||||
outb(0xf4, 0xff29);
|
||||
outb(0xbf, 0xff2a);
|
||||
res = inb(0xff2b);
|
||||
spin_unlock_irqrestore(&io_lock, flags);
|
||||
|
||||
return res;
|
||||
return inb(0xff2b);
|
||||
}
|
||||
|
||||
static u8 slidebar_mode_get(void)
|
||||
{
|
||||
u8 res;
|
||||
unsigned long flags;
|
||||
guard(spinlock_irqsave)(&io_lock);
|
||||
|
||||
spin_lock_irqsave(&io_lock, flags);
|
||||
outb(0xf7, 0xff29);
|
||||
outb(0x8b, 0xff2a);
|
||||
res = inb(0xff2b);
|
||||
spin_unlock_irqrestore(&io_lock, flags);
|
||||
|
||||
return res;
|
||||
return inb(0xff2b);
|
||||
}
|
||||
|
||||
static void slidebar_mode_set(u8 mode)
|
||||
{
|
||||
unsigned long flags;
|
||||
guard(spinlock_irqsave)(&io_lock);
|
||||
|
||||
spin_lock_irqsave(&io_lock, flags);
|
||||
outb(0xf7, 0xff29);
|
||||
outb(0x8b, 0xff2a);
|
||||
outb(mode, 0xff2b);
|
||||
spin_unlock_irqrestore(&io_lock, flags);
|
||||
}
|
||||
|
||||
static bool slidebar_i8042_filter(unsigned char data, unsigned char str,
|
||||
@@ -267,7 +255,7 @@ static struct platform_driver slidebar_drv = {
|
||||
.driver = {
|
||||
.name = "ideapad_slidebar",
|
||||
},
|
||||
.remove_new = ideapad_remove,
|
||||
.remove = ideapad_remove,
|
||||
};
|
||||
|
||||
static int __init ideapad_dmi_check(const struct dmi_system_id *id)
|
||||
|
||||
@@ -739,7 +739,7 @@ static int ims_pcu_switch_to_bootloader(struct ims_pcu *pcu)
|
||||
{
|
||||
int error;
|
||||
|
||||
/* Execute jump to the bootoloader */
|
||||
/* Execute jump to the bootloader */
|
||||
error = ims_pcu_execute_command(pcu, JUMP_TO_BTLDR, NULL, 0);
|
||||
if (error) {
|
||||
dev_err(pcu->dev,
|
||||
|
||||
@@ -365,7 +365,7 @@ static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
|
||||
if (mode > IQS269_CHx_ENG_A_ATI_MODE_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_a = be16_to_cpu(ch_reg[ch_num].engine_a);
|
||||
|
||||
@@ -375,8 +375,6 @@ static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
|
||||
ch_reg[ch_num].engine_a = cpu_to_be16(engine_a);
|
||||
iqs269->ati_current = false;
|
||||
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -389,9 +387,9 @@ static int iqs269_ati_mode_get(struct iqs269_private *iqs269,
|
||||
if (ch_num >= IQS269_NUM_CH)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_a = be16_to_cpu(ch_reg[ch_num].engine_a);
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
engine_a &= IQS269_CHx_ENG_A_ATI_MODE_MASK;
|
||||
*mode = (engine_a >> IQS269_CHx_ENG_A_ATI_MODE_SHIFT);
|
||||
@@ -429,7 +427,7 @@ static int iqs269_ati_base_set(struct iqs269_private *iqs269,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
|
||||
|
||||
@@ -439,8 +437,6 @@ static int iqs269_ati_base_set(struct iqs269_private *iqs269,
|
||||
ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
|
||||
iqs269->ati_current = false;
|
||||
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -453,9 +449,9 @@ static int iqs269_ati_base_get(struct iqs269_private *iqs269,
|
||||
if (ch_num >= IQS269_NUM_CH)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
switch (engine_b & IQS269_CHx_ENG_B_ATI_BASE_MASK) {
|
||||
case IQS269_CHx_ENG_B_ATI_BASE_75:
|
||||
@@ -491,7 +487,7 @@ static int iqs269_ati_target_set(struct iqs269_private *iqs269,
|
||||
if (target > IQS269_CHx_ENG_B_ATI_TARGET_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
|
||||
|
||||
@@ -501,8 +497,6 @@ static int iqs269_ati_target_set(struct iqs269_private *iqs269,
|
||||
ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
|
||||
iqs269->ati_current = false;
|
||||
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -515,10 +509,9 @@ static int iqs269_ati_target_get(struct iqs269_private *iqs269,
|
||||
if (ch_num >= IQS269_NUM_CH)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
|
||||
mutex_unlock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
engine_b = be16_to_cpu(ch_reg[ch_num].engine_b);
|
||||
*target = (engine_b & IQS269_CHx_ENG_B_ATI_TARGET_MASK) * 32;
|
||||
|
||||
return 0;
|
||||
@@ -557,7 +550,6 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
|
||||
const struct fwnode_handle *ch_node)
|
||||
{
|
||||
struct i2c_client *client = iqs269->client;
|
||||
struct fwnode_handle *ev_node;
|
||||
struct iqs269_ch_reg *ch_reg;
|
||||
u16 engine_a, engine_b;
|
||||
unsigned int reg, val;
|
||||
@@ -734,8 +726,9 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
|
||||
ev_node = fwnode_get_named_child_node(ch_node,
|
||||
iqs269_events[i].name);
|
||||
struct fwnode_handle *ev_node __free(fwnode_handle) =
|
||||
fwnode_get_named_child_node(ch_node,
|
||||
iqs269_events[i].name);
|
||||
if (!ev_node)
|
||||
continue;
|
||||
|
||||
@@ -744,7 +737,6 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
|
||||
dev_err(&client->dev,
|
||||
"Invalid channel %u threshold: %u\n",
|
||||
reg, val);
|
||||
fwnode_handle_put(ev_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -758,7 +750,6 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
|
||||
dev_err(&client->dev,
|
||||
"Invalid channel %u hysteresis: %u\n",
|
||||
reg, val);
|
||||
fwnode_handle_put(ev_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -774,7 +765,6 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
|
||||
}
|
||||
|
||||
error = fwnode_property_read_u32(ev_node, "linux,code", &val);
|
||||
fwnode_handle_put(ev_node);
|
||||
if (error == -EINVAL) {
|
||||
continue;
|
||||
} else if (error) {
|
||||
@@ -1199,7 +1189,7 @@ static int iqs269_dev_init(struct iqs269_private *iqs269)
|
||||
{
|
||||
int error;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
/*
|
||||
* Early revisions of silicon require the following workaround in order
|
||||
@@ -1210,19 +1200,19 @@ static int iqs269_dev_init(struct iqs269_private *iqs269)
|
||||
error = regmap_multi_reg_write(iqs269->regmap, iqs269_tws_init,
|
||||
ARRAY_SIZE(iqs269_tws_init));
|
||||
if (error)
|
||||
goto err_mutex;
|
||||
return error;
|
||||
}
|
||||
|
||||
error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI,
|
||||
IQS269_HALL_UI_ENABLE,
|
||||
iqs269->hall_enable ? ~0 : 0);
|
||||
if (error)
|
||||
goto err_mutex;
|
||||
return error;
|
||||
|
||||
error = regmap_raw_write(iqs269->regmap, IQS269_SYS_SETTINGS,
|
||||
&iqs269->sys_reg, sizeof(iqs269->sys_reg));
|
||||
if (error)
|
||||
goto err_mutex;
|
||||
return error;
|
||||
|
||||
/*
|
||||
* The following delay gives the device time to deassert its RDY output
|
||||
@@ -1232,10 +1222,7 @@ static int iqs269_dev_init(struct iqs269_private *iqs269)
|
||||
|
||||
iqs269->ati_current = true;
|
||||
|
||||
err_mutex:
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return error;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iqs269_input_init(struct iqs269_private *iqs269)
|
||||
@@ -1580,13 +1567,11 @@ static ssize_t hall_enable_store(struct device *dev,
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
iqs269->hall_enable = val;
|
||||
iqs269->ati_current = false;
|
||||
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -1643,13 +1628,11 @@ static ssize_t rx_enable_store(struct device *dev,
|
||||
if (val > 0xFF)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&iqs269->lock);
|
||||
guard(mutex)(&iqs269->lock);
|
||||
|
||||
ch_reg[iqs269->ch_num].rx_enable = val;
|
||||
iqs269->ati_current = false;
|
||||
|
||||
mutex_unlock(&iqs269->lock);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@@ -462,7 +462,6 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
{
|
||||
struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
|
||||
struct i2c_client *client = iqs626->client;
|
||||
struct fwnode_handle *ev_node;
|
||||
const char *ev_name;
|
||||
u8 *thresh, *hyst;
|
||||
unsigned int val;
|
||||
@@ -501,6 +500,7 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
if (!iqs626_channels[ch_id].events[i])
|
||||
continue;
|
||||
|
||||
struct fwnode_handle *ev_node __free(fwnode_handle) = NULL;
|
||||
if (ch_id == IQS626_CH_TP_2 || ch_id == IQS626_CH_TP_3) {
|
||||
/*
|
||||
* Trackpad touch events are simply described under the
|
||||
@@ -530,7 +530,6 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
dev_err(&client->dev,
|
||||
"Invalid input type: %u\n",
|
||||
val);
|
||||
fwnode_handle_put(ev_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -545,7 +544,6 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
dev_err(&client->dev,
|
||||
"Invalid %s channel hysteresis: %u\n",
|
||||
fwnode_get_name(ch_node), val);
|
||||
fwnode_handle_put(ev_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -566,7 +564,6 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
dev_err(&client->dev,
|
||||
"Invalid %s channel threshold: %u\n",
|
||||
fwnode_get_name(ch_node), val);
|
||||
fwnode_handle_put(ev_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -575,8 +572,6 @@ iqs626_parse_events(struct iqs626_private *iqs626,
|
||||
else
|
||||
*(thresh + iqs626_events[i].th_offs) = val;
|
||||
}
|
||||
|
||||
fwnode_handle_put(ev_node);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -774,12 +769,12 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
|
||||
for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
|
||||
u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
|
||||
u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
|
||||
struct fwnode_handle *tc_node;
|
||||
char tc_name[10];
|
||||
|
||||
snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
|
||||
|
||||
tc_node = fwnode_get_named_child_node(ch_node, tc_name);
|
||||
struct fwnode_handle *tc_node __free(fwnode_handle) =
|
||||
fwnode_get_named_child_node(ch_node, tc_name);
|
||||
if (!tc_node)
|
||||
continue;
|
||||
|
||||
@@ -790,7 +785,6 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
|
||||
dev_err(&client->dev,
|
||||
"Invalid %s %s ATI base: %u\n",
|
||||
fwnode_get_name(ch_node), tc_name, val);
|
||||
fwnode_handle_put(tc_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -803,14 +797,11 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
|
||||
dev_err(&client->dev,
|
||||
"Invalid %s %s threshold: %u\n",
|
||||
fwnode_get_name(ch_node), tc_name, val);
|
||||
fwnode_handle_put(tc_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*thresh = val;
|
||||
}
|
||||
|
||||
fwnode_handle_put(tc_node);
|
||||
}
|
||||
|
||||
if (!fwnode_property_present(ch_node, "linux,keycodes"))
|
||||
@@ -1233,7 +1224,6 @@ static int iqs626_parse_prop(struct iqs626_private *iqs626)
|
||||
{
|
||||
struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
|
||||
struct i2c_client *client = iqs626->client;
|
||||
struct fwnode_handle *ch_node;
|
||||
unsigned int val;
|
||||
int error, i;
|
||||
u16 general;
|
||||
@@ -1375,13 +1365,13 @@ static int iqs626_parse_prop(struct iqs626_private *iqs626)
|
||||
sys_reg->active = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iqs626_channels); i++) {
|
||||
ch_node = device_get_named_child_node(&client->dev,
|
||||
iqs626_channels[i].name);
|
||||
struct fwnode_handle *ch_node __free(fwnode_handle) =
|
||||
device_get_named_child_node(&client->dev,
|
||||
iqs626_channels[i].name);
|
||||
if (!ch_node)
|
||||
continue;
|
||||
|
||||
error = iqs626_parse_channel(iqs626, ch_node, i);
|
||||
fwnode_handle_put(ch_node);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
||||
@@ -2385,9 +2385,9 @@ static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
|
||||
for (i = 0; i < ARRAY_SIZE(iqs7222_kp_events); i++) {
|
||||
const char *event_name = iqs7222_kp_events[i].name;
|
||||
u16 event_enable = iqs7222_kp_events[i].enable;
|
||||
struct fwnode_handle *event_node;
|
||||
|
||||
event_node = fwnode_get_named_child_node(chan_node, event_name);
|
||||
struct fwnode_handle *event_node __free(fwnode_handle) =
|
||||
fwnode_get_named_child_node(chan_node, event_name);
|
||||
if (!event_node)
|
||||
continue;
|
||||
|
||||
@@ -2408,7 +2408,6 @@ static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
|
||||
dev_err(&client->dev,
|
||||
"Invalid %s press timeout: %u\n",
|
||||
fwnode_get_name(event_node), val);
|
||||
fwnode_handle_put(event_node);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -2418,7 +2417,6 @@ static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
|
||||
dev_err(&client->dev,
|
||||
"Failed to read %s press timeout: %d\n",
|
||||
fwnode_get_name(event_node), error);
|
||||
fwnode_handle_put(event_node);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -2429,7 +2427,6 @@ static int iqs7222_parse_chan(struct iqs7222_private *iqs7222,
|
||||
dev_desc->touch_link - (i ? 0 : 2),
|
||||
&iqs7222->kp_type[chan_index][i],
|
||||
&iqs7222->kp_code[chan_index][i]);
|
||||
fwnode_handle_put(event_node);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@@ -2604,10 +2601,10 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iqs7222_sl_events); i++) {
|
||||
const char *event_name = iqs7222_sl_events[i].name;
|
||||
struct fwnode_handle *event_node;
|
||||
enum iqs7222_reg_key_id reg_key;
|
||||
|
||||
event_node = fwnode_get_named_child_node(sldr_node, event_name);
|
||||
struct fwnode_handle *event_node __free(fwnode_handle) =
|
||||
fwnode_get_named_child_node(sldr_node, event_name);
|
||||
if (!event_node)
|
||||
continue;
|
||||
|
||||
@@ -2639,7 +2636,6 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222,
|
||||
: sldr_setup[4 + reg_offset],
|
||||
NULL,
|
||||
&iqs7222->sl_code[sldr_index][i]);
|
||||
fwnode_handle_put(event_node);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@@ -2742,9 +2738,9 @@ static int iqs7222_parse_tpad(struct iqs7222_private *iqs7222,
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iqs7222_tp_events); i++) {
|
||||
const char *event_name = iqs7222_tp_events[i].name;
|
||||
struct fwnode_handle *event_node;
|
||||
|
||||
event_node = fwnode_get_named_child_node(tpad_node, event_name);
|
||||
struct fwnode_handle *event_node __free(fwnode_handle) =
|
||||
fwnode_get_named_child_node(tpad_node, event_name);
|
||||
if (!event_node)
|
||||
continue;
|
||||
|
||||
@@ -2760,7 +2756,6 @@ static int iqs7222_parse_tpad(struct iqs7222_private *iqs7222,
|
||||
iqs7222_tp_events[i].link, 1566,
|
||||
NULL,
|
||||
&iqs7222->tp_code[i]);
|
||||
fwnode_handle_put(event_node);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@@ -2818,9 +2813,9 @@ static int iqs7222_parse_reg_grp(struct iqs7222_private *iqs7222,
|
||||
int reg_grp_index)
|
||||
{
|
||||
struct i2c_client *client = iqs7222->client;
|
||||
struct fwnode_handle *reg_grp_node;
|
||||
int error;
|
||||
|
||||
struct fwnode_handle *reg_grp_node __free(fwnode_handle) = NULL;
|
||||
if (iqs7222_reg_grp_names[reg_grp]) {
|
||||
char reg_grp_name[16];
|
||||
|
||||
@@ -2838,14 +2833,17 @@ static int iqs7222_parse_reg_grp(struct iqs7222_private *iqs7222,
|
||||
|
||||
error = iqs7222_parse_props(iqs7222, reg_grp_node, reg_grp_index,
|
||||
reg_grp, IQS7222_REG_KEY_NONE);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (!error && iqs7222_parse_extra[reg_grp])
|
||||
if (iqs7222_parse_extra[reg_grp]) {
|
||||
error = iqs7222_parse_extra[reg_grp](iqs7222, reg_grp_node,
|
||||
reg_grp_index);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
fwnode_handle_put(reg_grp_node);
|
||||
|
||||
return error;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iqs7222_parse_all(struct iqs7222_private *iqs7222)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/* CONTROL REGISTER 1 BITS */
|
||||
#define PC1_OFF 0x7F
|
||||
#define PC1_ON (1 << 7)
|
||||
/* Data ready funtion enable bit: set during probe if using irq mode */
|
||||
/* Data ready function enable bit: set during probe if using irq mode */
|
||||
#define DRDYE (1 << 5)
|
||||
/* DATA CONTROL REGISTER BITS */
|
||||
#define ODR12_5F 0
|
||||
@@ -314,9 +314,8 @@ static ssize_t kxtj9_set_poll(struct device *dev, struct device_attribute *attr,
|
||||
return error;
|
||||
|
||||
/* Lock the device to prevent races with open/close (and itself) */
|
||||
mutex_lock(&input_dev->mutex);
|
||||
|
||||
disable_irq(client->irq);
|
||||
guard(mutex)(&input_dev->mutex);
|
||||
guard(disable_irq)(&client->irq);
|
||||
|
||||
/*
|
||||
* Set current interval to the greater of the minimum interval or
|
||||
@@ -326,9 +325,6 @@ static ssize_t kxtj9_set_poll(struct device *dev, struct device_attribute *attr,
|
||||
|
||||
kxtj9_update_odr(tj9, tj9->last_poll_interval);
|
||||
|
||||
enable_irq(client->irq);
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -504,12 +500,11 @@ static int kxtj9_suspend(struct device *dev)
|
||||
struct kxtj9_data *tj9 = i2c_get_clientdata(client);
|
||||
struct input_dev *input_dev = tj9->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
guard(mutex)(&input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(input_dev))
|
||||
kxtj9_disable(tj9);
|
||||
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -519,12 +514,11 @@ static int kxtj9_resume(struct device *dev)
|
||||
struct kxtj9_data *tj9 = i2c_get_clientdata(client);
|
||||
struct input_dev *input_dev = tj9->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
guard(mutex)(&input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(input_dev))
|
||||
kxtj9_enable(tj9);
|
||||
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ static struct platform_driver m68kspkr_platform_driver = {
|
||||
.name = "m68kspkr",
|
||||
},
|
||||
.probe = m68kspkr_probe,
|
||||
.remove_new = m68kspkr_remove,
|
||||
.remove = m68kspkr_remove,
|
||||
.shutdown = m68kspkr_shutdown,
|
||||
};
|
||||
|
||||
|
||||
@@ -153,19 +153,19 @@ static void max8997_haptic_enable(struct max8997_haptic *chip)
|
||||
{
|
||||
int error;
|
||||
|
||||
mutex_lock(&chip->mutex);
|
||||
guard(mutex)(&chip->mutex);
|
||||
|
||||
error = max8997_haptic_set_duty_cycle(chip);
|
||||
if (error) {
|
||||
dev_err(chip->dev, "set_pwm_cycle failed, error: %d\n", error);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!chip->enabled) {
|
||||
error = regulator_enable(chip->regulator);
|
||||
if (error) {
|
||||
dev_err(chip->dev, "Failed to enable regulator\n");
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
max8997_haptic_configure(chip);
|
||||
if (chip->mode == MAX8997_EXTERNAL_MODE) {
|
||||
@@ -173,19 +173,16 @@ static void max8997_haptic_enable(struct max8997_haptic *chip)
|
||||
if (error) {
|
||||
dev_err(chip->dev, "Failed to enable PWM\n");
|
||||
regulator_disable(chip->regulator);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
}
|
||||
chip->enabled = true;
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&chip->mutex);
|
||||
}
|
||||
|
||||
static void max8997_haptic_disable(struct max8997_haptic *chip)
|
||||
{
|
||||
mutex_lock(&chip->mutex);
|
||||
guard(mutex)(&chip->mutex);
|
||||
|
||||
if (chip->enabled) {
|
||||
chip->enabled = false;
|
||||
@@ -194,8 +191,6 @@ static void max8997_haptic_disable(struct max8997_haptic *chip)
|
||||
pwm_disable(chip->pwm);
|
||||
regulator_disable(chip->regulator);
|
||||
}
|
||||
|
||||
mutex_unlock(&chip->mutex);
|
||||
}
|
||||
|
||||
static void max8997_haptic_play_effect_work(struct work_struct *work)
|
||||
@@ -389,7 +384,7 @@ static struct platform_driver max8997_haptic_driver = {
|
||||
.pm = pm_sleep_ptr(&max8997_haptic_pm_ops),
|
||||
},
|
||||
.probe = max8997_haptic_probe,
|
||||
.remove_new = max8997_haptic_remove,
|
||||
.remove = max8997_haptic_remove,
|
||||
.id_table = max8997_haptic_id,
|
||||
};
|
||||
module_platform_driver(max8997_haptic_driver);
|
||||
|
||||
@@ -253,7 +253,7 @@ static void mc13783_pwrbutton_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver mc13783_pwrbutton_driver = {
|
||||
.probe = mc13783_pwrbutton_probe,
|
||||
.remove_new = mc13783_pwrbutton_remove,
|
||||
.remove = mc13783_pwrbutton_remove,
|
||||
.driver = {
|
||||
.name = "mc13783-pwrbutton",
|
||||
},
|
||||
|
||||
@@ -310,7 +310,7 @@ MODULE_DEVICE_TABLE(of, of_palmas_pwr_match);
|
||||
|
||||
static struct platform_driver palmas_pwron_driver = {
|
||||
.probe = palmas_pwron_probe,
|
||||
.remove_new = palmas_pwron_remove,
|
||||
.remove = palmas_pwron_remove,
|
||||
.driver = {
|
||||
.name = "palmas_pwrbutton",
|
||||
.of_match_table = of_match_ptr(of_palmas_pwr_match),
|
||||
|
||||
@@ -112,7 +112,7 @@ static void pcap_keys_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver pcap_keys_device_driver = {
|
||||
.probe = pcap_keys_probe,
|
||||
.remove_new = pcap_keys_remove,
|
||||
.remove = pcap_keys_remove,
|
||||
.driver = {
|
||||
.name = "pcap-keys",
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ static struct platform_driver pcf50633_input_driver = {
|
||||
.name = "pcf50633-input",
|
||||
},
|
||||
.probe = pcf50633_input_probe,
|
||||
.remove_new = pcf50633_input_remove,
|
||||
.remove = pcf50633_input_remove,
|
||||
};
|
||||
module_platform_driver(pcf50633_input_driver);
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ static struct platform_driver pcspkr_platform_driver = {
|
||||
.pm = &pcspkr_pm_ops,
|
||||
},
|
||||
.probe = pcspkr_probe,
|
||||
.remove_new = pcspkr_remove,
|
||||
.remove = pcspkr_remove,
|
||||
.shutdown = pcspkr_shutdown,
|
||||
};
|
||||
module_platform_driver(pcspkr_platform_driver);
|
||||
|
||||
@@ -465,7 +465,7 @@ MODULE_DEVICE_TABLE(of, pm8941_pwr_key_id_table);
|
||||
|
||||
static struct platform_driver pm8941_pwrkey_driver = {
|
||||
.probe = pm8941_pwrkey_probe,
|
||||
.remove_new = pm8941_pwrkey_remove,
|
||||
.remove = pm8941_pwrkey_remove,
|
||||
.driver = {
|
||||
.name = "pm8941-pwrkey",
|
||||
.pm = pm_sleep_ptr(&pm8941_pwr_key_pm_ops),
|
||||
|
||||
@@ -194,22 +194,18 @@ static void powermate_sync_state(struct powermate_device *pm)
|
||||
static void powermate_config_complete(struct urb *urb)
|
||||
{
|
||||
struct powermate_device *pm = urb->context;
|
||||
unsigned long flags;
|
||||
|
||||
if (urb->status)
|
||||
printk(KERN_ERR "powermate: config urb returned %d\n", urb->status);
|
||||
|
||||
spin_lock_irqsave(&pm->lock, flags);
|
||||
guard(spinlock_irqsave)(&pm->lock);
|
||||
powermate_sync_state(pm);
|
||||
spin_unlock_irqrestore(&pm->lock, flags);
|
||||
}
|
||||
|
||||
/* Set the LED up as described and begin the sync with the hardware if required */
|
||||
static void powermate_pulse_led(struct powermate_device *pm, int static_brightness, int pulse_speed,
|
||||
int pulse_table, int pulse_asleep, int pulse_awake)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (pulse_speed < 0)
|
||||
pulse_speed = 0;
|
||||
if (pulse_table < 0)
|
||||
@@ -222,8 +218,7 @@ static void powermate_pulse_led(struct powermate_device *pm, int static_brightne
|
||||
pulse_asleep = !!pulse_asleep;
|
||||
pulse_awake = !!pulse_awake;
|
||||
|
||||
|
||||
spin_lock_irqsave(&pm->lock, flags);
|
||||
guard(spinlock_irqsave)(&pm->lock);
|
||||
|
||||
/* mark state updates which are required */
|
||||
if (static_brightness != pm->static_brightness) {
|
||||
@@ -245,8 +240,6 @@ static void powermate_pulse_led(struct powermate_device *pm, int static_brightne
|
||||
}
|
||||
|
||||
powermate_sync_state(pm);
|
||||
|
||||
spin_unlock_irqrestore(&pm->lock, flags);
|
||||
}
|
||||
|
||||
/* Callback from the Input layer when an event arrives from userspace to configure the LED */
|
||||
|
||||
@@ -203,9 +203,9 @@ static int pwm_beeper_suspend(struct device *dev)
|
||||
* beeper->suspended, but to ensure that pwm_beeper_event
|
||||
* does not re-submit work once flag is set.
|
||||
*/
|
||||
spin_lock_irq(&beeper->input->event_lock);
|
||||
beeper->suspended = true;
|
||||
spin_unlock_irq(&beeper->input->event_lock);
|
||||
scoped_guard(spinlock_irq, &beeper->input->event_lock) {
|
||||
beeper->suspended = true;
|
||||
}
|
||||
|
||||
pwm_beeper_stop(beeper);
|
||||
|
||||
@@ -216,9 +216,9 @@ static int pwm_beeper_resume(struct device *dev)
|
||||
{
|
||||
struct pwm_beeper *beeper = dev_get_drvdata(dev);
|
||||
|
||||
spin_lock_irq(&beeper->input->event_lock);
|
||||
beeper->suspended = false;
|
||||
spin_unlock_irq(&beeper->input->event_lock);
|
||||
scoped_guard(spinlock_irq, &beeper->input->event_lock) {
|
||||
beeper->suspended = false;
|
||||
}
|
||||
|
||||
/* Let worker figure out if we should resume beeping */
|
||||
schedule_work(&beeper->work);
|
||||
|
||||
@@ -83,12 +83,10 @@ static void regulator_haptic_work(struct work_struct *work)
|
||||
struct regulator_haptic *haptic = container_of(work,
|
||||
struct regulator_haptic, work);
|
||||
|
||||
mutex_lock(&haptic->mutex);
|
||||
guard(mutex)(&haptic->mutex);
|
||||
|
||||
if (!haptic->suspended)
|
||||
regulator_haptic_set_voltage(haptic, haptic->magnitude);
|
||||
|
||||
mutex_unlock(&haptic->mutex);
|
||||
}
|
||||
|
||||
static int regulator_haptic_play_effect(struct input_dev *input, void *data,
|
||||
@@ -205,19 +203,15 @@ static int regulator_haptic_suspend(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct regulator_haptic *haptic = platform_get_drvdata(pdev);
|
||||
int error;
|
||||
|
||||
error = mutex_lock_interruptible(&haptic->mutex);
|
||||
if (error)
|
||||
return error;
|
||||
scoped_guard(mutex_intr, &haptic->mutex) {
|
||||
regulator_haptic_set_voltage(haptic, 0);
|
||||
haptic->suspended = true;
|
||||
|
||||
regulator_haptic_set_voltage(haptic, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
haptic->suspended = true;
|
||||
|
||||
mutex_unlock(&haptic->mutex);
|
||||
|
||||
return 0;
|
||||
return -EINTR;
|
||||
}
|
||||
|
||||
static int regulator_haptic_resume(struct device *dev)
|
||||
@@ -226,7 +220,7 @@ static int regulator_haptic_resume(struct device *dev)
|
||||
struct regulator_haptic *haptic = platform_get_drvdata(pdev);
|
||||
unsigned int magnitude;
|
||||
|
||||
mutex_lock(&haptic->mutex);
|
||||
guard(mutex)(&haptic->mutex);
|
||||
|
||||
haptic->suspended = false;
|
||||
|
||||
@@ -234,8 +228,6 @@ static int regulator_haptic_resume(struct device *dev)
|
||||
if (magnitude)
|
||||
regulator_haptic_set_voltage(haptic, magnitude);
|
||||
|
||||
mutex_unlock(&haptic->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
|
||||
struct rotary_encoder *encoder = dev_id;
|
||||
unsigned int state;
|
||||
|
||||
mutex_lock(&encoder->access_mutex);
|
||||
guard(mutex)(&encoder->access_mutex);
|
||||
|
||||
state = rotary_encoder_get_state(encoder);
|
||||
|
||||
@@ -129,8 +129,6 @@ static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
|
||||
break;
|
||||
}
|
||||
|
||||
mutex_unlock(&encoder->access_mutex);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -139,7 +137,7 @@ static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id)
|
||||
struct rotary_encoder *encoder = dev_id;
|
||||
unsigned int state;
|
||||
|
||||
mutex_lock(&encoder->access_mutex);
|
||||
guard(mutex)(&encoder->access_mutex);
|
||||
|
||||
state = rotary_encoder_get_state(encoder);
|
||||
|
||||
@@ -152,8 +150,6 @@ static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id)
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&encoder->access_mutex);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -162,22 +158,19 @@ static irqreturn_t rotary_encoder_quarter_period_irq(int irq, void *dev_id)
|
||||
struct rotary_encoder *encoder = dev_id;
|
||||
unsigned int state;
|
||||
|
||||
mutex_lock(&encoder->access_mutex);
|
||||
guard(mutex)(&encoder->access_mutex);
|
||||
|
||||
state = rotary_encoder_get_state(encoder);
|
||||
|
||||
if ((encoder->last_stable + 1) % 4 == state)
|
||||
if ((encoder->last_stable + 1) % 4 == state) {
|
||||
encoder->dir = 1;
|
||||
else if (encoder->last_stable == (state + 1) % 4)
|
||||
rotary_encoder_report_event(encoder);
|
||||
} else if (encoder->last_stable == (state + 1) % 4) {
|
||||
encoder->dir = -1;
|
||||
else
|
||||
goto out;
|
||||
rotary_encoder_report_event(encoder);
|
||||
}
|
||||
|
||||
rotary_encoder_report_event(encoder);
|
||||
|
||||
out:
|
||||
encoder->last_stable = state;
|
||||
mutex_unlock(&encoder->access_mutex);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -515,7 +515,7 @@ static const struct soc_device_data soc_device_INT33D3 = {
|
||||
};
|
||||
|
||||
/*
|
||||
* Button info for Microsoft Surface 3 (non pro), this is indentical to
|
||||
* Button info for Microsoft Surface 3 (non pro), this is identical to
|
||||
* the PNP0C40 info except that the home button is active-high.
|
||||
*
|
||||
* The Surface 3 Pro also has a MSHW0028 ACPI device, but that uses a custom
|
||||
@@ -612,7 +612,7 @@ MODULE_DEVICE_TABLE(acpi, soc_button_acpi_match);
|
||||
|
||||
static struct platform_driver soc_button_driver = {
|
||||
.probe = soc_button_probe,
|
||||
.remove_new = soc_button_remove,
|
||||
.remove = soc_button_remove,
|
||||
.driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.acpi_match_table = ACPI_PTR(soc_button_acpi_match),
|
||||
|
||||
@@ -69,7 +69,6 @@ static int bbc_spkr_event(struct input_dev *dev, unsigned int type, unsigned int
|
||||
struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent);
|
||||
struct bbc_beep_info *info = &state->u.bbc;
|
||||
unsigned int count = 0;
|
||||
unsigned long flags;
|
||||
|
||||
if (type != EV_SND)
|
||||
return -1;
|
||||
@@ -85,7 +84,7 @@ static int bbc_spkr_event(struct input_dev *dev, unsigned int type, unsigned int
|
||||
|
||||
count = bbc_count_to_reg(info, count);
|
||||
|
||||
spin_lock_irqsave(&state->lock, flags);
|
||||
guard(spinlock_irqsave)(&state->lock);
|
||||
|
||||
if (count) {
|
||||
sbus_writeb(0x01, info->regs + 0);
|
||||
@@ -97,8 +96,6 @@ static int bbc_spkr_event(struct input_dev *dev, unsigned int type, unsigned int
|
||||
sbus_writeb(0x00, info->regs + 0);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&state->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -107,7 +104,6 @@ static int grover_spkr_event(struct input_dev *dev, unsigned int type, unsigned
|
||||
struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent);
|
||||
struct grover_beep_info *info = &state->u.grover;
|
||||
unsigned int count = 0;
|
||||
unsigned long flags;
|
||||
|
||||
if (type != EV_SND)
|
||||
return -1;
|
||||
@@ -121,7 +117,7 @@ static int grover_spkr_event(struct input_dev *dev, unsigned int type, unsigned
|
||||
if (value > 20 && value < 32767)
|
||||
count = 1193182 / value;
|
||||
|
||||
spin_lock_irqsave(&state->lock, flags);
|
||||
guard(spinlock_irqsave)(&state->lock);
|
||||
|
||||
if (count) {
|
||||
/* enable counter 2 */
|
||||
@@ -136,8 +132,6 @@ static int grover_spkr_event(struct input_dev *dev, unsigned int type, unsigned
|
||||
sbus_writeb(sbus_readb(info->enable_reg) & 0xFC, info->enable_reg);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&state->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -188,47 +182,38 @@ static int bbc_beep_probe(struct platform_device *op)
|
||||
{
|
||||
struct sparcspkr_state *state;
|
||||
struct bbc_beep_info *info;
|
||||
struct device_node *dp;
|
||||
int err = -ENOMEM;
|
||||
int err;
|
||||
|
||||
state = kzalloc(sizeof(*state), GFP_KERNEL);
|
||||
state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL);
|
||||
if (!state)
|
||||
goto out_err;
|
||||
return -ENOMEM;
|
||||
|
||||
state->name = "Sparc BBC Speaker";
|
||||
state->event = bbc_spkr_event;
|
||||
spin_lock_init(&state->lock);
|
||||
|
||||
dp = of_find_node_by_path("/");
|
||||
err = -ENODEV;
|
||||
struct device_node *dp __free(device_node) = of_find_node_by_path("/");
|
||||
if (!dp)
|
||||
goto out_free;
|
||||
return -ENODEV;
|
||||
|
||||
info = &state->u.bbc;
|
||||
info->clock_freq = of_getintprop_default(dp, "clock-frequency", 0);
|
||||
of_node_put(dp);
|
||||
if (!info->clock_freq)
|
||||
goto out_free;
|
||||
return -ENODEV;
|
||||
|
||||
info->regs = of_ioremap(&op->resource[0], 0, 6, "bbc beep");
|
||||
if (!info->regs)
|
||||
goto out_free;
|
||||
return -ENODEV;
|
||||
|
||||
platform_set_drvdata(op, state);
|
||||
|
||||
err = sparcspkr_probe(&op->dev);
|
||||
if (err)
|
||||
goto out_clear_drvdata;
|
||||
if (err) {
|
||||
of_iounmap(&op->resource[0], info->regs, 6);
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_clear_drvdata:
|
||||
of_iounmap(&op->resource[0], info->regs, 6);
|
||||
|
||||
out_free:
|
||||
kfree(state);
|
||||
out_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void bbc_remove(struct platform_device *op)
|
||||
@@ -243,8 +228,6 @@ static void bbc_remove(struct platform_device *op)
|
||||
input_unregister_device(input_dev);
|
||||
|
||||
of_iounmap(&op->resource[0], info->regs, 6);
|
||||
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
static const struct of_device_id bbc_beep_match[] = {
|
||||
@@ -262,7 +245,7 @@ static struct platform_driver bbc_beep_driver = {
|
||||
.of_match_table = bbc_beep_match,
|
||||
},
|
||||
.probe = bbc_beep_probe,
|
||||
.remove_new = bbc_remove,
|
||||
.remove = bbc_remove,
|
||||
.shutdown = sparcspkr_shutdown,
|
||||
};
|
||||
|
||||
@@ -272,9 +255,9 @@ static int grover_beep_probe(struct platform_device *op)
|
||||
struct grover_beep_info *info;
|
||||
int err = -ENOMEM;
|
||||
|
||||
state = kzalloc(sizeof(*state), GFP_KERNEL);
|
||||
state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL);
|
||||
if (!state)
|
||||
goto out_err;
|
||||
return err;
|
||||
|
||||
state->name = "Sparc Grover Speaker";
|
||||
state->event = grover_spkr_event;
|
||||
@@ -283,7 +266,7 @@ static int grover_beep_probe(struct platform_device *op)
|
||||
info = &state->u.grover;
|
||||
info->freq_regs = of_ioremap(&op->resource[2], 0, 2, "grover beep freq");
|
||||
if (!info->freq_regs)
|
||||
goto out_free;
|
||||
return err;
|
||||
|
||||
info->enable_reg = of_ioremap(&op->resource[3], 0, 1, "grover beep enable");
|
||||
if (!info->enable_reg)
|
||||
@@ -302,9 +285,7 @@ out_clear_drvdata:
|
||||
|
||||
out_unmap_freq_regs:
|
||||
of_iounmap(&op->resource[2], info->freq_regs, 2);
|
||||
out_free:
|
||||
kfree(state);
|
||||
out_err:
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -321,8 +302,6 @@ static void grover_remove(struct platform_device *op)
|
||||
|
||||
of_iounmap(&op->resource[3], info->enable_reg, 1);
|
||||
of_iounmap(&op->resource[2], info->freq_regs, 2);
|
||||
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
static const struct of_device_id grover_beep_match[] = {
|
||||
@@ -340,7 +319,7 @@ static struct platform_driver grover_beep_driver = {
|
||||
.of_match_table = grover_beep_match,
|
||||
},
|
||||
.probe = grover_beep_probe,
|
||||
.remove_new = grover_remove,
|
||||
.remove = grover_remove,
|
||||
.shutdown = sparcspkr_shutdown,
|
||||
};
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ MODULE_DEVICE_TABLE(platform, tps65219_pwrbtn_id_table);
|
||||
|
||||
static struct platform_driver tps65219_pb_driver = {
|
||||
.probe = tps65219_pb_probe,
|
||||
.remove_new = tps65219_pb_remove,
|
||||
.remove = tps65219_pb_remove,
|
||||
.driver = {
|
||||
.name = "tps65219_pwrbutton",
|
||||
},
|
||||
|
||||
@@ -165,15 +165,10 @@ static DEFINE_SIMPLE_DEV_PM_OPS(twl4030_vibra_pm_ops,
|
||||
|
||||
static bool twl4030_vibra_check_coexist(struct device_node *parent)
|
||||
{
|
||||
struct device_node *node;
|
||||
struct device_node *node __free(device_node) =
|
||||
of_get_child_by_name(parent, "codec");
|
||||
|
||||
node = of_get_child_by_name(parent, "codec");
|
||||
if (node) {
|
||||
of_node_put(node);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return node != NULL;
|
||||
}
|
||||
|
||||
static int twl4030_vibra_probe(struct platform_device *pdev)
|
||||
|
||||
@@ -229,14 +229,13 @@ static DEFINE_SIMPLE_DEV_PM_OPS(twl6040_vibra_pm_ops,
|
||||
static int twl6040_vibra_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *twl6040_core_dev = pdev->dev.parent;
|
||||
struct device_node *twl6040_core_node;
|
||||
struct vibra_info *info;
|
||||
int vddvibl_uV = 0;
|
||||
int vddvibr_uV = 0;
|
||||
int error;
|
||||
|
||||
twl6040_core_node = of_get_child_by_name(twl6040_core_dev->of_node,
|
||||
"vibra");
|
||||
struct device_node *twl6040_core_node __free(device_node) =
|
||||
of_get_child_by_name(twl6040_core_dev->of_node, "vibra");
|
||||
if (!twl6040_core_node) {
|
||||
dev_err(&pdev->dev, "parent of node is missing?\n");
|
||||
return -EINVAL;
|
||||
@@ -244,7 +243,6 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
|
||||
|
||||
info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
|
||||
if (!info) {
|
||||
of_node_put(twl6040_core_node);
|
||||
dev_err(&pdev->dev, "couldn't allocate memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -264,8 +262,6 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
|
||||
of_property_read_u32(twl6040_core_node, "ti,vddvibl-uV", &vddvibl_uV);
|
||||
of_property_read_u32(twl6040_core_node, "ti,vddvibr-uV", &vddvibr_uV);
|
||||
|
||||
of_node_put(twl6040_core_node);
|
||||
|
||||
if ((!info->vibldrv_res && !info->viblmotor_res) ||
|
||||
(!info->vibrdrv_res && !info->vibrmotor_res)) {
|
||||
dev_err(info->dev, "invalid vibra driver/motor resistance\n");
|
||||
|
||||
@@ -271,7 +271,7 @@ static struct key_entry keymap_fs_amilo_pro_v8210[] __initdata = {
|
||||
{ KE_BLUETOOTH, 0x30 }, /* Fn+F10 */
|
||||
{ KE_KEY, 0x31, {KEY_MAIL} }, /* mail button */
|
||||
{ KE_KEY, 0x36, {KEY_WWW} }, /* www button */
|
||||
{ KE_WIFI, 0x78 }, /* satelite dish button */
|
||||
{ KE_WIFI, 0x78 }, /* satellite dish button */
|
||||
{ KE_END, FE_WIFI_LED }
|
||||
};
|
||||
|
||||
@@ -1334,7 +1334,7 @@ static struct platform_driver wistron_driver = {
|
||||
.pm = pm_sleep_ptr(&wistron_pm_ops),
|
||||
},
|
||||
.probe = wistron_probe,
|
||||
.remove_new = wistron_remove,
|
||||
.remove = wistron_remove,
|
||||
};
|
||||
|
||||
static int __init wb_module_init(void)
|
||||
|
||||
@@ -134,7 +134,7 @@ static void wm831x_on_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver wm831x_on_driver = {
|
||||
.probe = wm831x_on_probe,
|
||||
.remove_new = wm831x_on_remove,
|
||||
.remove = wm831x_on_remove,
|
||||
.driver = {
|
||||
.name = "wm831x-on",
|
||||
},
|
||||
|
||||
@@ -377,7 +377,7 @@ send_update:
|
||||
if (len > sizeof(yld->ctl_data->data))
|
||||
len = sizeof(yld->ctl_data->data);
|
||||
|
||||
/* Combine up to <len> consecutive LCD bytes in a singe request
|
||||
/* Combine up to <len> consecutive LCD bytes in a single request
|
||||
*/
|
||||
yld->ctl_data->cmd = CMD_LCD;
|
||||
yld->ctl_data->offset = cpu_to_be16(ix);
|
||||
@@ -614,7 +614,7 @@ static ssize_t show_line3(struct device *dev, struct device_attribute *attr,
|
||||
return show_line(dev, buf, LCD_LINE3_OFFSET, LCD_LINE4_OFFSET);
|
||||
}
|
||||
|
||||
/* Writing to /sys/../lineX will set the coresponding LCD line.
|
||||
/* Writing to /sys/../lineX will set the corresponding LCD line.
|
||||
* - Excess characters are ignored.
|
||||
* - If less characters are written than allowed, the remaining digits are
|
||||
* unchanged.
|
||||
|
||||
Reference in New Issue
Block a user