• Home
  • Raw
  • Download

Lines Matching refs:data

41 static struct pmi_data *data;  variable
48 spin_lock(&data->pmi_spinlock); in pmi_irq_handler()
50 type = ioread8(data->pmi_reg + PMI_READ_TYPE); in pmi_irq_handler()
53 if (type & PMI_ACK && !data->completion) { in pmi_irq_handler()
59 if (data->completion && !(type & PMI_ACK)) { in pmi_irq_handler()
65 data->msg.type = type; in pmi_irq_handler()
66 data->msg.data0 = ioread8(data->pmi_reg + PMI_READ_DATA0); in pmi_irq_handler()
67 data->msg.data1 = ioread8(data->pmi_reg + PMI_READ_DATA1); in pmi_irq_handler()
68 data->msg.data2 = ioread8(data->pmi_reg + PMI_READ_DATA2); in pmi_irq_handler()
71 spin_unlock(&data->pmi_spinlock); in pmi_irq_handler()
78 if (data->msg.type & PMI_ACK) { in pmi_irq_handler()
79 complete(data->completion); in pmi_irq_handler()
84 schedule_work(&data->work); in pmi_irq_handler()
104 spin_lock(&data->handler_spinlock); in pmi_notify_handlers()
105 list_for_each_entry(handler, &data->handler, node) { in pmi_notify_handlers()
107 if (handler->type == data->msg.type) in pmi_notify_handlers()
108 handler->handle_pmi_message(data->msg); in pmi_notify_handlers()
110 spin_unlock(&data->handler_spinlock); in pmi_notify_handlers()
118 if (data) { in pmi_of_probe()
124 data = kzalloc(sizeof(struct pmi_data), GFP_KERNEL); in pmi_of_probe()
125 if (!data) { in pmi_of_probe()
131 data->pmi_reg = of_iomap(np, 0); in pmi_of_probe()
132 if (!data->pmi_reg) { in pmi_of_probe()
138 INIT_LIST_HEAD(&data->handler); in pmi_of_probe()
140 mutex_init(&data->msg_mutex); in pmi_of_probe()
141 spin_lock_init(&data->pmi_spinlock); in pmi_of_probe()
142 spin_lock_init(&data->handler_spinlock); in pmi_of_probe()
144 INIT_WORK(&data->work, pmi_notify_handlers); in pmi_of_probe()
146 data->dev = dev; in pmi_of_probe()
148 data->irq = irq_of_parse_and_map(np, 0); in pmi_of_probe()
149 if (!data->irq) { in pmi_of_probe()
155 rc = request_irq(data->irq, pmi_irq_handler, 0, "pmi", NULL); in pmi_of_probe()
158 data->irq, rc); in pmi_of_probe()
162 printk(KERN_INFO "pmi: found pmi device at addr %p.\n", data->pmi_reg); in pmi_of_probe()
167 iounmap(data->pmi_reg); in pmi_of_probe()
170 kfree(data); in pmi_of_probe()
180 free_irq(data->irq, NULL); in pmi_of_remove()
181 iounmap(data->pmi_reg); in pmi_of_remove()
183 spin_lock(&data->handler_spinlock); in pmi_of_remove()
185 list_for_each_entry_safe(handler, tmp, &data->handler, node) in pmi_of_remove()
188 spin_unlock(&data->handler_spinlock); in pmi_of_remove()
190 kfree(data); in pmi_of_remove()
191 data = NULL; in pmi_of_remove()
209 if (!data) in pmi_send_message()
212 mutex_lock(&data->msg_mutex); in pmi_send_message()
214 data->msg = msg; in pmi_send_message()
217 data->completion = &completion; in pmi_send_message()
219 spin_lock_irqsave(&data->pmi_spinlock, flags); in pmi_send_message()
220 iowrite8(msg.data0, data->pmi_reg + PMI_WRITE_DATA0); in pmi_send_message()
221 iowrite8(msg.data1, data->pmi_reg + PMI_WRITE_DATA1); in pmi_send_message()
222 iowrite8(msg.data2, data->pmi_reg + PMI_WRITE_DATA2); in pmi_send_message()
223 iowrite8(msg.type, data->pmi_reg + PMI_WRITE_TYPE); in pmi_send_message()
224 spin_unlock_irqrestore(&data->pmi_spinlock, flags); in pmi_send_message()
228 wait_for_completion_interruptible_timeout(data->completion, in pmi_send_message()
231 data->completion = NULL; in pmi_send_message()
233 mutex_unlock(&data->msg_mutex); in pmi_send_message()
241 if (!data) in pmi_register_handler()
244 spin_lock(&data->handler_spinlock); in pmi_register_handler()
245 list_add_tail(&handler->node, &data->handler); in pmi_register_handler()
246 spin_unlock(&data->handler_spinlock); in pmi_register_handler()
254 if (!data) in pmi_unregister_handler()
259 spin_lock(&data->handler_spinlock); in pmi_unregister_handler()
261 spin_unlock(&data->handler_spinlock); in pmi_unregister_handler()