Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25888dc5 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman
Browse files

staging:iio:sca3000 extract old event handling and move to poll for events from buffer



Fairly substantial rewrite as the code had bitrotted.
A rethink is needed for how to handle variable types in the new chan_spec world.

This patch restores sca3000 buffer usage to a working state.
V3: Rebase fixups.
V2: Move to new version of IIO_CHAN macro

Signed-off-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 1e3345bc
Loading
Loading
Loading
Loading
+22 −54
Original line number Diff line number Diff line
@@ -179,15 +179,15 @@ struct sca3000_state {
	int				mo_det_use_count;
	struct mutex			lock;
	int				bpse;
	u8				*tx;
	/* not used during a ring buffer read */
	u8				*rx;
	/* Can these share a cacheline ? */
	u8				rx[2] ____cacheline_aligned;
	u8				tx[6] ____cacheline_aligned;
};

/**
 * struct sca3000_chip_info - model dependent parameters
 * @name:			model identification
 * @scale:			string containing floating point scale factor
 * @scale:			scale * 10^-6
 * @temp_output:		some devices have temperature sensors.
 * @measurement_mode_freq:	normal mode sampling frequency
 * @option_mode_1:		first optional mode. Not all models have one
@@ -200,28 +200,19 @@ struct sca3000_state {
 **/
struct sca3000_chip_info {
	const char		*name;
	const char		*scale;
	unsigned int		scale;
	bool			temp_output;
	int			measurement_mode_freq;
	int			option_mode_1;
	int			option_mode_1_freq;
	int			option_mode_2;
	int			option_mode_2_freq;
	int			mot_det_mult_xz[6];
	int			mot_det_mult_y[7];
};

/**
 * sca3000_read_data() read a series of values from the device
 * @dev:		device
 * @reg_address_high:	start address (decremented read)
 * @rx:			pointer where received data is placed. Callee
 *			responsible for freeing this.
 * @len:		number of bytes to read
 *
 * The main lock must be held.
 **/
int sca3000_read_data(struct sca3000_state *st,
int sca3000_read_data_short(struct sca3000_state *st,
			    u8 reg_address_high,
		      u8 **rx_p,
			    int len);

/**
@@ -233,29 +224,6 @@ int sca3000_read_data(struct sca3000_state *st,
 **/
int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val);

/* Conversion function for use with the ring buffer when in 11bit mode */
static inline int sca3000_11bit_convert(uint8_t msb, uint8_t lsb)
{
	int16_t val;

	val = ((lsb >> 3) & 0x1C) | (msb << 5);
	val |= (val & (1 << 12)) ? 0xE000 : 0;

	return val;
}

static inline int sca3000_13bit_convert(uint8_t msb, uint8_t lsb)
{
	s16 val;

	val = ((lsb >> 3) & 0x1F) | (msb << 5);
	/* sign fill */
	val |= (val & (1 << 12)) ? 0xE000 : 0;

	return val;
}


#ifdef CONFIG_IIO_RING_BUFFER
/**
 * sca3000_register_ring_funcs() setup the ring state change functions