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 --- |