diff options
Diffstat (limited to 'drivers/input/mouse/psmouse-base.c')
-rw-r--r-- | drivers/input/mouse/psmouse-base.c | 30 |
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); |