40
40
* do not actually appear to be available.
42
42
static const struct sca3000_chip_info sca3000_spi_chip_info_tbl[] = {
44
.name = "sca3000-d01",
45
.scale = " 0.0073575",
46
45
.temp_output = true,
47
46
.measurement_mode_freq = 250,
48
47
.option_mode_1 = SCA3000_OP_MODE_BYPASS,
49
48
.option_mode_1_freq = 250,
51
.name = "sca3000-e02",
49
.mot_det_mult_xz = {50, 100, 200, 350, 650, 1300},
50
.mot_det_mult_y = {50, 100, 150, 250, 450, 850, 1750},
53
54
.measurement_mode_freq = 125,
54
55
.option_mode_1 = SCA3000_OP_MODE_NARROW,
55
56
.option_mode_1_freq = 63,
57
.name = "sca3000-e04",
57
.mot_det_mult_xz = {100, 150, 300, 550, 1050, 2050},
58
.mot_det_mult_y = {50, 100, 200, 350, 700, 1350, 2700},
59
62
.measurement_mode_freq = 100,
60
63
.option_mode_1 = SCA3000_OP_MODE_NARROW,
61
64
.option_mode_1_freq = 50,
62
65
.option_mode_2 = SCA3000_OP_MODE_WIDE,
63
66
.option_mode_2_freq = 400,
65
.name = "sca3000-e05",
67
.mot_det_mult_xz = {200, 300, 600, 1100, 2100, 4100},
68
.mot_det_mult_y = {100, 200, 400, 7000, 1400, 2700, 54000},
67
72
.measurement_mode_freq = 200,
68
73
.option_mode_1 = SCA3000_OP_MODE_NARROW,
69
74
.option_mode_1_freq = 50,
70
75
.option_mode_2 = SCA3000_OP_MODE_WIDE,
71
76
.option_mode_2_freq = 400,
77
.mot_det_mult_xz = {600, 900, 1700, 3200, 6100, 11900},
78
.mot_det_mult_y = {300, 600, 1200, 2000, 4100, 7800, 15600},
76
82
int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val)
78
struct spi_transfer xfer = {
84
struct spi_message msg;
86
84
st->tx[0] = SCA3000_WRITE_REG(address);
88
spi_message_init(&msg);
89
spi_message_add_tail(&xfer, &msg);
91
return spi_sync(st->us, &msg);
86
return spi_write(st->us, st->tx, 2);
94
int sca3000_read_data(struct sca3000_state *st,
95
uint8_t reg_address_high,
89
int sca3000_read_data_short(struct sca3000_state *st,
90
uint8_t reg_address_high,
100
93
struct spi_message msg;
101
struct spi_transfer xfer = {
94
struct spi_transfer xfer[2] = {
108
*rx_p = kmalloc(len + 1, GFP_KERNEL);
114
103
st->tx[0] = SCA3000_READ_REG(reg_address_high);
115
104
spi_message_init(&msg);
116
spi_message_add_tail(&xfer, &msg);
118
ret = spi_sync(st->us, &msg);
121
dev_err(get_device(&st->us->dev), "problem reading register");
105
spi_message_add_tail(&xfer[0], &msg);
106
spi_message_add_tail(&xfer[1], &msg);
108
return spi_sync(st->us, &msg);
133
112
* sca3000_reg_lock_on() test if the ctrl register lock is on
289
260
#endif /* SCA3000_DEBUG */
292
* sca3000_read_13bit_signed() sysfs interface to read 13 bit signed registers
294
* These are described as signed 12 bit on the data sheet, which appears
295
* to be a conventional 2's complement 13 bit.
297
static ssize_t sca3000_read_13bit_signed(struct device *dev,
298
struct device_attribute *attr,
303
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
305
struct iio_dev *indio_dev = dev_get_drvdata(dev);
306
struct sca3000_state *st = indio_dev->dev_data;
308
mutex_lock(&st->lock);
309
ret = sca3000_read_data(st, this_attr->address, &rx, 2);
312
val = sca3000_13bit_convert(rx[1], rx[2]);
313
len += sprintf(buf + len, "%d\n", val);
316
mutex_unlock(&st->lock);
318
return ret ? ret : len;
321
static ssize_t sca3000_show_scale(struct device *dev,
322
struct device_attribute *attr,
325
struct iio_dev *dev_info = dev_get_drvdata(dev);
326
struct sca3000_state *st = dev_info->dev_data;
327
return sprintf(buf, "%s\n", st->info->scale);
330
static ssize_t sca3000_show_name(struct device *dev,
331
struct device_attribute *attr,
334
struct iio_dev *dev_info = dev_get_drvdata(dev);
335
struct sca3000_state *st = dev_info->dev_data;
336
return sprintf(buf, "%s\n", st->info->name);
339
264
* sca3000_show_reg() - sysfs interface to read the chip revision number
506
423
/* More standard attributes */
508
static IIO_DEV_ATTR_NAME(sca3000_show_name);
509
425
static IIO_DEV_ATTR_REV(sca3000_show_rev);
510
static IIO_DEVICE_ATTR(accel_scale, S_IRUGO, sca3000_show_scale,
513
static IIO_DEV_ATTR_ACCEL_X(sca3000_read_13bit_signed,
514
SCA3000_REG_ADDR_X_MSB);
515
static IIO_DEV_ATTR_ACCEL_Y(sca3000_read_13bit_signed,
516
SCA3000_REG_ADDR_Y_MSB);
517
static IIO_DEV_ATTR_ACCEL_Z(sca3000_read_13bit_signed,
518
SCA3000_REG_ADDR_Z_MSB);
427
#define SCA3000_INFO_MASK \
428
(1 << IIO_CHAN_INFO_SCALE_SHARED)
429
#define SCA3000_EVENT_MASK \
430
(IIO_EV_BIT(IIO_EV_TYPE_MAG, IIO_EV_DIR_RISING))
432
static struct iio_chan_spec sca3000_channels[] = {
433
IIO_CHAN(IIO_ACCEL, 1, 0, 0, NULL, 0, IIO_MOD_X, SCA3000_INFO_MASK,
434
0, 0, IIO_ST('s', 11, 16, 5), SCA3000_EVENT_MASK),
435
IIO_CHAN(IIO_ACCEL, 1, 0, 0, NULL, 0, IIO_MOD_Y, SCA3000_INFO_MASK,
436
1, 1, IIO_ST('s', 11, 16, 5), SCA3000_EVENT_MASK),
437
IIO_CHAN(IIO_ACCEL, 1, 0, 0, NULL, 0, IIO_MOD_Z, SCA3000_INFO_MASK,
438
2, 2, IIO_ST('s', 11, 16, 5), SCA3000_EVENT_MASK),
441
static u8 sca3000_addresses[3][3] = {
442
[0] = {SCA3000_REG_ADDR_X_MSB, SCA3000_REG_CTRL_SEL_MD_X_TH,
443
SCA3000_MD_CTRL_OR_X},
444
[1] = {SCA3000_REG_ADDR_Y_MSB, SCA3000_REG_CTRL_SEL_MD_Y_TH,
445
SCA3000_MD_CTRL_OR_Y},
446
[2] = {SCA3000_REG_ADDR_Z_MSB, SCA3000_REG_CTRL_SEL_MD_Z_TH,
447
SCA3000_MD_CTRL_OR_Z},
450
static int sca3000_read_raw(struct iio_dev *indio_dev,
451
struct iio_chan_spec const *chan,
456
struct sca3000_state *st = indio_dev->dev_data;
462
mutex_lock(&st->lock);
463
if (st->mo_det_use_count) {
464
mutex_unlock(&st->lock);
467
address = sca3000_addresses[chan->address][0];
468
ret = sca3000_read_data_short(st, address, 2);
470
mutex_unlock(&st->lock);
473
*val = (be16_to_cpup((__be16 *)st->rx) >> 3) & 0x1FFF;
474
*val = ((*val) << (sizeof(*val)*8 - 13)) >>
475
(sizeof(*val)*8 - 13);
476
mutex_unlock(&st->lock);
478
case (1 << IIO_CHAN_INFO_SCALE_SHARED):
480
if (chan->type == IIO_ACCEL)
481
*val2 = st->info->scale;
482
else /* temperature */
484
return IIO_VAL_INT_PLUS_MICRO;
522
491
* sca3000_read_av_freq() sysfs function to get available frequencies
725
692
static IIO_CONST_ATTR_TEMP_OFFSET("-214.6");
728
* sca3000_show_thresh() sysfs query of a threshold
695
* sca3000_read_thresh() - query of a threshold
730
static ssize_t sca3000_show_thresh(struct device *dev,
731
struct device_attribute *attr,
697
static int sca3000_read_thresh(struct iio_dev *indio_dev,
734
struct iio_dev *indio_dev = dev_get_drvdata(dev);
735
702
struct sca3000_state *st = indio_dev->dev_data;
736
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
703
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
740
704
mutex_lock(&st->lock);
741
ret = sca3000_read_ctrl_reg(st,
705
ret = sca3000_read_ctrl_reg(st, sca3000_addresses[num][1]);
744
706
mutex_unlock(&st->lock);
747
len += sprintf(buf + len, "%d\n", rx[1]);
711
for_each_set_bit(i, (unsigned long *)&ret,
712
ARRAY_SIZE(st->info->mot_det_mult_y))
713
*val += st->info->mot_det_mult_y[i];
715
for_each_set_bit(i, (unsigned long *)&ret,
716
ARRAY_SIZE(st->info->mot_det_mult_xz))
717
*val += st->info->mot_det_mult_xz[i];
754
* sca3000_write_thresh() sysfs control of threshold
723
* sca3000_write_thresh() control of threshold
756
static ssize_t sca3000_write_thresh(struct device *dev,
757
struct device_attribute *attr,
725
static int sca3000_write_thresh(struct iio_dev *indio_dev,
761
struct iio_dev *indio_dev = dev_get_drvdata(dev);
762
729
struct sca3000_state *st = indio_dev->dev_data;
763
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
730
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
767
ret = strict_strtol(buf, 10, &val);
736
i = ARRAY_SIZE(st->info->mot_det_mult_y);
738
if (val >= st->info->mot_det_mult_y[--i]) {
739
nonlinear |= (1 << i);
740
val -= st->info->mot_det_mult_y[i];
743
i = ARRAY_SIZE(st->info->mot_det_mult_xz);
745
if (val >= st->info->mot_det_mult_xz[--i]) {
746
nonlinear |= (1 << i);
747
val -= st->info->mot_det_mult_xz[i];
770
751
mutex_lock(&st->lock);
771
ret = sca3000_write_ctrl_reg(st, this_attr->address, val);
752
ret = sca3000_write_ctrl_reg(st, sca3000_addresses[num][1], nonlinear);
772
753
mutex_unlock(&st->lock);
774
return ret ? ret : len;
777
static IIO_DEVICE_ATTR(accel_x_raw_mag_rising_value,
780
sca3000_write_thresh,
781
SCA3000_REG_CTRL_SEL_MD_X_TH);
783
static IIO_DEVICE_ATTR(accel_y_raw_mag_rising_value,
786
sca3000_write_thresh,
787
SCA3000_REG_CTRL_SEL_MD_Y_TH);
789
static IIO_DEVICE_ATTR(accel_z_raw_mag_rising_value,
792
sca3000_write_thresh,
793
SCA3000_REG_CTRL_SEL_MD_Z_TH);
795
758
static struct attribute *sca3000_attributes[] = {
796
&iio_dev_attr_name.dev_attr.attr,
797
759
&iio_dev_attr_revision.dev_attr.attr,
798
&iio_dev_attr_accel_scale.dev_attr.attr,
799
&iio_dev_attr_accel_x_raw.dev_attr.attr,
800
&iio_dev_attr_accel_y_raw.dev_attr.attr,
801
&iio_dev_attr_accel_z_raw.dev_attr.attr,
802
760
&iio_dev_attr_measurement_mode_available.dev_attr.attr,
803
761
&iio_dev_attr_measurement_mode.dev_attr.attr,
804
762
&iio_dev_attr_sampling_frequency_available.dev_attr.attr,
836
789
/* depending on event, push to the ring buffer event chrdev or the event one */
839
* sca3000_interrupt_handler_bh() - handling ring and non ring events
792
* sca3000_event_handler() - handling ring and non ring events
841
794
* This function is complicated by the fact that the devices can signify ring
842
795
* and non ring events via the same interrupt line and they can only
843
796
* be distinguished via a read of the relevant status register.
845
static void sca3000_interrupt_handler_bh(struct work_struct *work_s)
798
static irqreturn_t sca3000_event_handler(int irq, void *private)
847
struct sca3000_state *st
848
= container_of(work_s, struct sca3000_state,
849
interrupt_handler_ws);
800
struct iio_dev *indio_dev = private;
801
struct sca3000_state *st;
803
s64 last_timestamp = iio_get_time_ns();
805
st = indio_dev->dev_data;
853
806
/* Could lead if badly timed to an extra read of status reg,
854
807
* but ensures no interrupt is missed.
856
enable_irq(st->us->irq);
857
809
mutex_lock(&st->lock);
858
ret = sca3000_read_data(st, SCA3000_REG_ADDR_INT_STATUS,
810
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_STATUS, 1);
860
812
mutex_unlock(&st->lock);
864
sca3000_ring_int_process(rx[1], st->indio_dev->ring);
816
sca3000_ring_int_process(val, st->indio_dev->ring);
866
if (rx[1] & SCA3000_INT_STATUS_FREE_FALL)
818
if (val & SCA3000_INT_STATUS_FREE_FALL)
867
819
iio_push_event(st->indio_dev, 0,
868
820
IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
870
822
IIO_EV_MOD_X_AND_Y_AND_Z,
872
824
IIO_EV_DIR_FALLING),
875
if (rx[1] & SCA3000_INT_STATUS_Y_TRIGGER)
827
if (val & SCA3000_INT_STATUS_Y_TRIGGER)
876
828
iio_push_event(st->indio_dev, 0,
877
829
IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
881
833
IIO_EV_DIR_RISING),
884
if (rx[1] & SCA3000_INT_STATUS_X_TRIGGER)
836
if (val & SCA3000_INT_STATUS_X_TRIGGER)
885
837
iio_push_event(st->indio_dev, 0,
886
838
IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
890
842
IIO_EV_DIR_RISING),
893
if (rx[1] & SCA3000_INT_STATUS_Z_TRIGGER)
845
if (val & SCA3000_INT_STATUS_Z_TRIGGER)
894
846
iio_push_event(st->indio_dev, 0,
895
847
IIO_MOD_EVENT_CODE(IIO_EV_CLASS_ACCEL,
899
851
IIO_EV_DIR_RISING),
908
* sca3000_handler_th() handles all interrupt events from device
910
* These devices deploy unified interrupt status registers meaning
911
* all interrupts must be handled together
913
static int sca3000_handler_th(struct iio_dev *dev_info,
918
struct sca3000_state *st = dev_info->dev_data;
920
st->last_timestamp = timestamp;
921
schedule_work(&st->interrupt_handler_ws);
927
* sca3000_query_mo_det() is motion detection enabled for this axis
929
* First queries if motion detection is enabled and then if this axis is
932
static ssize_t sca3000_query_mo_det(struct device *dev,
933
struct device_attribute *attr,
936
struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
859
* sca3000_read_event_config() what events are enabled
861
static int sca3000_read_event_config(struct iio_dev *indio_dev,
937
864
struct sca3000_state *st = indio_dev->dev_data;
938
struct iio_event_attr *this_attr = to_iio_event_attr(attr);
941
866
u8 protect_mask = 0x03;
867
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
943
869
/* read current value of mode register */
944
870
mutex_lock(&st->lock);
945
ret = sca3000_read_data(st, SCA3000_REG_ADDR_MODE, &rx, 1);
871
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
949
if ((rx[1]&protect_mask) != SCA3000_MEAS_MODE_MOT_DET)
950
len += sprintf(buf + len, "0\n");
875
if ((st->rx[0] & protect_mask) != SCA3000_MEAS_MODE_MOT_DET)
953
ret = sca3000_read_ctrl_reg(st,
954
SCA3000_REG_CTRL_SEL_MD_CTRL,
878
ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL);
958
881
/* only supporting logical or's for now */
959
len += sprintf(buf + len, "%d\n",
960
(rx[1] & this_attr->mask) ? 1 : 0);
882
ret = !!(ret & sca3000_addresses[num][2]);
964
885
mutex_unlock(&st->lock);
966
return ret ? ret : len;
969
890
* sca3000_query_free_fall_mode() is free fall mode enabled
977
897
struct iio_dev *indio_dev = dev_get_drvdata(dev);
978
898
struct sca3000_state *st = indio_dev->dev_data;
980
901
mutex_lock(&st->lock);
981
ret = sca3000_read_data(st, SCA3000_REG_ADDR_MODE, &rx, 1);
902
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
982
904
mutex_unlock(&st->lock);
985
907
len = sprintf(buf, "%d\n",
986
!!(rx[1] & SCA3000_FREE_FALL_DETECT));
992
* sca3000_query_ring_int() is the hardware ring status interrupt enabled
994
static ssize_t sca3000_query_ring_int(struct device *dev,
995
struct device_attribute *attr,
998
struct iio_event_attr *this_attr = to_iio_event_attr(attr);
1001
struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
1002
struct sca3000_state *st = indio_dev->dev_data;
1003
mutex_lock(&st->lock);
1004
ret = sca3000_read_data(st, SCA3000_REG_ADDR_INT_MASK, &rx, 1);
1005
mutex_unlock(&st->lock);
1008
len = sprintf(buf, "%d\n", (rx[1] & this_attr->mask) ? 1 : 0);
1014
* sca3000_set_ring_int() set state of ring status interrupt
1016
static ssize_t sca3000_set_ring_int(struct device *dev,
1017
struct device_attribute *attr,
1021
struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
1022
struct sca3000_state *st = indio_dev->dev_data;
1023
struct iio_event_attr *this_attr = to_iio_event_attr(attr);
1029
mutex_lock(&st->lock);
1030
ret = strict_strtol(buf, 10, &val);
1033
ret = sca3000_read_data(st, SCA3000_REG_ADDR_INT_MASK, &rx, 1);
1037
ret = sca3000_write_reg(st,
1038
SCA3000_REG_ADDR_INT_MASK,
1039
rx[1] | this_attr->mask);
1041
ret = sca3000_write_reg(st,
1042
SCA3000_REG_ADDR_INT_MASK,
1043
rx[1] & ~this_attr->mask);
1046
mutex_unlock(&st->lock);
1048
return ret ? ret : len;
908
!!(val & SCA3000_FREE_FALL_DETECT));
1076
936
/* read current value of mode register */
1077
ret = sca3000_read_data(st, SCA3000_REG_ADDR_MODE, &rx, 1);
937
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
1081
941
/*if off and should be on*/
1082
if (val && !(rx[1] & protect_mask))
942
if (val && !(st->rx[0] & protect_mask))
1083
943
ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE,
1084
(rx[1] | SCA3000_FREE_FALL_DETECT));
944
(st->rx[0] | SCA3000_FREE_FALL_DETECT));
1085
945
/* if on and should be off */
1086
else if (!val && (rx[1]&protect_mask))
946
else if (!val && (st->rx[0] & protect_mask))
1087
947
ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE,
1088
(rx[1] & ~protect_mask));
948
(st->rx[0] & ~protect_mask));
1092
950
mutex_unlock(&st->lock);
1103
961
* There is a complexity in knowing which mode to return to when
1104
962
* this mode is disabled. Currently normal mode is assumed.
1106
static ssize_t sca3000_set_mo_det(struct device *dev,
1107
struct device_attribute *attr,
964
static int sca3000_write_event_config(struct iio_dev *indio_dev,
1111
struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
1112
968
struct sca3000_state *st = indio_dev->dev_data;
1113
struct iio_event_attr *this_attr = to_iio_event_attr(attr);
1117
970
u8 protect_mask = 0x03;
1118
ret = strict_strtol(buf, 10, &val);
971
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
1122
973
mutex_lock(&st->lock);
1123
974
/* First read the motion detector config to find out if
1124
975
* this axis is on*/
1125
ret = sca3000_read_ctrl_reg(st,
1126
SCA3000_REG_CTRL_SEL_MD_CTRL,
976
ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL);
1129
978
goto exit_point;
1130
980
/* Off and should be on */
1131
if (val && !(rx[1] & this_attr->mask)) {
981
if (state && !(ctrlval & sca3000_addresses[num][2])) {
1132
982
ret = sca3000_write_ctrl_reg(st,
1133
983
SCA3000_REG_CTRL_SEL_MD_CTRL,
1134
rx[1] | this_attr->mask);
985
sca3000_addresses[num][2]);
1136
goto exit_point_free_rx;
1137
988
st->mo_det_use_count++;
1138
} else if (!val && (rx[1]&this_attr->mask)) {
989
} else if (!state && (ctrlval & sca3000_addresses[num][2])) {
1139
990
ret = sca3000_write_ctrl_reg(st,
1140
991
SCA3000_REG_CTRL_SEL_MD_CTRL,
1141
rx[1] & ~(this_attr->mask));
993
~(sca3000_addresses[num][2]));
1143
goto exit_point_free_rx;
1144
996
st->mo_det_use_count--;
1145
} else /* relies on clean state for device on boot */
1146
goto exit_point_free_rx;
1148
999
/* read current value of mode register */
1149
ret = sca3000_read_data(st, SCA3000_REG_ADDR_MODE, &rx, 1);
1000
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
1151
1002
goto exit_point;
1152
1003
/*if off and should be on*/
1153
1004
if ((st->mo_det_use_count)
1154
&& ((rx[1]&protect_mask) != SCA3000_MEAS_MODE_MOT_DET))
1005
&& ((st->rx[0] & protect_mask) != SCA3000_MEAS_MODE_MOT_DET))
1155
1006
ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE,
1156
(rx[1] & ~protect_mask)
1007
(st->rx[0] & ~protect_mask)
1157
1008
| SCA3000_MEAS_MODE_MOT_DET);
1158
1009
/* if on and should be off */
1159
1010
else if (!(st->mo_det_use_count)
1160
&& ((rx[1]&protect_mask) == SCA3000_MEAS_MODE_MOT_DET))
1011
&& ((st->rx[0] & protect_mask) == SCA3000_MEAS_MODE_MOT_DET))
1161
1012
ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE,
1162
(rx[1] & ~protect_mask));
1013
(st->rx[0] & ~protect_mask));
1166
1015
mutex_unlock(&st->lock);
1168
return ret ? ret : len;
1171
/* Shared event handler for all events as single event status register */
1172
IIO_EVENT_SH(all, &sca3000_handler_th);
1174
1020
/* Free fall detector related event attribute */
1175
IIO_EVENT_ATTR_NAMED_SH(accel_xayaz_mag_falling_en,
1176
accel_x&y&z_mag_falling_en,
1178
sca3000_query_free_fall_mode,
1179
sca3000_set_free_fall_mode,
1182
IIO_CONST_ATTR_NAMED(accel_xayaz_mag_falling_period,
1183
accel_x&y&z_mag_falling_period,
1186
/* Motion detector related event attributes */
1187
IIO_EVENT_ATTR_SH(accel_x_mag_rising_en,
1189
sca3000_query_mo_det,
1191
SCA3000_MD_CTRL_OR_X);
1193
IIO_EVENT_ATTR_SH(accel_y_mag_rising_en,
1195
sca3000_query_mo_det,
1197
SCA3000_MD_CTRL_OR_Y);
1199
IIO_EVENT_ATTR_SH(accel_z_mag_rising_en,
1201
sca3000_query_mo_det,
1203
SCA3000_MD_CTRL_OR_Z);
1205
/* Hardware ring buffer related event attributes */
1206
IIO_EVENT_ATTR_RING_50_FULL_SH(iio_event_all,
1207
sca3000_query_ring_int,
1208
sca3000_set_ring_int,
1209
SCA3000_INT_MASK_RING_HALF);
1211
IIO_EVENT_ATTR_RING_75_FULL_SH(iio_event_all,
1212
sca3000_query_ring_int,
1213
sca3000_set_ring_int,
1214
SCA3000_INT_MASK_RING_THREE_QUARTER);
1021
static IIO_DEVICE_ATTR_NAMED(accel_xayaz_mag_falling_en,
1022
accel_x&y&z_mag_falling_en,
1024
sca3000_query_free_fall_mode,
1025
sca3000_set_free_fall_mode,
1028
static IIO_CONST_ATTR_NAMED(accel_xayaz_mag_falling_period,
1029
accel_x&y&z_mag_falling_period,
1216
1032
static struct attribute *sca3000_event_attributes[] = {
1217
&iio_event_attr_accel_xayaz_mag_falling_en.dev_attr.attr,
1033
&iio_dev_attr_accel_xayaz_mag_falling_en.dev_attr.attr,
1218
1034
&iio_const_attr_accel_xayaz_mag_falling_period.dev_attr.attr,
1219
&iio_event_attr_accel_x_mag_rising_en.dev_attr.attr,
1220
&iio_dev_attr_accel_x_raw_mag_rising_value.dev_attr.attr,
1221
&iio_event_attr_accel_y_mag_rising_en.dev_attr.attr,
1222
&iio_dev_attr_accel_y_raw_mag_rising_value.dev_attr.attr,
1223
&iio_event_attr_accel_z_mag_rising_en.dev_attr.attr,
1224
&iio_dev_attr_accel_z_raw_mag_rising_value.dev_attr.attr,
1225
&iio_event_attr_ring_50_full.dev_attr.attr,
1226
&iio_event_attr_ring_75_full.dev_attr.attr,
1241
1049
static int sca3000_clean_setup(struct sca3000_state *st)
1246
1053
mutex_lock(&st->lock);
1247
1054
/* Ensure all interrupts have been acknowledged */
1248
ret = sca3000_read_data(st, SCA3000_REG_ADDR_INT_STATUS, &rx, 1);
1055
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_STATUS, 1);
1250
1057
goto error_ret;
1253
1059
/* Turn off all motion detection channels */
1254
ret = sca3000_read_ctrl_reg(st,
1255
SCA3000_REG_CTRL_SEL_MD_CTRL,
1060
ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL);
1258
1062
goto error_ret;
1259
ret = sca3000_write_ctrl_reg(st,
1260
SCA3000_REG_CTRL_SEL_MD_CTRL,
1261
rx[1] & SCA3000_MD_CTRL_PROT_MASK);
1063
ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_MD_CTRL,
1064
ret & SCA3000_MD_CTRL_PROT_MASK);
1264
1066
goto error_ret;
1266
1068
/* Disable ring buffer */
1267
sca3000_read_ctrl_reg(st,
1268
SCA3000_REG_CTRL_SEL_OUT_CTRL,
1270
/* Frequency of ring buffer sampling deliberately restricted to make
1271
* debugging easier - add control of this later */
1272
ret = sca3000_write_ctrl_reg(st,
1273
SCA3000_REG_CTRL_SEL_OUT_CTRL,
1274
(rx[1] & SCA3000_OUT_CTRL_PROT_MASK)
1069
ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL);
1070
ret = sca3000_write_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL,
1071
(ret & SCA3000_OUT_CTRL_PROT_MASK)
1275
1072
| SCA3000_OUT_CTRL_BUF_X_EN
1276
1073
| SCA3000_OUT_CTRL_BUF_Y_EN
1277
1074
| SCA3000_OUT_CTRL_BUF_Z_EN
1278
1075
| SCA3000_OUT_CTRL_BUF_DIV_4);
1282
1077
goto error_ret;
1283
1078
/* Enable interrupts, relevant to mode and set up as active low */
1284
ret = sca3000_read_data(st,
1285
SCA3000_REG_ADDR_INT_MASK,
1079
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
1288
1081
goto error_ret;
1289
1082
ret = sca3000_write_reg(st,
1290
1083
SCA3000_REG_ADDR_INT_MASK,
1291
(rx[1] & SCA3000_INT_MASK_PROT_MASK)
1084
(ret & SCA3000_INT_MASK_PROT_MASK)
1292
1085
| SCA3000_INT_MASK_ACTIVE_LOW);
1295
1087
goto error_ret;
1296
1088
/* Select normal measurement mode, free fall off, ring off */
1297
1089
/* Ring in 12 bit mode - it is fine to overwrite reserved bits 3,5
1298
1090
* as that occurs in one of the example on the datasheet */
1299
ret = sca3000_read_data(st,
1300
SCA3000_REG_ADDR_MODE,
1091
ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
1303
1093
goto error_ret;
1304
ret = sca3000_write_reg(st,
1305
SCA3000_REG_ADDR_MODE,
1306
(rx[1] & SCA3000_MODE_PROT_MASK));
1094
ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE,
1095
(st->rx[0] & SCA3000_MODE_PROT_MASK));
1315
static int __devinit __sca3000_probe(struct spi_device *spi,
1316
enum sca3000_variant variant)
1103
static const struct iio_info sca3000_info = {
1104
.attrs = &sca3000_attribute_group,
1105
.read_raw = &sca3000_read_raw,
1106
.num_interrupt_lines = 1,
1107
.event_attrs = &sca3000_event_attribute_group,
1108
.read_event_value = &sca3000_read_thresh,
1109
.write_event_value = &sca3000_write_thresh,
1110
.read_event_config = &sca3000_read_event_config,
1111
.write_event_config = &sca3000_write_event_config,
1112
.driver_module = THIS_MODULE,
1115
static const struct iio_info sca3000_info_with_temp = {
1116
.attrs = &sca3000_attribute_group_with_temp,
1117
.read_raw = &sca3000_read_raw,
1118
.read_event_value = &sca3000_read_thresh,
1119
.write_event_value = &sca3000_write_thresh,
1120
.read_event_config = &sca3000_read_event_config,
1121
.write_event_config = &sca3000_write_event_config,
1122
.driver_module = THIS_MODULE,
1125
static int __devinit sca3000_probe(struct spi_device *spi)
1318
1127
int ret, regdone = 0;
1319
1128
struct sca3000_state *st;
1326
1135
spi_set_drvdata(spi, st);
1328
st->tx = kmalloc(sizeof(*st->tx)*6, GFP_KERNEL);
1329
if (st->tx == NULL) {
1331
goto error_clear_st;
1333
st->rx = kmalloc(sizeof(*st->rx)*3, GFP_KERNEL);
1334
if (st->rx == NULL) {
1339
1138
mutex_init(&st->lock);
1340
st->info = &sca3000_spi_chip_info_tbl[variant];
1139
st->info = &sca3000_spi_chip_info_tbl[spi_get_device_id(spi)
1342
st->indio_dev = iio_allocate_device();
1142
st->indio_dev = iio_allocate_device(0);
1343
1143
if (st->indio_dev == NULL) {
1145
goto error_clear_st;
1348
1147
st->indio_dev->dev.parent = &spi->dev;
1349
st->indio_dev->num_interrupt_lines = 1;
1350
st->indio_dev->event_attrs = &sca3000_event_attribute_group;
1148
st->indio_dev->name = spi_get_device_id(spi)->name;
1351
1149
if (st->info->temp_output)
1352
st->indio_dev->attrs = &sca3000_attribute_group_with_temp;
1354
st->indio_dev->attrs = &sca3000_attribute_group;
1150
st->indio_dev->info = &sca3000_info_with_temp;
1152
st->indio_dev->info = &sca3000_info;
1153
st->indio_dev->channels = sca3000_channels;
1154
st->indio_dev->num_channels = ARRAY_SIZE(sca3000_channels);
1355
1156
st->indio_dev->dev_data = (void *)(st);
1356
1157
st->indio_dev->modes = INDIO_DIRECT_MODE;
1358
1159
sca3000_configure_ring(st->indio_dev);
1360
1160
ret = iio_device_register(st->indio_dev);
1362
1162
goto error_free_dev;
1364
ret = iio_ring_buffer_register(st->indio_dev->ring, 0);
1164
ret = iio_ring_buffer_register_ex(st->indio_dev->ring, 0,
1166
ARRAY_SIZE(sca3000_channels));
1366
1168
goto error_unregister_dev;
1367
1169
if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) {
1368
INIT_WORK(&st->interrupt_handler_ws,
1369
sca3000_interrupt_handler_bh);
1370
ret = iio_register_interrupt_line(spi->irq,
1373
IRQF_TRIGGER_FALLING,
1170
ret = request_threaded_irq(spi->irq,
1172
&sca3000_event_handler,
1173
IRQF_TRIGGER_FALLING,
1376
1177
goto error_unregister_ring;
1378
* Probably a common situation. All interrupts need an ack
1379
* and there is only one handler so the complicated list system
1380
* is overkill. At very least a simpler registration method
1381
* might be worthwhile.
1383
iio_add_event_to_list(
1384
iio_event_attr_accel_z_mag_rising_en.listel,
1386
->interrupts[0]->ev_list);
1388
1179
sca3000_register_ring_funcs(st->indio_dev);
1389
1180
ret = sca3000_clean_setup(st);
1391
goto error_unregister_interrupt_line;
1182
goto error_free_irq;
1394
error_unregister_interrupt_line:
1395
1186
if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
1396
iio_unregister_interrupt_line(st->indio_dev, 0);
1187
free_irq(spi->irq, st->indio_dev);
1397
1188
error_unregister_ring:
1398
1189
iio_ring_buffer_unregister(st->indio_dev->ring);
1399
1190
error_unregister_dev:
1443
1229
if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
1444
iio_unregister_interrupt_line(indio_dev, 0);
1230
free_irq(spi->irq, indio_dev);
1445
1231
iio_ring_buffer_unregister(indio_dev->ring);
1446
1232
sca3000_unconfigure_ring(indio_dev);
1447
1233
iio_device_unregister(indio_dev);
1456
/* These macros save on an awful lot of repeated code */
1457
#define SCA3000_VARIANT_PROBE(_name) \
1458
static int __devinit \
1459
sca3000_##_name##_probe(struct spi_device *spi) \
1461
return __sca3000_probe(spi, _name); \
1464
#define SCA3000_VARIANT_SPI_DRIVER(_name) \
1465
struct spi_driver sca3000_##_name##_driver = { \
1467
.name = "sca3000_" #_name, \
1468
.owner = THIS_MODULE, \
1470
.probe = sca3000_##_name##_probe, \
1471
.remove = __devexit_p(sca3000_remove), \
1474
SCA3000_VARIANT_PROBE(d01);
1475
static SCA3000_VARIANT_SPI_DRIVER(d01);
1477
SCA3000_VARIANT_PROBE(e02);
1478
static SCA3000_VARIANT_SPI_DRIVER(e02);
1480
SCA3000_VARIANT_PROBE(e04);
1481
static SCA3000_VARIANT_SPI_DRIVER(e04);
1483
SCA3000_VARIANT_PROBE(e05);
1484
static SCA3000_VARIANT_SPI_DRIVER(e05);
1240
static const struct spi_device_id sca3000_id[] = {
1241
{"sca3000_d01", d01},
1242
{"sca3000_e02", e02},
1243
{"sca3000_e04", e04},
1244
{"sca3000_e05", e05},
1248
static struct spi_driver sca3000_driver = {
1251
.owner = THIS_MODULE,
1253
.probe = sca3000_probe,
1254
.remove = __devexit_p(sca3000_remove),
1255
.id_table = sca3000_id,
1486
1258
static __init int sca3000_init(void)
1490
ret = spi_register_driver(&sca3000_d01_driver);
1493
ret = spi_register_driver(&sca3000_e02_driver);
1495
goto error_unreg_d01;
1496
ret = spi_register_driver(&sca3000_e04_driver);
1498
goto error_unreg_e02;
1499
ret = spi_register_driver(&sca3000_e05_driver);
1501
goto error_unreg_e04;
1506
spi_unregister_driver(&sca3000_e04_driver);
1508
spi_unregister_driver(&sca3000_e02_driver);
1510
spi_unregister_driver(&sca3000_d01_driver);
1260
return spi_register_driver(&sca3000_driver);
1262
module_init(sca3000_init);
1516
1264
static __exit void sca3000_exit(void)
1518
spi_unregister_driver(&sca3000_e05_driver);
1519
spi_unregister_driver(&sca3000_e04_driver);
1520
spi_unregister_driver(&sca3000_e02_driver);
1521
spi_unregister_driver(&sca3000_d01_driver);
1266
spi_unregister_driver(&sca3000_driver);
1524
module_init(sca3000_init);
1525
1268
module_exit(sca3000_exit);
1527
1270
MODULE_AUTHOR("Jonathan Cameron <jic23@cam.ac.uk>");