aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse/psmouse-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/mouse/psmouse-base.c')
-rw-r--r--drivers/input/mouse/psmouse-base.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 3c76f6f9c835..a0671e57dd8b 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -1401,25 +1401,29 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev
1401 1401
1402 psmouse = serio_get_drvdata(serio); 1402 psmouse = serio_get_drvdata(serio);
1403 1403
1404 if (psmouse->state == PSMOUSE_IGNORE) { 1404 if (attr->protect) {
1405 retval = -ENODEV; 1405 if (psmouse->state == PSMOUSE_IGNORE) {
1406 goto out_unlock; 1406 retval = -ENODEV;
1407 } 1407 goto out_unlock;
1408 }
1408 1409
1409 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1410 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1410 parent = serio_get_drvdata(serio->parent); 1411 parent = serio_get_drvdata(serio->parent);
1411 psmouse_deactivate(parent); 1412 psmouse_deactivate(parent);
1412 } 1413 }
1413 1414
1414 psmouse_deactivate(psmouse); 1415 psmouse_deactivate(psmouse);
1416 }
1415 1417
1416 retval = attr->set(psmouse, attr->data, buf, count); 1418 retval = attr->set(psmouse, attr->data, buf, count);
1417 1419
1418 if (retval != -ENODEV) 1420 if (attr->protect) {
1419 psmouse_activate(psmouse); 1421 if (retval != -ENODEV)
1422 psmouse_activate(psmouse);
1420 1423
1421 if (parent) 1424 if (parent)
1422 psmouse_activate(parent); 1425 psmouse_activate(parent);
1426 }
1423 1427
1424 out_unlock: 1428 out_unlock:
1425 mutex_unlock(&psmouse_mutex); 1429 mutex_unlock(&psmouse_mutex);