aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2012-11-03 15:16:12 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2012-11-08 12:10:05 -0500
commit2be975c6d920de989ff5e4bc09ffe87e59d94662 (patch)
tree34b24d6559118a4aedc60bdef265834530cacde9 /drivers
parentfa8e2458ecfc959cd627e25ba86d8eddcb63c887 (diff)
Input: introduce managed input devices (add devres support)
There is a demand from driver's writers to use managed devices framework for their drivers. Unfortunately up to this moment input devices did not provide support for managed devices and that lead to mixing two styles of resource management which usually introduced more bugs, such as manually unregistering input device but relying in devres to free interrupt handler which (unless device is properly shut off) can cause ISR to reference already freed memory. This change introduces devm_input_allocate_device() that will allocate managed instance of input device so that driver writers who prefer using devm_* framework do not have to mix 2 styles. Reviewed-by: Henrik Rydberg <rydberg@euromail.se> Reviewed-by: Tejun Heo <tj@kernel.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/input.c176
1 files changed, 149 insertions, 27 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index f1be1a77edf3..ce01332f7b3a 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -1726,7 +1726,7 @@ EXPORT_SYMBOL_GPL(input_class);
1726/** 1726/**
1727 * input_allocate_device - allocate memory for new input device 1727 * input_allocate_device - allocate memory for new input device
1728 * 1728 *
1729 * Returns prepared struct input_dev or NULL. 1729 * Returns prepared struct input_dev or %NULL.
1730 * 1730 *
1731 * NOTE: Use input_free_device() to free devices that have not been 1731 * NOTE: Use input_free_device() to free devices that have not been
1732 * registered; input_unregister_device() should be used for already 1732 * registered; input_unregister_device() should be used for already
@@ -1753,6 +1753,70 @@ struct input_dev *input_allocate_device(void)
1753} 1753}
1754EXPORT_SYMBOL(input_allocate_device); 1754EXPORT_SYMBOL(input_allocate_device);
1755 1755
1756struct input_devres {
1757 struct input_dev *input;
1758};
1759
1760static int devm_input_device_match(struct device *dev, void *res, void *data)
1761{
1762 struct input_devres *devres = res;
1763
1764 return devres->input == data;
1765}
1766
1767static void devm_input_device_release(struct device *dev, void *res)
1768{
1769 struct input_devres *devres = res;
1770 struct input_dev *input = devres->input;
1771
1772 dev_dbg(dev, "%s: dropping reference to %s\n",
1773 __func__, dev_name(&input->dev));
1774 input_put_device(input);
1775}
1776
1777/**
1778 * devm_input_allocate_device - allocate managed input device
1779 * @dev: device owning the input device being created
1780 *
1781 * Returns prepared struct input_dev or %NULL.
1782 *
1783 * Managed input devices do not need to be explicitly unregistered or
1784 * freed as it will be done automatically when owner device unbinds from
1785 * its driver (or binding fails). Once managed input device is allocated,
1786 * it is ready to be set up and registered in the same fashion as regular
1787 * input device. There are no special devm_input_device_[un]register()
1788 * variants, regular ones work with both managed and unmanaged devices.
1789 *
1790 * NOTE: the owner device is set up as parent of input device and users
1791 * should not override it.
1792 */
1793
1794struct input_dev *devm_input_allocate_device(struct device *dev)
1795{
1796 struct input_dev *input;
1797 struct input_devres *devres;
1798
1799 devres = devres_alloc(devm_input_device_release,
1800 sizeof(struct input_devres), GFP_KERNEL);
1801 if (!devres)
1802 return NULL;
1803
1804 input = input_allocate_device();
1805 if (!input) {
1806 devres_free(devres);
1807 return NULL;
1808 }
1809
1810 input->dev.parent = dev;
1811 input->devres_managed = true;
1812
1813 devres->input = input;
1814 devres_add(dev, devres);
1815
1816 return input;
1817}
1818EXPORT_SYMBOL(devm_input_allocate_device);
1819
1756/** 1820/**
1757 * input_free_device - free memory occupied by input_dev structure 1821 * input_free_device - free memory occupied by input_dev structure
1758 * @dev: input device to free 1822 * @dev: input device to free
@@ -1769,8 +1833,14 @@ EXPORT_SYMBOL(input_allocate_device);
1769 */ 1833 */
1770void input_free_device(struct input_dev *dev) 1834void input_free_device(struct input_dev *dev)
1771{ 1835{
1772 if (dev) 1836 if (dev) {
1837 if (dev->devres_managed)
1838 WARN_ON(devres_destroy(dev->dev.parent,
1839 devm_input_device_release,
1840 devm_input_device_match,
1841 dev));
1773 input_put_device(dev); 1842 input_put_device(dev);
1843 }
1774} 1844}
1775EXPORT_SYMBOL(input_free_device); 1845EXPORT_SYMBOL(input_free_device);
1776 1846
@@ -1891,6 +1961,38 @@ static void input_cleanse_bitmasks(struct input_dev *dev)
1891 INPUT_CLEANSE_BITMASK(dev, SW, sw); 1961 INPUT_CLEANSE_BITMASK(dev, SW, sw);
1892} 1962}
1893 1963
1964static void __input_unregister_device(struct input_dev *dev)
1965{
1966 struct input_handle *handle, *next;
1967
1968 input_disconnect_device(dev);
1969
1970 mutex_lock(&input_mutex);
1971
1972 list_for_each_entry_safe(handle, next, &dev->h_list, d_node)
1973 handle->handler->disconnect(handle);
1974 WARN_ON(!list_empty(&dev->h_list));
1975
1976 del_timer_sync(&dev->timer);
1977 list_del_init(&dev->node);
1978
1979 input_wakeup_procfs_readers();
1980
1981 mutex_unlock(&input_mutex);
1982
1983 device_del(&dev->dev);
1984}
1985
1986static void devm_input_device_unregister(struct device *dev, void *res)
1987{
1988 struct input_devres *devres = res;
1989 struct input_dev *input = devres->input;
1990
1991 dev_dbg(dev, "%s: unregistering device %s\n",
1992 __func__, dev_name(&input->dev));
1993 __input_unregister_device(input);
1994}
1995
1894/** 1996/**
1895 * input_register_device - register device with input core 1997 * input_register_device - register device with input core
1896 * @dev: device to be registered 1998 * @dev: device to be registered
@@ -1906,11 +2008,21 @@ static void input_cleanse_bitmasks(struct input_dev *dev)
1906int input_register_device(struct input_dev *dev) 2008int input_register_device(struct input_dev *dev)
1907{ 2009{
1908 static atomic_t input_no = ATOMIC_INIT(0); 2010 static atomic_t input_no = ATOMIC_INIT(0);
2011 struct input_devres *devres = NULL;
1909 struct input_handler *handler; 2012 struct input_handler *handler;
1910 unsigned int packet_size; 2013 unsigned int packet_size;
1911 const char *path; 2014 const char *path;
1912 int error; 2015 int error;
1913 2016
2017 if (dev->devres_managed) {
2018 devres = devres_alloc(devm_input_device_unregister,
2019 sizeof(struct input_devres), GFP_KERNEL);
2020 if (!devres)
2021 return -ENOMEM;
2022
2023 devres->input = dev;
2024 }
2025
1914 /* Every input device generates EV_SYN/SYN_REPORT events. */ 2026 /* Every input device generates EV_SYN/SYN_REPORT events. */
1915 __set_bit(EV_SYN, dev->evbit); 2027 __set_bit(EV_SYN, dev->evbit);
1916 2028
@@ -1926,8 +2038,10 @@ int input_register_device(struct input_dev *dev)
1926 2038
1927 dev->max_vals = max(dev->hint_events_per_packet, packet_size) + 2; 2039 dev->max_vals = max(dev->hint_events_per_packet, packet_size) + 2;
1928 dev->vals = kcalloc(dev->max_vals, sizeof(*dev->vals), GFP_KERNEL); 2040 dev->vals = kcalloc(dev->max_vals, sizeof(*dev->vals), GFP_KERNEL);
1929 if (!dev->vals) 2041 if (!dev->vals) {
1930 return -ENOMEM; 2042 error = -ENOMEM;
2043 goto err_devres_free;
2044 }
1931 2045
1932 /* 2046 /*
1933 * If delay and period are pre-set by the driver, then autorepeating 2047 * If delay and period are pre-set by the driver, then autorepeating
@@ -1952,7 +2066,7 @@ int input_register_device(struct input_dev *dev)
1952 2066
1953 error = device_add(&dev->dev); 2067 error = device_add(&dev->dev);
1954 if (error) 2068 if (error)
1955 return error; 2069 goto err_free_vals;
1956 2070
1957 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL); 2071 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
1958 pr_info("%s as %s\n", 2072 pr_info("%s as %s\n",
@@ -1961,10 +2075,8 @@ int input_register_device(struct input_dev *dev)
1961 kfree(path); 2075 kfree(path);
1962 2076
1963 error = mutex_lock_interruptible(&input_mutex); 2077 error = mutex_lock_interruptible(&input_mutex);
1964 if (error) { 2078 if (error)
1965 device_del(&dev->dev); 2079 goto err_device_del;
1966 return error;
1967 }
1968 2080
1969 list_add_tail(&dev->node, &input_dev_list); 2081 list_add_tail(&dev->node, &input_dev_list);
1970 2082
@@ -1975,7 +2087,21 @@ int input_register_device(struct input_dev *dev)
1975 2087
1976 mutex_unlock(&input_mutex); 2088 mutex_unlock(&input_mutex);
1977 2089
2090 if (dev->devres_managed) {
2091 dev_dbg(dev->dev.parent, "%s: registering %s with devres.\n",
2092 __func__, dev_name(&dev->dev));
2093 devres_add(dev->dev.parent, devres);
2094 }
1978 return 0; 2095 return 0;
2096
2097err_device_del:
2098 device_del(&dev->dev);
2099err_free_vals:
2100 kfree(dev->vals);
2101 dev->vals = NULL;
2102err_devres_free:
2103 devres_free(devres);
2104 return error;
1979} 2105}
1980EXPORT_SYMBOL(input_register_device); 2106EXPORT_SYMBOL(input_register_device);
1981 2107
@@ -1988,24 +2114,20 @@ EXPORT_SYMBOL(input_register_device);
1988 */ 2114 */
1989void input_unregister_device(struct input_dev *dev) 2115void input_unregister_device(struct input_dev *dev)
1990{ 2116{
1991 struct input_handle *handle, *next; 2117 if (dev->devres_managed) {
1992 2118 WARN_ON(devres_destroy(dev->dev.parent,
1993 input_disconnect_device(dev); 2119 devm_input_device_unregister,
1994 2120 devm_input_device_match,
1995 mutex_lock(&input_mutex); 2121 dev));
1996 2122 __input_unregister_device(dev);
1997 list_for_each_entry_safe(handle, next, &dev->h_list, d_node) 2123 /*
1998 handle->handler->disconnect(handle); 2124 * We do not do input_put_device() here because it will be done
1999 WARN_ON(!list_empty(&dev->h_list)); 2125 * when 2nd devres fires up.
2000 2126 */
2001 del_timer_sync(&dev->timer); 2127 } else {
2002 list_del_init(&dev->node); 2128 __input_unregister_device(dev);
2003 2129 input_put_device(dev);
2004 input_wakeup_procfs_readers(); 2130 }
2005
2006 mutex_unlock(&input_mutex);
2007
2008 device_unregister(&dev->dev);
2009} 2131}
2010EXPORT_SYMBOL(input_unregister_device); 2132EXPORT_SYMBOL(input_unregister_device);
2011 2133