rmi_bus.c (552c69b36ebd966186573b9c7a286b390935cce1) rmi_bus.c (24d28e4f1271cb2f91613dada8f2acccd00eff56)
1/*
2 * Copyright (c) 2011-2016 Synaptics Incorporated
3 * Copyright (c) 2011 Unixphere
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9
10#include <linux/kernel.h>
11#include <linux/device.h>
1/*
2 * Copyright (c) 2011-2016 Synaptics Incorporated
3 * Copyright (c) 2011 Unixphere
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */
9
10#include <linux/kernel.h>
11#include <linux/device.h>
12#include <linux/irq.h>
13#include <linux/irqdomain.h>
12#include <linux/list.h>
13#include <linux/pm.h>
14#include <linux/rmi.h>
15#include <linux/slab.h>
16#include <linux/types.h>
17#include <linux/of.h>
18#include "rmi_bus.h"
19#include "rmi_driver.h"

--- 142 unchanged lines hidden (view full) ---

162 fn->fd.function_number);
163 fn->dev.of_node = of_get_child_by_name(node, of_name);
164}
165#else
166static inline void rmi_function_of_probe(struct rmi_function *fn)
167{}
168#endif
169
14#include <linux/list.h>
15#include <linux/pm.h>
16#include <linux/rmi.h>
17#include <linux/slab.h>
18#include <linux/types.h>
19#include <linux/of.h>
20#include "rmi_bus.h"
21#include "rmi_driver.h"

--- 142 unchanged lines hidden (view full) ---

164 fn->fd.function_number);
165 fn->dev.of_node = of_get_child_by_name(node, of_name);
166}
167#else
168static inline void rmi_function_of_probe(struct rmi_function *fn)
169{}
170#endif
171
172static struct irq_chip rmi_irq_chip = {
173 .name = "rmi4",
174};
175
176static int rmi_create_function_irq(struct rmi_function *fn,
177 struct rmi_function_handler *handler)
178{
179 struct rmi_driver_data *drvdata = dev_get_drvdata(&fn->rmi_dev->dev);
180 int i, error;
181
182 for (i = 0; i < fn->num_of_irqs; i++) {
183 set_bit(fn->irq_pos + i, fn->irq_mask);
184
185 fn->irq[i] = irq_create_mapping(drvdata->irqdomain,
186 fn->irq_pos + i);
187
188 irq_set_chip_data(fn->irq[i], fn);
189 irq_set_chip_and_handler(fn->irq[i], &rmi_irq_chip,
190 handle_simple_irq);
191 irq_set_nested_thread(fn->irq[i], 1);
192
193 error = devm_request_threaded_irq(&fn->dev, fn->irq[i], NULL,
194 handler->attention, IRQF_ONESHOT,
195 dev_name(&fn->dev), fn);
196 if (error) {
197 dev_err(&fn->dev, "Error %d registering IRQ\n", error);
198 return error;
199 }
200 }
201
202 return 0;
203}
204
170static int rmi_function_probe(struct device *dev)
171{
172 struct rmi_function *fn = to_rmi_function(dev);
173 struct rmi_function_handler *handler =
174 to_rmi_function_handler(dev->driver);
175 int error;
176
177 rmi_function_of_probe(fn);
178
179 if (handler->probe) {
180 error = handler->probe(fn);
205static int rmi_function_probe(struct device *dev)
206{
207 struct rmi_function *fn = to_rmi_function(dev);
208 struct rmi_function_handler *handler =
209 to_rmi_function_handler(dev->driver);
210 int error;
211
212 rmi_function_of_probe(fn);
213
214 if (handler->probe) {
215 error = handler->probe(fn);
181 return error;
216 if (error)
217 return error;
182 }
183
218 }
219
220 if (fn->num_of_irqs && handler->attention) {
221 error = rmi_create_function_irq(fn, handler);
222 if (error)
223 return error;
224 }
225
184 return 0;
185}
186
187static int rmi_function_remove(struct device *dev)
188{
189 struct rmi_function *fn = to_rmi_function(dev);
190 struct rmi_function_handler *handler =
191 to_rmi_function_handler(dev->driver);

--- 33 unchanged lines hidden (view full) ---

225
226err_put_device:
227 put_device(&fn->dev);
228 return error;
229}
230
231void rmi_unregister_function(struct rmi_function *fn)
232{
226 return 0;
227}
228
229static int rmi_function_remove(struct device *dev)
230{
231 struct rmi_function *fn = to_rmi_function(dev);
232 struct rmi_function_handler *handler =
233 to_rmi_function_handler(dev->driver);

--- 33 unchanged lines hidden (view full) ---

267
268err_put_device:
269 put_device(&fn->dev);
270 return error;
271}
272
273void rmi_unregister_function(struct rmi_function *fn)
274{
275 int i;
276
233 rmi_dbg(RMI_DEBUG_CORE, &fn->dev, "Unregistering F%02X.\n",
234 fn->fd.function_number);
235
236 device_del(&fn->dev);
237 of_node_put(fn->dev.of_node);
238 put_device(&fn->dev);
277 rmi_dbg(RMI_DEBUG_CORE, &fn->dev, "Unregistering F%02X.\n",
278 fn->fd.function_number);
279
280 device_del(&fn->dev);
281 of_node_put(fn->dev.of_node);
282 put_device(&fn->dev);
283
284 for (i = 0; i < fn->num_of_irqs; i++)
285 irq_dispose_mapping(fn->irq[i]);
286
239}
240
241/**
242 * rmi_register_function_handler - register a handler for an RMI function
243 * @handler: RMI handler that should be registered.
244 * @module: pointer to module that implements the handler
245 * @mod_name: name of the module implementing the handler
246 *

--- 183 unchanged lines hidden ---
287}
288
289/**
290 * rmi_register_function_handler - register a handler for an RMI function
291 * @handler: RMI handler that should be registered.
292 * @module: pointer to module that implements the handler
293 * @mod_name: name of the module implementing the handler
294 *

--- 183 unchanged lines hidden ---