Lines Matching refs:spi

3  * abstraction of the spi interface of HopeRf rf69 radio module
10 #include <linux/spi/spi.h>
20 u8 rf69_read_reg(struct spi_device *spi, u8 addr)
22 return spi_w8r8(spi, addr);
25 static int rf69_write_reg(struct spi_device *spi, u8 addr, u8 value)
32 return spi_write(spi, &buffer, ARRAY_SIZE(buffer));
37 static int rf69_set_bit(struct spi_device *spi, u8 reg, u8 mask)
41 tmp = rf69_read_reg(spi, reg);
43 return rf69_write_reg(spi, reg, tmp);
46 static int rf69_clear_bit(struct spi_device *spi, u8 reg, u8 mask)
50 tmp = rf69_read_reg(spi, reg);
52 return rf69_write_reg(spi, reg, tmp);
55 static inline int rf69_read_mod_write(struct spi_device *spi, u8 reg,
60 tmp = rf69_read_reg(spi, reg);
62 return rf69_write_reg(spi, reg, tmp);
67 int rf69_get_version(struct spi_device *spi)
69 return rf69_read_reg(spi, REG_VERSION);
72 int rf69_set_mode(struct spi_device *spi, enum mode mode)
83 dev_dbg(&spi->dev, "set: illegal mode %u\n", mode);
87 return rf69_read_mod_write(spi, REG_OPMODE, MASK_OPMODE_MODE,
99 int rf69_set_data_mode(struct spi_device *spi, u8 data_mode)
101 return rf69_read_mod_write(spi, REG_DATAMODUL, MASK_DATAMODUL_MODE,
105 int rf69_set_modulation(struct spi_device *spi, enum modulation modulation)
113 dev_dbg(&spi->dev, "set: illegal modulation %u\n", modulation);
117 return rf69_read_mod_write(spi, REG_DATAMODUL,
122 static enum modulation rf69_get_modulation(struct spi_device *spi)
126 modulation_reg = rf69_read_reg(spi, REG_DATAMODUL);
138 int rf69_set_modulation_shaping(struct spi_device *spi,
141 switch (rf69_get_modulation(spi)) {
145 return rf69_read_mod_write(spi, REG_DATAMODUL,
149 return rf69_read_mod_write(spi, REG_DATAMODUL,
153 return rf69_read_mod_write(spi, REG_DATAMODUL,
157 return rf69_read_mod_write(spi, REG_DATAMODUL,
161 dev_dbg(&spi->dev, "set: illegal mod shaping for FSK %u\n", mod_shaping);
167 return rf69_read_mod_write(spi, REG_DATAMODUL,
171 return rf69_read_mod_write(spi, REG_DATAMODUL,
175 return rf69_read_mod_write(spi, REG_DATAMODUL,
179 dev_dbg(&spi->dev, "set: illegal mod shaping for OOK %u\n", mod_shaping);
183 dev_dbg(&spi->dev, "set: modulation undefined\n");
188 int rf69_set_bit_rate(struct spi_device *spi, u16 bit_rate)
197 mod = rf69_get_modulation(spi);
199 dev_dbg(&spi->dev, "setBitRate: modulation is undefined\n");
205 dev_dbg(&spi->dev, "setBitRate: illegal input param\n");
216 retval = rf69_write_reg(spi, REG_BITRATE_MSB, msb);
219 retval = rf69_write_reg(spi, REG_BITRATE_LSB, lsb);
226 int rf69_set_deviation(struct spi_device *spi, u32 deviation)
238 bit_rate_reg = rf69_read_reg(spi, REG_BITRATE_MSB) << 8;
239 bit_rate_reg |= rf69_read_reg(spi, REG_BITRATE_LSB);
248 dev_dbg(&spi->dev,
266 dev_dbg(&spi->dev, "set_deviation: err in calc of msb\n");
271 retval = rf69_write_reg(spi, REG_FDEV_MSB, msb);
274 retval = rf69_write_reg(spi, REG_FDEV_LSB, lsb);
281 int rf69_set_frequency(struct spi_device *spi, u32 frequency)
299 dev_dbg(&spi->dev, "setFrequency: illegal input param\n");
312 retval = rf69_write_reg(spi, REG_FRF_MSB, msb);
315 retval = rf69_write_reg(spi, REG_FRF_MID, mid);
318 retval = rf69_write_reg(spi, REG_FRF_LSB, lsb);
325 int rf69_enable_amplifier(struct spi_device *spi, u8 amplifier_mask)
327 return rf69_set_bit(spi, REG_PALEVEL, amplifier_mask);
330 int rf69_disable_amplifier(struct spi_device *spi, u8 amplifier_mask)
332 return rf69_clear_bit(spi, REG_PALEVEL, amplifier_mask);
335 int rf69_set_output_power_level(struct spi_device *spi, u8 power_level)
342 pa_level = rf69_read_reg(spi, REG_PALEVEL);
348 ocp = rf69_read_reg(spi, REG_OCP);
349 test_pa1 = rf69_read_reg(spi, REG_TESTPA1);
350 test_pa2 = rf69_read_reg(spi, REG_TESTPA2);
377 return rf69_read_mod_write(spi, REG_PALEVEL, MASK_PALEVEL_OUTPUT_POWER,
380 dev_dbg(&spi->dev, "set: illegal power level %u\n", power_level);
384 int rf69_set_pa_ramp(struct spi_device *spi, enum pa_ramp pa_ramp)
405 dev_dbg(&spi->dev, "set: illegal pa_ramp %u\n", pa_ramp);
409 return rf69_write_reg(spi, REG_PARAMP, pa_ramp_map[pa_ramp]);
412 int rf69_set_antenna_impedance(struct spi_device *spi,
417 return rf69_clear_bit(spi, REG_LNA, MASK_LNA_ZIN);
419 return rf69_set_bit(spi, REG_LNA, MASK_LNA_ZIN);
421 dev_dbg(&spi->dev, "set: illegal antenna impedance %u\n", antenna_impedance);
426 int rf69_set_lna_gain(struct spi_device *spi, enum lna_gain lna_gain)
439 dev_dbg(&spi->dev, "set: illegal lna gain %u\n", lna_gain);
443 return rf69_read_mod_write(spi, REG_LNA, MASK_LNA_GAIN,
447 static int rf69_set_bandwidth_intern(struct spi_device *spi, u8 reg,
454 dev_dbg(&spi->dev, "set: illegal bandwidth exponent %u\n", exponent);
461 dev_dbg(&spi->dev, "set: illegal bandwidth mantisse %u\n", mantisse);
466 bandwidth = rf69_read_reg(spi, reg);
488 return rf69_write_reg(spi, reg, bandwidth);
491 int rf69_set_bandwidth(struct spi_device *spi, enum mantisse mantisse,
494 return rf69_set_bandwidth_intern(spi, REG_RXBW, mantisse, exponent);
497 int rf69_set_bandwidth_during_afc(struct spi_device *spi,
501 return rf69_set_bandwidth_intern(spi, REG_AFCBW, mantisse, exponent);
504 int rf69_set_ook_threshold_dec(struct spi_device *spi,
519 dev_dbg(&spi->dev, "set: illegal OOK threshold decrement %u\n",
524 return rf69_read_mod_write(spi, REG_OOKPEAK, MASK_OOKPEAK_THRESDEC,
528 int rf69_set_dio_mapping(struct spi_device *spi, u8 dio_number, u8 value)
567 dev_dbg(&spi->dev, "set: illegal dio number %u\n", dio_number);
572 dio_value = rf69_read_reg(spi, dio_addr);
578 return rf69_write_reg(spi, dio_addr, dio_value);
581 int rf69_set_rssi_threshold(struct spi_device *spi, u8 threshold)
585 return rf69_write_reg(spi, REG_RSSITHRESH, threshold);
588 int rf69_set_preamble_length(struct spi_device *spi, u16 preamble_length)
600 retval = rf69_write_reg(spi, REG_PREAMBLE_MSB, msb);
603 return rf69_write_reg(spi, REG_PREAMBLE_LSB, lsb);
606 int rf69_enable_sync(struct spi_device *spi)
608 return rf69_set_bit(spi, REG_SYNC_CONFIG, MASK_SYNC_CONFIG_SYNC_ON);
611 int rf69_disable_sync(struct spi_device *spi)
613 return rf69_clear_bit(spi, REG_SYNC_CONFIG, MASK_SYNC_CONFIG_SYNC_ON);
616 int rf69_set_fifo_fill_condition(struct spi_device *spi,
621 return rf69_set_bit(spi, REG_SYNC_CONFIG,
624 return rf69_clear_bit(spi, REG_SYNC_CONFIG,
627 dev_dbg(&spi->dev, "set: illegal fifo fill condition %u\n", fifo_fill_condition);
632 int rf69_set_sync_size(struct spi_device *spi, u8 sync_size)
636 dev_dbg(&spi->dev, "set: illegal sync size %u\n", sync_size);
641 return rf69_read_mod_write(spi, REG_SYNC_CONFIG,
646 int rf69_set_sync_values(struct spi_device *spi, u8 sync_values[8])
650 retval += rf69_write_reg(spi, REG_SYNCVALUE1, sync_values[0]);
651 retval += rf69_write_reg(spi, REG_SYNCVALUE2, sync_values[1]);
652 retval += rf69_write_reg(spi, REG_SYNCVALUE3, sync_values[2]);
653 retval += rf69_write_reg(spi, REG_SYNCVALUE4, sync_values[3]);
654 retval += rf69_write_reg(spi, REG_SYNCVALUE5, sync_values[4]);
655 retval += rf69_write_reg(spi, REG_SYNCVALUE6, sync_values[5]);
656 retval += rf69_write_reg(spi, REG_SYNCVALUE7, sync_values[6]);
657 retval += rf69_write_reg(spi, REG_SYNCVALUE8, sync_values[7]);
662 int rf69_set_packet_format(struct spi_device *spi,
667 return rf69_set_bit(spi, REG_PACKETCONFIG1,
670 return rf69_clear_bit(spi, REG_PACKETCONFIG1,
673 dev_dbg(&spi->dev, "set: illegal packet format %u\n", packet_format);
678 int rf69_enable_crc(struct spi_device *spi)
680 return rf69_set_bit(spi, REG_PACKETCONFIG1, MASK_PACKETCONFIG1_CRC_ON);
683 int rf69_disable_crc(struct spi_device *spi)
685 return rf69_clear_bit(spi, REG_PACKETCONFIG1, MASK_PACKETCONFIG1_CRC_ON);
688 int rf69_set_address_filtering(struct spi_device *spi,
699 dev_dbg(&spi->dev, "set: illegal address filtering %u\n", address_filtering);
703 return rf69_read_mod_write(spi, REG_PACKETCONFIG1,
708 int rf69_set_payload_length(struct spi_device *spi, u8 payload_length)
710 return rf69_write_reg(spi, REG_PAYLOAD_LENGTH, payload_length);
713 int rf69_set_node_address(struct spi_device *spi, u8 node_address)
715 return rf69_write_reg(spi, REG_NODEADRS, node_address);
718 int rf69_set_broadcast_address(struct spi_device *spi, u8 broadcast_address)
720 return rf69_write_reg(spi, REG_BROADCASTADRS, broadcast_address);
723 int rf69_set_tx_start_condition(struct spi_device *spi,
728 return rf69_clear_bit(spi, REG_FIFO_THRESH,
731 return rf69_set_bit(spi, REG_FIFO_THRESH,
734 dev_dbg(&spi->dev, "set: illegal tx start condition %u\n", tx_start_condition);
739 int rf69_set_fifo_threshold(struct spi_device *spi, u8 threshold)
745 dev_dbg(&spi->dev, "set: illegal fifo threshold %u\n", threshold);
750 retval = rf69_read_mod_write(spi, REG_FIFO_THRESH,
760 return rf69_read_fifo(spi, (u8 *)&retval, 1);
763 int rf69_set_dagc(struct spi_device *spi, enum dagc dagc)
772 dev_dbg(&spi->dev, "set: illegal dagc %u\n", dagc);
776 return rf69_write_reg(spi, REG_TESTDAGC, dagc_map[dagc]);
781 int rf69_read_fifo(struct spi_device *spi, u8 *buffer, unsigned int size)
789 dev_dbg(&spi->dev,
801 retval = spi_sync_transfer(spi, &transfer, 1);
805 dev_dbg(&spi->dev, "%d - 0x%x\n", i, local_buffer[i + 1]);
812 int rf69_write_fifo(struct spi_device *spi, u8 *buffer, unsigned int size)
818 dev_dbg(&spi->dev,
828 dev_dbg(&spi->dev, "%d - 0x%x\n", i, buffer[i]);
830 return spi_write(spi, local_buffer, size + 1);