• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/mfd/

Lines Matching defs:mc13783

19 #include <linux/mfd/mc13783.h>
21 struct mc13783 {
136 void mc13783_lock(struct mc13783 *mc13783)
138 if (!mutex_trylock(&mc13783->lock)) {
139 dev_dbg(&mc13783->spidev->dev, "wait for %s from %pf\n",
142 mutex_lock(&mc13783->lock);
144 dev_dbg(&mc13783->spidev->dev, "%s from %pf\n",
149 void mc13783_unlock(struct mc13783 *mc13783)
151 dev_dbg(&mc13783->spidev->dev, "%s from %pf\n",
153 mutex_unlock(&mc13783->lock);
158 int mc13783_reg_read(struct mc13783 *mc13783, unsigned int offset, u32 *val)
164 BUG_ON(!mutex_is_locked(&mc13783->lock));
180 ret = spi_sync(mc13783->spidev, &m);
190 dev_vdbg(&mc13783->spidev->dev, "[0x%02x] -> 0x%06x\n", offset, *val);
196 int mc13783_reg_write(struct mc13783 *mc13783, unsigned int offset, u32 val)
203 BUG_ON(!mutex_is_locked(&mc13783->lock));
205 dev_vdbg(&mc13783->spidev->dev, "[0x%02x] <- 0x%06x\n", offset, val);
221 ret = spi_sync(mc13783->spidev, &m);
232 int mc13783_reg_rmw(struct mc13783 *mc13783, unsigned int offset,
240 ret = mc13783_reg_read(mc13783, offset, &valread);
246 return mc13783_reg_write(mc13783, offset, valread);
250 int mc13783_get_flags(struct mc13783 *mc13783)
252 return mc13783->flags;
256 int mc13783_irq_mask(struct mc13783 *mc13783, int irq)
266 ret = mc13783_reg_read(mc13783, offmask, &mask);
274 return mc13783_reg_write(mc13783, offmask, mask | irqbit);
278 int mc13783_irq_unmask(struct mc13783 *mc13783, int irq)
288 ret = mc13783_reg_read(mc13783, offmask, &mask);
296 return mc13783_reg_write(mc13783, offmask, mask & ~irqbit);
300 int mc13783_irq_status(struct mc13783 *mc13783, int irq,
314 ret = mc13783_reg_read(mc13783, offmask, &mask);
324 ret = mc13783_reg_read(mc13783, offstat, &stat);
335 int mc13783_irq_ack(struct mc13783 *mc13783, int irq)
342 return mc13783_reg_write(mc13783, offstat, val);
346 int mc13783_irq_request_nounmask(struct mc13783 *mc13783, int irq,
349 BUG_ON(!mutex_is_locked(&mc13783->lock));
355 if (mc13783->irqhandler[irq])
358 mc13783->irqhandler[irq] = handler;
359 mc13783->irqdata[irq] = dev;
365 int mc13783_irq_request(struct mc13783 *mc13783, int irq,
370 ret = mc13783_irq_request_nounmask(mc13783, irq, handler, name, dev);
374 ret = mc13783_irq_unmask(mc13783, irq);
376 mc13783->irqhandler[irq] = NULL;
377 mc13783->irqdata[irq] = NULL;
385 int mc13783_irq_free(struct mc13783 *mc13783, int irq, void *dev)
388 BUG_ON(!mutex_is_locked(&mc13783->lock));
390 if (irq < 0 || irq >= MC13783_NUM_IRQ || !mc13783->irqhandler[irq] ||
391 mc13783->irqdata[irq] != dev)
394 ret = mc13783_irq_mask(mc13783, irq);
398 mc13783->irqhandler[irq] = NULL;
399 mc13783->irqdata[irq] = NULL;
405 static inline irqreturn_t mc13783_irqhandler(struct mc13783 *mc13783, int irq)
407 return mc13783->irqhandler[irq](irq, mc13783->irqdata[irq]);
412 * locking: holds mc13783->lock
414 static int mc13783_irq_handle(struct mc13783 *mc13783,
418 int ret = mc13783_reg_read(mc13783, offstat, &stat);
424 ret = mc13783_reg_read(mc13783, offmask, &mask);
433 if (likely(mc13783->irqhandler[baseirq + irq])) {
436 handled = mc13783_irqhandler(mc13783, baseirq + irq);
440 dev_err(&mc13783->spidev->dev,
446 ret = mc13783_reg_write(mc13783, offmask, mask);
455 struct mc13783 *mc13783 = data;
459 mc13783_lock(mc13783);
461 ret = mc13783_irq_handle(mc13783, MC13783_IRQSTAT0,
466 ret = mc13783_irq_handle(mc13783, MC13783_IRQSTAT1,
471 mc13783_unlock(mc13783);
480 struct mc13783 *mc13783;
488 mc13783_irq_ack(adcdone_data->mc13783, irq);
497 int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,
503 .mc13783 = mc13783,
507 dev_dbg(&mc13783->spidev->dev, "%s\n", __func__);
509 mc13783_lock(mc13783);
511 if (mc13783->flags & MC13783_ADC_WORKING) {
516 mc13783->flags |= MC13783_ADC_WORKING;
518 mc13783_reg_read(mc13783, MC13783_ADC0, &old_adc0);
545 mc13783_unlock(mc13783);
549 dev_dbg(&mc13783->spidev->dev, "%s: request irq\n", __func__);
550 mc13783_irq_request(mc13783, MC13783_IRQ_ADCDONE,
552 mc13783_irq_ack(mc13783, MC13783_IRQ_ADCDONE);
554 mc13783_reg_write(mc13783, MC13783_REG_ADC_0, adc0);
555 mc13783_reg_write(mc13783, MC13783_REG_ADC_1, adc1);
557 mc13783_unlock(mc13783);
564 mc13783_lock(mc13783);
566 mc13783_irq_free(mc13783, MC13783_IRQ_ADCDONE, &adcdone_data);
570 ret = mc13783_reg_read(mc13783,
578 mc13783_reg_write(mc13783, MC13783_REG_ADC_0, old_adc0);
580 mc13783->flags &= ~MC13783_ADC_WORKING;
582 mc13783_unlock(mc13783);
588 static int mc13783_add_subdevice_pdata(struct mc13783 *mc13783,
597 return mfd_add_devices(&mc13783->spidev->dev, -1, &cell, 1, NULL, 0);
600 static int mc13783_add_subdevice(struct mc13783 *mc13783, const char *name)
602 return mc13783_add_subdevice_pdata(mc13783, name, NULL, 0);
605 static int mc13783_check_revision(struct mc13783 *mc13783)
609 mc13783_reg_read(mc13783, MC13783_REG_REVISION, &rev_id);
621 dev_err(&mc13783->spidev->dev, "No MC13783 detected.\n");
625 dev_info(&mc13783->spidev->dev,
634 struct mc13783 *mc13783;
638 mc13783 = kzalloc(sizeof(*mc13783), GFP_KERNEL);
639 if (!mc13783)
642 dev_set_drvdata(&spi->dev, mc13783);
647 mc13783->spidev = spi;
649 mutex_init(&mc13783->lock);
650 mc13783_lock(mc13783);
652 ret = mc13783_check_revision(mc13783);
657 ret = mc13783_reg_write(mc13783, MC13783_IRQMASK0, 0x00ffffff);
661 ret = mc13783_reg_write(mc13783, MC13783_IRQMASK1, 0x00ffffff);
666 IRQF_ONESHOT | IRQF_TRIGGER_HIGH, "mc13783", mc13783);
671 mutex_unlock(&mc13783->lock);
673 kfree(mc13783);
679 mc13783->flags = pdata->flags;
680 mc13783->regulators = pdata->regulators;
681 mc13783->num_regulators = pdata->num_regulators;
685 mc13783_unlock(mc13783);
688 mc13783_add_subdevice(mc13783, "mc13783-adc");
691 mc13783_add_subdevice(mc13783, "mc13783-codec");
699 mc13783_add_subdevice_pdata(mc13783, "mc13783-regulator",
704 mc13783_add_subdevice(mc13783, "mc13783-rtc");
707 mc13783_add_subdevice(mc13783, "mc13783-ts");
710 mc13783_add_subdevice_pdata(mc13783, "mc13783-led",
718 struct mc13783 *mc13783 = dev_get_drvdata(&spi->dev);
720 free_irq(mc13783->spidev->irq, mc13783);
729 .name = "mc13783",