49
struct spi_message msg;
50
49
struct iio_dev *indio_dev = dev_get_drvdata(dev);
51
50
struct ade7759_state *st = iio_dev_get_devdata(indio_dev);
52
struct spi_transfer xfers[] = {
60
52
mutex_lock(&st->buf_lock);
61
53
st->tx[0] = ADE7759_WRITE_REG(reg_address);
62
54
st->tx[1] = (value >> 8) & 0xFF;
63
55
st->tx[2] = value & 0xFF;
65
spi_message_init(&msg);
66
spi_message_add_tail(xfers, &msg);
67
ret = spi_sync(st->us, &msg);
56
ret = spi_write(st->us, st->tx, 3);
68
57
mutex_unlock(&st->buf_lock);
77
struct spi_message msg;
78
66
struct iio_dev *indio_dev = dev_get_drvdata(dev);
79
67
struct ade7759_state *st = iio_dev_get_devdata(indio_dev);
81
struct spi_transfer xfers[] = {
90
mutex_lock(&st->buf_lock);
91
st->tx[0] = ADE7759_READ_REG(reg_address);
94
spi_message_init(&msg);
95
spi_message_add_tail(xfers, &msg);
96
ret = spi_sync(st->us, &msg);
70
ret = spi_w8r8(st->us, ADE7759_READ_REG(reg_address));
98
72
dev_err(&st->us->dev, "problem when reading 8 bit register 0x%02X",
105
mutex_unlock(&st->buf_lock);
109
81
static int ade7759_spi_read_reg_16(struct device *dev,
113
struct spi_message msg;
114
85
struct iio_dev *indio_dev = dev_get_drvdata(dev);
115
86
struct ade7759_state *st = iio_dev_get_devdata(indio_dev);
117
struct spi_transfer xfers[] = {
126
mutex_lock(&st->buf_lock);
127
st->tx[0] = ADE7759_READ_REG(reg_address);
131
spi_message_init(&msg);
132
spi_message_add_tail(xfers, &msg);
133
ret = spi_sync(st->us, &msg);
89
ret = spi_w8r16(st->us, ADE7759_READ_REG(reg_address));
135
91
dev_err(&st->us->dev, "problem when reading 16 bit register 0x%02X",
139
*val = (st->rx[1] << 8) | st->rx[2];
142
mutex_unlock(&st->buf_lock);
97
*val = be16_to_cpup(val);
146
102
static int ade7759_spi_read_reg_40(struct device *dev,
354
310
irqen &= ~(1 << 3);
356
312
ret = ade7759_spi_write_reg_8(dev, ADE7759_IRQEN, irqen);
364
318
/* Power down the device */
365
int ade7759_stop_device(struct device *dev)
319
static int ade7759_stop_device(struct device *dev)
369
323
ade7759_spi_read_reg_16(dev,
372
326
val |= 1 << 4; /* AD converters can be turned off */
373
ret = ade7759_spi_write_reg_16(dev,
328
return ade7759_spi_write_reg_16(dev, ADE7759_MODE, val);
380
331
static int ade7759_initial_setup(struct ade7759_state *st)
416
367
t = (t >> 3) & 0x3;
417
368
sps = 27900 / (1 + t);
419
len = sprintf(buf, "%d SPS\n", sps);
370
return sprintf(buf, "%d\n", sps);
423
373
static ssize_t ade7759_write_frequency(struct device *dev,
447
397
st->us->max_speed_hz = ADE7759_SPI_FAST;
449
ret = ade7759_spi_read_reg_16(dev,
399
ret = ade7759_spi_read_reg_16(dev, ADE7759_MODE, ®);
455
403
reg &= ~(3 << 13);
458
ret = ade7759_spi_write_reg_16(dev,
406
ret = ade7759_spi_write_reg_16(dev, ADE7759_MODE, reg);
463
409
mutex_unlock(&indio_dev->mlock);
477
423
static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("27900 14000 7000 3500");
479
static IIO_CONST_ATTR(name, "ade7759");
481
static struct attribute *ade7759_event_attributes[] = {
485
static struct attribute_group ade7759_event_attribute_group = {
486
.attrs = ade7759_event_attributes,
489
425
static struct attribute *ade7759_attributes[] = {
490
426
&iio_dev_attr_temp_raw.dev_attr.attr,
491
427
&iio_const_attr_temp_offset.dev_attr.attr,
493
429
&iio_dev_attr_sampling_frequency.dev_attr.attr,
494
430
&iio_const_attr_sampling_frequency_available.dev_attr.attr,
495
431
&iio_dev_attr_reset.dev_attr.attr,
496
&iio_const_attr_name.dev_attr.attr,
497
432
&iio_dev_attr_phcal.dev_attr.attr,
498
433
&iio_dev_attr_cfden.dev_attr.attr,
499
434
&iio_dev_attr_aenergy.dev_attr.attr,
515
450
.attrs = ade7759_attributes,
453
static const struct iio_info ade7759_info = {
454
.attrs = &ade7759_attribute_group,
455
.driver_module = THIS_MODULE,
518
458
static int __devinit ade7759_probe(struct spi_device *spi)
520
int ret, regdone = 0;
521
461
struct ade7759_state *st = kzalloc(sizeof *st, GFP_KERNEL);
541
481
mutex_init(&st->buf_lock);
542
482
/* setup the industrialio driver allocated elements */
543
st->indio_dev = iio_allocate_device();
483
st->indio_dev = iio_allocate_device(0);
544
484
if (st->indio_dev == NULL) {
546
486
goto error_free_tx;
489
st->indio_dev->name = spi->dev.driver->name;
549
490
st->indio_dev->dev.parent = &spi->dev;
550
st->indio_dev->num_interrupt_lines = 1;
551
st->indio_dev->event_attrs = &ade7759_event_attribute_group;
552
st->indio_dev->attrs = &ade7759_attribute_group;
492
st->indio_dev->info = &ade7759_info;
553
493
st->indio_dev->dev_data = (void *)(st);
554
st->indio_dev->driver_module = THIS_MODULE;
555
494
st->indio_dev->modes = INDIO_DIRECT_MODE;
557
ret = ade7759_configure_ring(st->indio_dev);
496
ret = iio_device_register(st->indio_dev);
559
498
goto error_free_dev;
561
ret = iio_device_register(st->indio_dev);
563
goto error_unreg_ring_funcs;
566
ret = ade7759_initialize_ring(st->indio_dev->ring);
568
printk(KERN_ERR "failed to initialize the ring\n");
569
goto error_unreg_ring_funcs;
573
ret = iio_register_interrupt_line(spi->irq,
576
IRQF_TRIGGER_FALLING,
579
goto error_uninitialize_ring;
581
ret = ade7759_probe_trigger(st->indio_dev);
583
goto error_unregister_line;
586
500
/* Get the device into a sane initial state */
587
501
ret = ade7759_initial_setup(st);
589
goto error_remove_trigger;
503
goto error_unreg_dev;
592
error_remove_trigger:
593
if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
594
ade7759_remove_trigger(st->indio_dev);
595
error_unregister_line:
596
if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
597
iio_unregister_interrupt_line(st->indio_dev, 0);
598
error_uninitialize_ring:
599
ade7759_uninitialize_ring(st->indio_dev->ring);
600
error_unreg_ring_funcs:
601
ade7759_unconfigure_ring(st->indio_dev);
508
iio_device_unregister(st->indio_dev);
604
iio_device_unregister(st->indio_dev);
606
iio_free_device(st->indio_dev);
510
iio_free_device(st->indio_dev);
628
flush_scheduled_work();
630
ade7759_remove_trigger(indio_dev);
631
if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
632
iio_unregister_interrupt_line(indio_dev, 0);
634
ade7759_uninitialize_ring(indio_dev->ring);
635
ade7759_unconfigure_ring(indio_dev);
636
532
iio_device_unregister(indio_dev);