mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 14:13:01 -04:00
Staging tree pull request for 3.5-rc1
Here is the big staging tree pull request for the 3.5-rc1 merge window. Loads of changes here, and we just narrowly added more lines than we added: 622 files changed, 28356 insertions(+), 26059 deletions(-) But, good news is that there is a number of subsystems that moved out of the staging tree, to their respective "real" portions of the kernel. Code that moved out was: - iio core code - mei driver - vme core and bridge drivers There was one broken network driver that moved into staging as a step before it is removed from the tree (pc300), and there was a few new drivers added to the tree: - new iio drivers - gdm72xx wimax USB driver - ipack subsystem and 2 drivers All of the movements around have acks from the various subsystem maintainers, and all of this has been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iEYEABECAAYFAk+7q8MACgkQMUfUDdst+ymjogCguo8fANFVlPWeZGeoBTL+aQfQ yTkAoLE0codmh+2SvhulYgyU1Wh6ZDK2 =nJ2F -----END PGP SIGNATURE----- Merge tag 'staging-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging tree changes from Greg Kroah-Hartman: "Here is the big staging tree pull request for the 3.5-rc1 merge window. Loads of changes here, and we just narrowly added more lines than we added: 622 files changed, 28356 insertions(+), 26059 deletions(-) But, good news is that there is a number of subsystems that moved out of the staging tree, to their respective "real" portions of the kernel. Code that moved out was: - iio core code - mei driver - vme core and bridge drivers There was one broken network driver that moved into staging as a step before it is removed from the tree (pc300), and there was a few new drivers added to the tree: - new iio drivers - gdm72xx wimax USB driver - ipack subsystem and 2 drivers All of the movements around have acks from the various subsystem maintainers, and all of this has been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" Fixed up various trivial conflicts, along with a non-trivial one found in -next and pointed out by Olof Johanssen: a clean - but incorrect - merge of the arch/arm/boot/dts/at91sam9g20.dtsi file. Fix up manually as per Stephen Rothwell. * tag 'staging-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (536 commits) Staging: bcm: Remove two unused variables from Adapter.h Staging: bcm: Removes the volatile type definition from Adapter.h Staging: bcm: Rename all "INT" to "int" in Adapter.h Staging: bcm: Fix warning: __packed vs. __attribute__((packed)) in Adapter.h Staging: bcm: Correctly format all comments in Adapter.h Staging: bcm: Fix all whitespace issues in Adapter.h Staging: bcm: Properly format braces in Adapter.h Staging: ipack/bridges/tpci200: remove unneeded casts Staging: ipack/bridges/tpci200: remove TPCI200_SHORTNAME constant Staging: ipack: remove board_name and bus_name fields from struct ipack_device Staging: ipack: improve the register of a bus and a device in the bus. staging: comedi: cleanup all the comedi_driver 'detach' functions staging: comedi: remove all 'default N' in Kconfig staging: line6/config.h: Delete unused header staging: gdm72xx depends on NET staging: gdm72xx: Set up parent link in sysfs for gdm72xx devices staging: drm/omap: initial dmabuf/prime import support staging: drm/omap: dmabuf/prime mmap support pstore/ram: Add ECC support pstore/ram: Switch to persistent_ram routines ...
This commit is contained in:
commit
fb09bafda6
611 changed files with 28159 additions and 25952 deletions
|
|
@ -238,6 +238,7 @@ header-y += map_to_7segment.h
|
|||
header-y += matroxfb.h
|
||||
header-y += mdio.h
|
||||
header-y += media.h
|
||||
header-y += mei.h
|
||||
header-y += mempolicy.h
|
||||
header-y += meye.h
|
||||
header-y += mii.h
|
||||
|
|
@ -380,6 +381,7 @@ header-y += unistd.h
|
|||
header-y += usbdevice_fs.h
|
||||
header-y += utime.h
|
||||
header-y += utsname.h
|
||||
header-y += uuid.h
|
||||
header-y += uvcvideo.h
|
||||
header-y += v4l2-mediabus.h
|
||||
header-y += v4l2-subdev.h
|
||||
|
|
|
|||
|
|
@ -76,4 +76,7 @@ static inline int alarmtimer_callback_running(struct alarm *timer)
|
|||
}
|
||||
|
||||
|
||||
/* Provide way to access the rtc device being used by alarmtimers */
|
||||
struct rtc_device *alarmtimer_get_rtcdev(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
191
include/linux/iio/buffer.h
Normal file
191
include/linux/iio/buffer.h
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
/* The industrial I/O core - generic buffer interfaces.
|
||||
*
|
||||
* Copyright (c) 2008 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _IIO_BUFFER_GENERIC_H_
|
||||
#define _IIO_BUFFER_GENERIC_H_
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/iio/iio.h>
|
||||
|
||||
#ifdef CONFIG_IIO_BUFFER
|
||||
|
||||
struct iio_buffer;
|
||||
|
||||
/**
|
||||
* struct iio_buffer_access_funcs - access functions for buffers.
|
||||
* @store_to: actually store stuff to the buffer
|
||||
* @read_first_n: try to get a specified number of bytes (must exist)
|
||||
* @request_update: if a parameter change has been marked, update underlying
|
||||
* storage.
|
||||
* @get_bytes_per_datum:get current bytes per datum
|
||||
* @set_bytes_per_datum:set number of bytes per datum
|
||||
* @get_length: get number of datums in buffer
|
||||
* @set_length: set number of datums in buffer
|
||||
*
|
||||
* The purpose of this structure is to make the buffer element
|
||||
* modular as event for a given driver, different usecases may require
|
||||
* different buffer designs (space efficiency vs speed for example).
|
||||
*
|
||||
* It is worth noting that a given buffer implementation may only support a
|
||||
* small proportion of these functions. The core code 'should' cope fine with
|
||||
* any of them not existing.
|
||||
**/
|
||||
struct iio_buffer_access_funcs {
|
||||
int (*store_to)(struct iio_buffer *buffer, u8 *data, s64 timestamp);
|
||||
int (*read_first_n)(struct iio_buffer *buffer,
|
||||
size_t n,
|
||||
char __user *buf);
|
||||
|
||||
int (*request_update)(struct iio_buffer *buffer);
|
||||
|
||||
int (*get_bytes_per_datum)(struct iio_buffer *buffer);
|
||||
int (*set_bytes_per_datum)(struct iio_buffer *buffer, size_t bpd);
|
||||
int (*get_length)(struct iio_buffer *buffer);
|
||||
int (*set_length)(struct iio_buffer *buffer, int length);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iio_buffer - general buffer structure
|
||||
* @length: [DEVICE] number of datums in buffer
|
||||
* @bytes_per_datum: [DEVICE] size of individual datum including timestamp
|
||||
* @scan_el_attrs: [DRIVER] control of scan elements if that scan mode
|
||||
* control method is used
|
||||
* @scan_mask: [INTERN] bitmask used in masking scan mode elements
|
||||
* @scan_timestamp: [INTERN] does the scan mode include a timestamp
|
||||
* @access: [DRIVER] buffer access functions associated with the
|
||||
* implementation.
|
||||
* @scan_el_dev_attr_list:[INTERN] list of scan element related attributes.
|
||||
* @scan_el_group: [DRIVER] attribute group for those attributes not
|
||||
* created from the iio_chan_info array.
|
||||
* @pollq: [INTERN] wait queue to allow for polling on the buffer.
|
||||
* @stufftoread: [INTERN] flag to indicate new data.
|
||||
* @demux_list: [INTERN] list of operations required to demux the scan.
|
||||
* @demux_bounce: [INTERN] buffer for doing gather from incoming scan.
|
||||
**/
|
||||
struct iio_buffer {
|
||||
int length;
|
||||
int bytes_per_datum;
|
||||
struct attribute_group *scan_el_attrs;
|
||||
long *scan_mask;
|
||||
bool scan_timestamp;
|
||||
const struct iio_buffer_access_funcs *access;
|
||||
struct list_head scan_el_dev_attr_list;
|
||||
struct attribute_group scan_el_group;
|
||||
wait_queue_head_t pollq;
|
||||
bool stufftoread;
|
||||
const struct attribute_group *attrs;
|
||||
struct list_head demux_list;
|
||||
unsigned char *demux_bounce;
|
||||
};
|
||||
|
||||
/**
|
||||
* iio_buffer_init() - Initialize the buffer structure
|
||||
* @buffer: buffer to be initialized
|
||||
**/
|
||||
void iio_buffer_init(struct iio_buffer *buffer);
|
||||
|
||||
/**
|
||||
* __iio_update_buffer() - update common elements of buffers
|
||||
* @buffer: buffer that is the event source
|
||||
* @bytes_per_datum: size of individual datum including timestamp
|
||||
* @length: number of datums in buffer
|
||||
**/
|
||||
static inline void __iio_update_buffer(struct iio_buffer *buffer,
|
||||
int bytes_per_datum, int length)
|
||||
{
|
||||
buffer->bytes_per_datum = bytes_per_datum;
|
||||
buffer->length = length;
|
||||
}
|
||||
|
||||
int iio_scan_mask_query(struct iio_dev *indio_dev,
|
||||
struct iio_buffer *buffer, int bit);
|
||||
|
||||
/**
|
||||
* iio_scan_mask_set() - set particular bit in the scan mask
|
||||
* @buffer: the buffer whose scan mask we are interested in
|
||||
* @bit: the bit to be set.
|
||||
**/
|
||||
int iio_scan_mask_set(struct iio_dev *indio_dev,
|
||||
struct iio_buffer *buffer, int bit);
|
||||
|
||||
/**
|
||||
* iio_push_to_buffer() - push to a registered buffer.
|
||||
* @buffer: IIO buffer structure for device
|
||||
* @scan: Full scan.
|
||||
* @timestamp:
|
||||
*/
|
||||
int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data,
|
||||
s64 timestamp);
|
||||
|
||||
int iio_update_demux(struct iio_dev *indio_dev);
|
||||
|
||||
/**
|
||||
* iio_buffer_register() - register the buffer with IIO core
|
||||
* @indio_dev: device with the buffer to be registered
|
||||
**/
|
||||
int iio_buffer_register(struct iio_dev *indio_dev,
|
||||
const struct iio_chan_spec *channels,
|
||||
int num_channels);
|
||||
|
||||
/**
|
||||
* iio_buffer_unregister() - unregister the buffer from IIO core
|
||||
* @indio_dev: the device with the buffer to be unregistered
|
||||
**/
|
||||
void iio_buffer_unregister(struct iio_dev *indio_dev);
|
||||
|
||||
/**
|
||||
* iio_buffer_read_length() - attr func to get number of datums in the buffer
|
||||
**/
|
||||
ssize_t iio_buffer_read_length(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf);
|
||||
/**
|
||||
* iio_buffer_write_length() - attr func to set number of datums in the buffer
|
||||
**/
|
||||
ssize_t iio_buffer_write_length(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf,
|
||||
size_t len);
|
||||
/**
|
||||
* iio_buffer_store_enable() - attr to turn the buffer on
|
||||
**/
|
||||
ssize_t iio_buffer_store_enable(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf,
|
||||
size_t len);
|
||||
/**
|
||||
* iio_buffer_show_enable() - attr to see if the buffer is on
|
||||
**/
|
||||
ssize_t iio_buffer_show_enable(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf);
|
||||
#define IIO_BUFFER_LENGTH_ATTR DEVICE_ATTR(length, S_IRUGO | S_IWUSR, \
|
||||
iio_buffer_read_length, \
|
||||
iio_buffer_write_length)
|
||||
|
||||
#define IIO_BUFFER_ENABLE_ATTR DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, \
|
||||
iio_buffer_show_enable, \
|
||||
iio_buffer_store_enable)
|
||||
|
||||
int iio_sw_buffer_preenable(struct iio_dev *indio_dev);
|
||||
|
||||
#else /* CONFIG_IIO_BUFFER */
|
||||
|
||||
static inline int iio_buffer_register(struct iio_dev *indio_dev,
|
||||
struct iio_chan_spec *channels,
|
||||
int num_channels)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void iio_buffer_unregister(struct iio_dev *indio_dev)
|
||||
{};
|
||||
|
||||
#endif /* CONFIG_IIO_BUFFER */
|
||||
|
||||
#endif /* _IIO_BUFFER_GENERIC_H_ */
|
||||
96
include/linux/iio/consumer.h
Normal file
96
include/linux/iio/consumer.h
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Industrial I/O in kernel consumer interface
|
||||
*
|
||||
* Copyright (c) 2011 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
#ifndef _IIO_INKERN_CONSUMER_H_
|
||||
#define _IIO_INKERN_CONSUMER_H
|
||||
#include <linux/iio/types.h>
|
||||
|
||||
struct iio_dev;
|
||||
struct iio_chan_spec;
|
||||
|
||||
/**
|
||||
* struct iio_channel - everything needed for a consumer to use a channel
|
||||
* @indio_dev: Device on which the channel exists.
|
||||
* @channel: Full description of the channel.
|
||||
*/
|
||||
struct iio_channel {
|
||||
struct iio_dev *indio_dev;
|
||||
const struct iio_chan_spec *channel;
|
||||
};
|
||||
|
||||
/**
|
||||
* iio_channel_get() - get description of all that is needed to access channel.
|
||||
* @name: Unique name of the device as provided in the iio_map
|
||||
* with which the desired provider to consumer mapping
|
||||
* was registered.
|
||||
* @consumer_channel: Unique name to identify the channel on the consumer
|
||||
* side. This typically describes the channels use within
|
||||
* the consumer. E.g. 'battery_voltage'
|
||||
*/
|
||||
struct iio_channel *iio_st_channel_get(const char *name,
|
||||
const char *consumer_channel);
|
||||
|
||||
/**
|
||||
* iio_st_channel_release() - release channels obtained via iio_st_channel_get
|
||||
* @chan: The channel to be released.
|
||||
*/
|
||||
void iio_st_channel_release(struct iio_channel *chan);
|
||||
|
||||
/**
|
||||
* iio_st_channel_get_all() - get all channels associated with a client
|
||||
* @name: name of consumer device.
|
||||
*
|
||||
* Returns an array of iio_channel structures terminated with one with
|
||||
* null iio_dev pointer.
|
||||
* This function is used by fairly generic consumers to get all the
|
||||
* channels registered as having this consumer.
|
||||
*/
|
||||
struct iio_channel *iio_st_channel_get_all(const char *name);
|
||||
|
||||
/**
|
||||
* iio_st_channel_release_all() - reverse iio_st_get_all
|
||||
* @chan: Array of channels to be released.
|
||||
*/
|
||||
void iio_st_channel_release_all(struct iio_channel *chan);
|
||||
|
||||
/**
|
||||
* iio_st_read_channel_raw() - read from a given channel
|
||||
* @channel: The channel being queried.
|
||||
* @val: Value read back.
|
||||
*
|
||||
* Note raw reads from iio channels are in adc counts and hence
|
||||
* scale will need to be applied if standard units required.
|
||||
*/
|
||||
int iio_st_read_channel_raw(struct iio_channel *chan,
|
||||
int *val);
|
||||
|
||||
/**
|
||||
* iio_st_get_channel_type() - get the type of a channel
|
||||
* @channel: The channel being queried.
|
||||
* @type: The type of the channel.
|
||||
*
|
||||
* returns the enum iio_chan_type of the channel
|
||||
*/
|
||||
int iio_st_get_channel_type(struct iio_channel *channel,
|
||||
enum iio_chan_type *type);
|
||||
|
||||
/**
|
||||
* iio_st_read_channel_scale() - read the scale value for a channel
|
||||
* @channel: The channel being queried.
|
||||
* @val: First part of value read back.
|
||||
* @val2: Second part of value read back.
|
||||
*
|
||||
* Note returns a description of what is in val and val2, such
|
||||
* as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
|
||||
* + val2/1e6
|
||||
*/
|
||||
int iio_st_read_channel_scale(struct iio_channel *chan, int *val,
|
||||
int *val2);
|
||||
|
||||
#endif
|
||||
34
include/linux/iio/driver.h
Normal file
34
include/linux/iio/driver.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Industrial I/O in kernel access map interface.
|
||||
*
|
||||
* Copyright (c) 2011 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _IIO_INKERN_H_
|
||||
#define _IIO_INKERN_H_
|
||||
|
||||
struct iio_map;
|
||||
|
||||
/**
|
||||
* iio_map_array_register() - tell the core about inkernel consumers
|
||||
* @indio_dev: provider device
|
||||
* @map: array of mappings specifying association of channel with client
|
||||
*/
|
||||
int iio_map_array_register(struct iio_dev *indio_dev,
|
||||
struct iio_map *map);
|
||||
|
||||
/**
|
||||
* iio_map_array_unregister() - tell the core to remove consumer mappings
|
||||
* @indio_dev: provider device
|
||||
* @map: array of mappings to remove. Note these must have same memory
|
||||
* addresses as those originally added not just equal parameter
|
||||
* values.
|
||||
*/
|
||||
int iio_map_array_unregister(struct iio_dev *indio_dev,
|
||||
struct iio_map *map);
|
||||
|
||||
#endif
|
||||
105
include/linux/iio/events.h
Normal file
105
include/linux/iio/events.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/* The industrial I/O - event passing to userspace
|
||||
*
|
||||
* Copyright (c) 2008-2011 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
#ifndef _IIO_EVENTS_H_
|
||||
#define _IIO_EVENTS_H_
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/iio/types.h>
|
||||
|
||||
/**
|
||||
* struct iio_event_data - The actual event being pushed to userspace
|
||||
* @id: event identifier
|
||||
* @timestamp: best estimate of time of event occurrence (often from
|
||||
* the interrupt handler)
|
||||
*/
|
||||
struct iio_event_data {
|
||||
__u64 id;
|
||||
__s64 timestamp;
|
||||
};
|
||||
|
||||
#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
|
||||
|
||||
enum iio_event_type {
|
||||
IIO_EV_TYPE_THRESH,
|
||||
IIO_EV_TYPE_MAG,
|
||||
IIO_EV_TYPE_ROC,
|
||||
IIO_EV_TYPE_THRESH_ADAPTIVE,
|
||||
IIO_EV_TYPE_MAG_ADAPTIVE,
|
||||
};
|
||||
|
||||
enum iio_event_direction {
|
||||
IIO_EV_DIR_EITHER,
|
||||
IIO_EV_DIR_RISING,
|
||||
IIO_EV_DIR_FALLING,
|
||||
};
|
||||
|
||||
/**
|
||||
* IIO_EVENT_CODE() - create event identifier
|
||||
* @chan_type: Type of the channel. Should be one of enum iio_chan_type.
|
||||
* @diff: Whether the event is for an differential channel or not.
|
||||
* @modifier: Modifier for the channel. Should be one of enum iio_modifier.
|
||||
* @direction: Direction of the event. One of enum iio_event_direction.
|
||||
* @type: Type of the event. Should be one enum iio_event_type.
|
||||
* @chan: Channel number for non-differential channels.
|
||||
* @chan1: First channel number for differential channels.
|
||||
* @chan2: Second channel number for differential channels.
|
||||
*/
|
||||
|
||||
#define IIO_EVENT_CODE(chan_type, diff, modifier, direction, \
|
||||
type, chan, chan1, chan2) \
|
||||
(((u64)type << 56) | ((u64)diff << 55) | \
|
||||
((u64)direction << 48) | ((u64)modifier << 40) | \
|
||||
((u64)chan_type << 32) | (((u16)chan2) << 16) | ((u16)chan1) | \
|
||||
((u16)chan))
|
||||
|
||||
|
||||
#define IIO_EV_DIR_MAX 4
|
||||
#define IIO_EV_BIT(type, direction) \
|
||||
(1 << (type*IIO_EV_DIR_MAX + direction))
|
||||
|
||||
/**
|
||||
* IIO_MOD_EVENT_CODE() - create event identifier for modified channels
|
||||
* @chan_type: Type of the channel. Should be one of enum iio_chan_type.
|
||||
* @number: Channel number.
|
||||
* @modifier: Modifier for the channel. Should be one of enum iio_modifier.
|
||||
* @type: Type of the event. Should be one enum iio_event_type.
|
||||
* @direction: Direction of the event. One of enum iio_event_direction.
|
||||
*/
|
||||
|
||||
#define IIO_MOD_EVENT_CODE(chan_type, number, modifier, \
|
||||
type, direction) \
|
||||
IIO_EVENT_CODE(chan_type, 0, modifier, direction, type, number, 0, 0)
|
||||
|
||||
/**
|
||||
* IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified channels
|
||||
* @chan_type: Type of the channel. Should be one of enum iio_chan_type.
|
||||
* @number: Channel number.
|
||||
* @type: Type of the event. Should be one enum iio_event_type.
|
||||
* @direction: Direction of the event. One of enum iio_event_direction.
|
||||
*/
|
||||
|
||||
#define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \
|
||||
IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0xCF)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
|
||||
|
||||
/* Event code number extraction depends on which type of event we have.
|
||||
* Perhaps review this function in the future*/
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
|
||||
#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
|
||||
|
||||
#endif
|
||||
492
include/linux/iio/iio.h
Normal file
492
include/linux/iio/iio.h
Normal file
|
|
@ -0,0 +1,492 @@
|
|||
|
||||
/* The industrial I/O core
|
||||
*
|
||||
* Copyright (c) 2008 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
#ifndef _INDUSTRIAL_IO_H_
|
||||
#define _INDUSTRIAL_IO_H_
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/iio/types.h>
|
||||
/* IIO TODO LIST */
|
||||
/*
|
||||
* Provide means of adjusting timer accuracy.
|
||||
* Currently assumes nano seconds.
|
||||
*/
|
||||
|
||||
enum iio_chan_info_enum {
|
||||
IIO_CHAN_INFO_RAW = 0,
|
||||
IIO_CHAN_INFO_PROCESSED,
|
||||
IIO_CHAN_INFO_SCALE,
|
||||
IIO_CHAN_INFO_OFFSET,
|
||||
IIO_CHAN_INFO_CALIBSCALE,
|
||||
IIO_CHAN_INFO_CALIBBIAS,
|
||||
IIO_CHAN_INFO_PEAK,
|
||||
IIO_CHAN_INFO_PEAK_SCALE,
|
||||
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW,
|
||||
IIO_CHAN_INFO_AVERAGE_RAW,
|
||||
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY,
|
||||
IIO_CHAN_INFO_SAMP_FREQ,
|
||||
IIO_CHAN_INFO_FREQUENCY,
|
||||
IIO_CHAN_INFO_PHASE,
|
||||
IIO_CHAN_INFO_HARDWAREGAIN,
|
||||
};
|
||||
|
||||
#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
|
||||
#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
|
||||
|
||||
#define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
|
||||
#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
|
||||
#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
|
||||
#define IIO_CHAN_INFO_SCALE_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
|
||||
#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
|
||||
#define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
|
||||
#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
|
||||
#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
|
||||
#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
|
||||
#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
|
||||
#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
|
||||
#define IIO_CHAN_INFO_PEAK_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
|
||||
#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
|
||||
#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
|
||||
#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT( \
|
||||
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
|
||||
#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT( \
|
||||
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
|
||||
#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
|
||||
#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
|
||||
#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT( \
|
||||
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
|
||||
#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT( \
|
||||
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
|
||||
#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
|
||||
#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
|
||||
#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
|
||||
#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
|
||||
#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
|
||||
#define IIO_CHAN_INFO_PHASE_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
|
||||
#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
|
||||
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
|
||||
#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
|
||||
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
|
||||
|
||||
enum iio_endian {
|
||||
IIO_CPU,
|
||||
IIO_BE,
|
||||
IIO_LE,
|
||||
};
|
||||
|
||||
struct iio_chan_spec;
|
||||
struct iio_dev;
|
||||
|
||||
/**
|
||||
* struct iio_chan_spec_ext_info - Extended channel info attribute
|
||||
* @name: Info attribute name
|
||||
* @shared: Whether this attribute is shared between all channels.
|
||||
* @read: Read callback for this info attribute, may be NULL.
|
||||
* @write: Write callback for this info attribute, may be NULL.
|
||||
* @private: Data private to the driver.
|
||||
*/
|
||||
struct iio_chan_spec_ext_info {
|
||||
const char *name;
|
||||
bool shared;
|
||||
ssize_t (*read)(struct iio_dev *, uintptr_t private,
|
||||
struct iio_chan_spec const *, char *buf);
|
||||
ssize_t (*write)(struct iio_dev *, uintptr_t private,
|
||||
struct iio_chan_spec const *, const char *buf,
|
||||
size_t len);
|
||||
uintptr_t private;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iio_chan_spec - specification of a single channel
|
||||
* @type: What type of measurement is the channel making.
|
||||
* @channel: What number or name do we wish to assign the channel.
|
||||
* @channel2: If there is a second number for a differential
|
||||
* channel then this is it. If modified is set then the
|
||||
* value here specifies the modifier.
|
||||
* @address: Driver specific identifier.
|
||||
* @scan_index: Monotonic index to give ordering in scans when read
|
||||
* from a buffer.
|
||||
* @scan_type: Sign: 's' or 'u' to specify signed or unsigned
|
||||
* realbits: Number of valid bits of data
|
||||
* storage_bits: Realbits + padding
|
||||
* shift: Shift right by this before masking out
|
||||
* realbits.
|
||||
* endianness: little or big endian
|
||||
* @info_mask: What information is to be exported about this channel.
|
||||
* This includes calibbias, scale etc.
|
||||
* @event_mask: What events can this channel produce.
|
||||
* @ext_info: Array of extended info attributes for this channel.
|
||||
* The array is NULL terminated, the last element should
|
||||
* have it's name field set to NULL.
|
||||
* @extend_name: Allows labeling of channel attributes with an
|
||||
* informative name. Note this has no effect codes etc,
|
||||
* unlike modifiers.
|
||||
* @datasheet_name: A name used in in kernel mapping of channels. It should
|
||||
* correspond to the first name that the channel is referred
|
||||
* to by in the datasheet (e.g. IND), or the nearest
|
||||
* possible compound name (e.g. IND-INC).
|
||||
* @modified: Does a modifier apply to this channel. What these are
|
||||
* depends on the channel type. Modifier is set in
|
||||
* channel2. Examples are IIO_MOD_X for axial sensors about
|
||||
* the 'x' axis.
|
||||
* @indexed: Specify the channel has a numerical index. If not,
|
||||
* the value in channel will be suppressed for attribute
|
||||
* but not for event codes. Typically set it to 0 when
|
||||
* the index is false.
|
||||
* @differential: Channel is differential.
|
||||
*/
|
||||
struct iio_chan_spec {
|
||||
enum iio_chan_type type;
|
||||
int channel;
|
||||
int channel2;
|
||||
unsigned long address;
|
||||
int scan_index;
|
||||
struct {
|
||||
char sign;
|
||||
u8 realbits;
|
||||
u8 storagebits;
|
||||
u8 shift;
|
||||
enum iio_endian endianness;
|
||||
} scan_type;
|
||||
long info_mask;
|
||||
long event_mask;
|
||||
const struct iio_chan_spec_ext_info *ext_info;
|
||||
const char *extend_name;
|
||||
const char *datasheet_name;
|
||||
unsigned modified:1;
|
||||
unsigned indexed:1;
|
||||
unsigned output:1;
|
||||
unsigned differential:1;
|
||||
};
|
||||
|
||||
#define IIO_ST(si, rb, sb, sh) \
|
||||
{ .sign = si, .realbits = rb, .storagebits = sb, .shift = sh }
|
||||
|
||||
#define IIO_CHAN_SOFT_TIMESTAMP(_si) \
|
||||
{ .type = IIO_TIMESTAMP, .channel = -1, \
|
||||
.scan_index = _si, .scan_type = IIO_ST('s', 64, 64, 0) }
|
||||
|
||||
/**
|
||||
* iio_get_time_ns() - utility function to get a time stamp for events etc
|
||||
**/
|
||||
static inline s64 iio_get_time_ns(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
/*
|
||||
* calls getnstimeofday.
|
||||
* If hrtimers then up to ns accurate, if not microsecond.
|
||||
*/
|
||||
ktime_get_real_ts(&ts);
|
||||
|
||||
return timespec_to_ns(&ts);
|
||||
}
|
||||
|
||||
/* Device operating modes */
|
||||
#define INDIO_DIRECT_MODE 0x01
|
||||
#define INDIO_BUFFER_TRIGGERED 0x02
|
||||
#define INDIO_BUFFER_HARDWARE 0x08
|
||||
|
||||
#define INDIO_ALL_BUFFER_MODES \
|
||||
(INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE)
|
||||
|
||||
struct iio_trigger; /* forward declaration */
|
||||
struct iio_dev;
|
||||
|
||||
/**
|
||||
* struct iio_info - constant information about device
|
||||
* @driver_module: module structure used to ensure correct
|
||||
* ownership of chrdevs etc
|
||||
* @event_attrs: event control attributes
|
||||
* @attrs: general purpose device attributes
|
||||
* @read_raw: function to request a value from the device.
|
||||
* mask specifies which value. Note 0 means a reading of
|
||||
* the channel in question. Return value will specify the
|
||||
* type of value returned by the device. val and val2 will
|
||||
* contain the elements making up the returned value.
|
||||
* @write_raw: function to write a value to the device.
|
||||
* Parameters are the same as for read_raw.
|
||||
* @write_raw_get_fmt: callback function to query the expected
|
||||
* format/precision. If not set by the driver, write_raw
|
||||
* returns IIO_VAL_INT_PLUS_MICRO.
|
||||
* @read_event_config: find out if the event is enabled.
|
||||
* @write_event_config: set if the event is enabled.
|
||||
* @read_event_value: read a value associated with the event. Meaning
|
||||
* is event dependant. event_code specifies which event.
|
||||
* @write_event_value: write the value associated with the event.
|
||||
* Meaning is event dependent.
|
||||
* @validate_trigger: function to validate the trigger when the
|
||||
* current trigger gets changed.
|
||||
**/
|
||||
struct iio_info {
|
||||
struct module *driver_module;
|
||||
struct attribute_group *event_attrs;
|
||||
const struct attribute_group *attrs;
|
||||
|
||||
int (*read_raw)(struct iio_dev *indio_dev,
|
||||
struct iio_chan_spec const *chan,
|
||||
int *val,
|
||||
int *val2,
|
||||
long mask);
|
||||
|
||||
int (*write_raw)(struct iio_dev *indio_dev,
|
||||
struct iio_chan_spec const *chan,
|
||||
int val,
|
||||
int val2,
|
||||
long mask);
|
||||
|
||||
int (*write_raw_get_fmt)(struct iio_dev *indio_dev,
|
||||
struct iio_chan_spec const *chan,
|
||||
long mask);
|
||||
|
||||
int (*read_event_config)(struct iio_dev *indio_dev,
|
||||
u64 event_code);
|
||||
|
||||
int (*write_event_config)(struct iio_dev *indio_dev,
|
||||
u64 event_code,
|
||||
int state);
|
||||
|
||||
int (*read_event_value)(struct iio_dev *indio_dev,
|
||||
u64 event_code,
|
||||
int *val);
|
||||
int (*write_event_value)(struct iio_dev *indio_dev,
|
||||
u64 event_code,
|
||||
int val);
|
||||
int (*validate_trigger)(struct iio_dev *indio_dev,
|
||||
struct iio_trigger *trig);
|
||||
int (*update_scan_mode)(struct iio_dev *indio_dev,
|
||||
const unsigned long *scan_mask);
|
||||
int (*debugfs_reg_access)(struct iio_dev *indio_dev,
|
||||
unsigned reg, unsigned writeval,
|
||||
unsigned *readval);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iio_buffer_setup_ops - buffer setup related callbacks
|
||||
* @preenable: [DRIVER] function to run prior to marking buffer enabled
|
||||
* @postenable: [DRIVER] function to run after marking buffer enabled
|
||||
* @predisable: [DRIVER] function to run prior to marking buffer
|
||||
* disabled
|
||||
* @postdisable: [DRIVER] function to run after marking buffer disabled
|
||||
*/
|
||||
struct iio_buffer_setup_ops {
|
||||
int (*preenable)(struct iio_dev *);
|
||||
int (*postenable)(struct iio_dev *);
|
||||
int (*predisable)(struct iio_dev *);
|
||||
int (*postdisable)(struct iio_dev *);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iio_dev - industrial I/O device
|
||||
* @id: [INTERN] used to identify device internally
|
||||
* @modes: [DRIVER] operating modes supported by device
|
||||
* @currentmode: [DRIVER] current operating mode
|
||||
* @dev: [DRIVER] device structure, should be assigned a parent
|
||||
* and owner
|
||||
* @event_interface: [INTERN] event chrdevs associated with interrupt lines
|
||||
* @buffer: [DRIVER] any buffer present
|
||||
* @scan_bytes: [INTERN] num bytes captured to be fed to buffer demux
|
||||
* @mlock: [INTERN] lock used to prevent simultaneous device state
|
||||
* changes
|
||||
* @available_scan_masks: [DRIVER] optional array of allowed bitmasks
|
||||
* @masklength: [INTERN] the length of the mask established from
|
||||
* channels
|
||||
* @active_scan_mask: [INTERN] union of all scan masks requested by buffers
|
||||
* @scan_timestamp: [INTERN] set if any buffers have requested timestamp
|
||||
* @scan_index_timestamp:[INTERN] cache of the index to the timestamp
|
||||
* @trig: [INTERN] current device trigger (buffer modes)
|
||||
* @pollfunc: [DRIVER] function run on trigger being received
|
||||
* @channels: [DRIVER] channel specification structure table
|
||||
* @num_channels: [DRIVER] number of chanels specified in @channels.
|
||||
* @channel_attr_list: [INTERN] keep track of automatically created channel
|
||||
* attributes
|
||||
* @chan_attr_group: [INTERN] group for all attrs in base directory
|
||||
* @name: [DRIVER] name of the device.
|
||||
* @info: [DRIVER] callbacks and constant info from driver
|
||||
* @info_exist_lock: [INTERN] lock to prevent use during removal
|
||||
* @setup_ops: [DRIVER] callbacks to call before and after buffer
|
||||
* enable/disable
|
||||
* @chrdev: [INTERN] associated character device
|
||||
* @groups: [INTERN] attribute groups
|
||||
* @groupcounter: [INTERN] index of next attribute group
|
||||
* @flags: [INTERN] file ops related flags including busy flag.
|
||||
* @debugfs_dentry: [INTERN] device specific debugfs dentry.
|
||||
* @cached_reg_addr: [INTERN] cached register address for debugfs reads.
|
||||
*/
|
||||
struct iio_dev {
|
||||
int id;
|
||||
|
||||
int modes;
|
||||
int currentmode;
|
||||
struct device dev;
|
||||
|
||||
struct iio_event_interface *event_interface;
|
||||
|
||||
struct iio_buffer *buffer;
|
||||
int scan_bytes;
|
||||
struct mutex mlock;
|
||||
|
||||
const unsigned long *available_scan_masks;
|
||||
unsigned masklength;
|
||||
const unsigned long *active_scan_mask;
|
||||
bool scan_timestamp;
|
||||
unsigned scan_index_timestamp;
|
||||
struct iio_trigger *trig;
|
||||
struct iio_poll_func *pollfunc;
|
||||
|
||||
struct iio_chan_spec const *channels;
|
||||
int num_channels;
|
||||
|
||||
struct list_head channel_attr_list;
|
||||
struct attribute_group chan_attr_group;
|
||||
const char *name;
|
||||
const struct iio_info *info;
|
||||
struct mutex info_exist_lock;
|
||||
const struct iio_buffer_setup_ops *setup_ops;
|
||||
struct cdev chrdev;
|
||||
#define IIO_MAX_GROUPS 6
|
||||
const struct attribute_group *groups[IIO_MAX_GROUPS + 1];
|
||||
int groupcounter;
|
||||
|
||||
unsigned long flags;
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
struct dentry *debugfs_dentry;
|
||||
unsigned cached_reg_addr;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* iio_find_channel_from_si() - get channel from its scan index
|
||||
* @indio_dev: device
|
||||
* @si: scan index to match
|
||||
*/
|
||||
const struct iio_chan_spec
|
||||
*iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
|
||||
|
||||
/**
|
||||
* iio_device_register() - register a device with the IIO subsystem
|
||||
* @indio_dev: Device structure filled by the device driver
|
||||
**/
|
||||
int iio_device_register(struct iio_dev *indio_dev);
|
||||
|
||||
/**
|
||||
* iio_device_unregister() - unregister a device from the IIO subsystem
|
||||
* @indio_dev: Device structure representing the device.
|
||||
**/
|
||||
void iio_device_unregister(struct iio_dev *indio_dev);
|
||||
|
||||
/**
|
||||
* iio_push_event() - try to add event to the list for userspace reading
|
||||
* @indio_dev: IIO device structure
|
||||
* @ev_code: What event
|
||||
* @timestamp: When the event occurred
|
||||
**/
|
||||
int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
|
||||
|
||||
extern struct bus_type iio_bus_type;
|
||||
|
||||
/**
|
||||
* iio_device_put() - reference counted deallocation of struct device
|
||||
* @dev: the iio_device containing the device
|
||||
**/
|
||||
static inline void iio_device_put(struct iio_dev *indio_dev)
|
||||
{
|
||||
if (indio_dev)
|
||||
put_device(&indio_dev->dev);
|
||||
};
|
||||
|
||||
/**
|
||||
* dev_to_iio_dev() - Get IIO device struct from a device struct
|
||||
* @dev: The device embedded in the IIO device
|
||||
*
|
||||
* Note: The device must be a IIO device, otherwise the result is undefined.
|
||||
*/
|
||||
static inline struct iio_dev *dev_to_iio_dev(struct device *dev)
|
||||
{
|
||||
return container_of(dev, struct iio_dev, dev);
|
||||
}
|
||||
|
||||
/* Can we make this smaller? */
|
||||
#define IIO_ALIGN L1_CACHE_BYTES
|
||||
/**
|
||||
* iio_device_alloc() - allocate an iio_dev from a driver
|
||||
* @sizeof_priv: Space to allocate for private structure.
|
||||
**/
|
||||
struct iio_dev *iio_device_alloc(int sizeof_priv);
|
||||
|
||||
static inline void *iio_priv(const struct iio_dev *indio_dev)
|
||||
{
|
||||
return (char *)indio_dev + ALIGN(sizeof(struct iio_dev), IIO_ALIGN);
|
||||
}
|
||||
|
||||
static inline struct iio_dev *iio_priv_to_dev(void *priv)
|
||||
{
|
||||
return (struct iio_dev *)((char *)priv -
|
||||
ALIGN(sizeof(struct iio_dev), IIO_ALIGN));
|
||||
}
|
||||
|
||||
/**
|
||||
* iio_device_free() - free an iio_dev from a driver
|
||||
* @dev: the iio_dev associated with the device
|
||||
**/
|
||||
void iio_device_free(struct iio_dev *indio_dev);
|
||||
|
||||
/**
|
||||
* iio_buffer_enabled() - helper function to test if the buffer is enabled
|
||||
* @indio_dev: IIO device info structure for device
|
||||
**/
|
||||
static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
|
||||
{
|
||||
return indio_dev->currentmode
|
||||
& (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE);
|
||||
};
|
||||
|
||||
/**
|
||||
* iio_get_debugfs_dentry() - helper function to get the debugfs_dentry
|
||||
* @indio_dev: IIO device info structure for device
|
||||
**/
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
|
||||
{
|
||||
return indio_dev->debugfs_dentry;
|
||||
};
|
||||
#else
|
||||
static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
|
||||
{
|
||||
return NULL;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* _INDUSTRIAL_IO_H_ */
|
||||
8
include/linux/iio/kfifo_buf.h
Normal file
8
include/linux/iio/kfifo_buf.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
#include <linux/kfifo.h>
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/buffer.h>
|
||||
|
||||
struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
|
||||
void iio_kfifo_free(struct iio_buffer *r);
|
||||
|
||||
24
include/linux/iio/machine.h
Normal file
24
include/linux/iio/machine.h
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Industrial I/O in kernel access map definitions for board files.
|
||||
*
|
||||
* Copyright (c) 2011 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct iio_map - description of link between consumer and device channels
|
||||
* @adc_channel_label: Label used to identify the channel on the provider.
|
||||
* This is matched against the datasheet_name element
|
||||
* of struct iio_chan_spec.
|
||||
* @consumer_dev_name: Name to uniquely identify the consumer device.
|
||||
* @consumer_channel: Unique name used to idenitify the channel on the
|
||||
* consumer side.
|
||||
*/
|
||||
struct iio_map {
|
||||
const char *adc_channel_label;
|
||||
const char *consumer_dev_name;
|
||||
const char *consumer_channel;
|
||||
};
|
||||
117
include/linux/iio/sysfs.h
Normal file
117
include/linux/iio/sysfs.h
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
/* The industrial I/O core
|
||||
*
|
||||
*Copyright (c) 2008 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*
|
||||
* General attributes
|
||||
*/
|
||||
|
||||
#ifndef _INDUSTRIAL_IO_SYSFS_H_
|
||||
#define _INDUSTRIAL_IO_SYSFS_H_
|
||||
|
||||
struct iio_chan_spec;
|
||||
|
||||
/**
|
||||
* struct iio_dev_attr - iio specific device attribute
|
||||
* @dev_attr: underlying device attribute
|
||||
* @address: associated register address
|
||||
* @l: list head for maintaining list of dynamically created attrs.
|
||||
*/
|
||||
struct iio_dev_attr {
|
||||
struct device_attribute dev_attr;
|
||||
u64 address;
|
||||
struct list_head l;
|
||||
struct iio_chan_spec const *c;
|
||||
};
|
||||
|
||||
#define to_iio_dev_attr(_dev_attr) \
|
||||
container_of(_dev_attr, struct iio_dev_attr, dev_attr)
|
||||
|
||||
ssize_t iio_read_const_attr(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *len);
|
||||
|
||||
/**
|
||||
* struct iio_const_attr - constant device specific attribute
|
||||
* often used for things like available modes
|
||||
* @string: attribute string
|
||||
* @dev_attr: underlying device attribute
|
||||
*/
|
||||
struct iio_const_attr {
|
||||
const char *string;
|
||||
struct device_attribute dev_attr;
|
||||
};
|
||||
|
||||
#define to_iio_const_attr(_dev_attr) \
|
||||
container_of(_dev_attr, struct iio_const_attr, dev_attr)
|
||||
|
||||
/* Some attributes will be hard coded (device dependent) and not require an
|
||||
address, in these cases pass a negative */
|
||||
#define IIO_ATTR(_name, _mode, _show, _store, _addr) \
|
||||
{ .dev_attr = __ATTR(_name, _mode, _show, _store), \
|
||||
.address = _addr }
|
||||
|
||||
#define IIO_DEVICE_ATTR(_name, _mode, _show, _store, _addr) \
|
||||
struct iio_dev_attr iio_dev_attr_##_name \
|
||||
= IIO_ATTR(_name, _mode, _show, _store, _addr)
|
||||
|
||||
#define IIO_DEVICE_ATTR_NAMED(_vname, _name, _mode, _show, _store, _addr) \
|
||||
struct iio_dev_attr iio_dev_attr_##_vname \
|
||||
= IIO_ATTR(_name, _mode, _show, _store, _addr)
|
||||
|
||||
#define IIO_CONST_ATTR(_name, _string) \
|
||||
struct iio_const_attr iio_const_attr_##_name \
|
||||
= { .string = _string, \
|
||||
.dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)}
|
||||
|
||||
#define IIO_CONST_ATTR_NAMED(_vname, _name, _string) \
|
||||
struct iio_const_attr iio_const_attr_##_vname \
|
||||
= { .string = _string, \
|
||||
.dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)}
|
||||
|
||||
/* Generic attributes of onetype or another */
|
||||
/**
|
||||
* IIO_DEV_ATTR_RESET: resets the device
|
||||
**/
|
||||
#define IIO_DEV_ATTR_RESET(_store) \
|
||||
IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, _store, 0)
|
||||
|
||||
/**
|
||||
* IIO_DEV_ATTR_SAMP_FREQ - sets any internal clock frequency
|
||||
* @_mode: sysfs file mode/permissions
|
||||
* @_show: output method for the attribute
|
||||
* @_store: input method for the attribute
|
||||
**/
|
||||
#define IIO_DEV_ATTR_SAMP_FREQ(_mode, _show, _store) \
|
||||
IIO_DEVICE_ATTR(sampling_frequency, _mode, _show, _store, 0)
|
||||
|
||||
/**
|
||||
* IIO_DEV_ATTR_SAMP_FREQ_AVAIL - list available sampling frequencies
|
||||
* @_show: output method for the attribute
|
||||
*
|
||||
* May be mode dependent on some devices
|
||||
**/
|
||||
#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show) \
|
||||
IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0)
|
||||
/**
|
||||
* IIO_CONST_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies
|
||||
* @_string: frequency string for the attribute
|
||||
*
|
||||
* Constant version
|
||||
**/
|
||||
#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \
|
||||
IIO_CONST_ATTR(sampling_frequency_available, _string)
|
||||
|
||||
#define IIO_DEV_ATTR_TEMP_RAW(_show) \
|
||||
IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0)
|
||||
|
||||
#define IIO_CONST_ATTR_TEMP_OFFSET(_string) \
|
||||
IIO_CONST_ATTR(in_temp_offset, _string)
|
||||
|
||||
#define IIO_CONST_ATTR_TEMP_SCALE(_string) \
|
||||
IIO_CONST_ATTR(in_temp_scale, _string)
|
||||
|
||||
#endif /* _INDUSTRIAL_IO_SYSFS_H_ */
|
||||
119
include/linux/iio/trigger.h
Normal file
119
include/linux/iio/trigger.h
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
/* The industrial I/O core, trigger handling functions
|
||||
*
|
||||
* Copyright (c) 2008 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/irq.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#ifndef _IIO_TRIGGER_H_
|
||||
#define _IIO_TRIGGER_H_
|
||||
|
||||
struct iio_subirq {
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iio_trigger_ops - operations structure for an iio_trigger.
|
||||
* @owner: used to monitor usage count of the trigger.
|
||||
* @set_trigger_state: switch on/off the trigger on demand
|
||||
* @try_reenable: function to reenable the trigger when the
|
||||
* use count is zero (may be NULL)
|
||||
* @validate_device: function to validate the device when the
|
||||
* current trigger gets changed.
|
||||
*
|
||||
* This is typically static const within a driver and shared by
|
||||
* instances of a given device.
|
||||
**/
|
||||
struct iio_trigger_ops {
|
||||
struct module *owner;
|
||||
int (*set_trigger_state)(struct iio_trigger *trig, bool state);
|
||||
int (*try_reenable)(struct iio_trigger *trig);
|
||||
int (*validate_device)(struct iio_trigger *trig,
|
||||
struct iio_dev *indio_dev);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* struct iio_trigger - industrial I/O trigger device
|
||||
*
|
||||
* @id: [INTERN] unique id number
|
||||
* @name: [DRIVER] unique name
|
||||
* @dev: [DRIVER] associated device (if relevant)
|
||||
* @private_data: [DRIVER] device specific data
|
||||
* @list: [INTERN] used in maintenance of global trigger list
|
||||
* @alloc_list: [DRIVER] used for driver specific trigger list
|
||||
* @use_count: use count for the trigger
|
||||
* @subirq_chip: [INTERN] associate 'virtual' irq chip.
|
||||
* @subirq_base: [INTERN] base number for irqs provided by trigger.
|
||||
* @subirqs: [INTERN] information about the 'child' irqs.
|
||||
* @pool: [INTERN] bitmap of irqs currently in use.
|
||||
* @pool_lock: [INTERN] protection of the irq pool.
|
||||
**/
|
||||
struct iio_trigger {
|
||||
const struct iio_trigger_ops *ops;
|
||||
int id;
|
||||
const char *name;
|
||||
struct device dev;
|
||||
|
||||
void *private_data;
|
||||
struct list_head list;
|
||||
struct list_head alloc_list;
|
||||
int use_count;
|
||||
|
||||
struct irq_chip subirq_chip;
|
||||
int subirq_base;
|
||||
|
||||
struct iio_subirq subirqs[CONFIG_IIO_CONSUMERS_PER_TRIGGER];
|
||||
unsigned long pool[BITS_TO_LONGS(CONFIG_IIO_CONSUMERS_PER_TRIGGER)];
|
||||
struct mutex pool_lock;
|
||||
};
|
||||
|
||||
|
||||
static inline struct iio_trigger *to_iio_trigger(struct device *d)
|
||||
{
|
||||
return container_of(d, struct iio_trigger, dev);
|
||||
};
|
||||
|
||||
static inline void iio_trigger_put(struct iio_trigger *trig)
|
||||
{
|
||||
module_put(trig->ops->owner);
|
||||
put_device(&trig->dev);
|
||||
};
|
||||
|
||||
static inline void iio_trigger_get(struct iio_trigger *trig)
|
||||
{
|
||||
get_device(&trig->dev);
|
||||
__module_get(trig->ops->owner);
|
||||
};
|
||||
|
||||
/**
|
||||
* iio_trigger_register() - register a trigger with the IIO core
|
||||
* @trig_info: trigger to be registered
|
||||
**/
|
||||
int iio_trigger_register(struct iio_trigger *trig_info);
|
||||
|
||||
/**
|
||||
* iio_trigger_unregister() - unregister a trigger from the core
|
||||
* @trig_info: trigger to be unregistered
|
||||
**/
|
||||
void iio_trigger_unregister(struct iio_trigger *trig_info);
|
||||
|
||||
/**
|
||||
* iio_trigger_poll() - called on a trigger occurring
|
||||
* @trig: trigger which occurred
|
||||
*
|
||||
* Typically called in relevant hardware interrupt handler.
|
||||
**/
|
||||
void iio_trigger_poll(struct iio_trigger *trig, s64 time);
|
||||
void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time);
|
||||
|
||||
irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
|
||||
|
||||
__printf(1, 2) struct iio_trigger *iio_trigger_alloc(const char *fmt, ...);
|
||||
void iio_trigger_free(struct iio_trigger *trig);
|
||||
|
||||
#endif /* _IIO_TRIGGER_H_ */
|
||||
52
include/linux/iio/trigger_consumer.h
Normal file
52
include/linux/iio/trigger_consumer.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/* The industrial I/O core, trigger consumer functions
|
||||
*
|
||||
* Copyright (c) 2008-2011 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct iio_poll_func - poll function pair
|
||||
*
|
||||
* @indio_dev: data specific to device (passed into poll func)
|
||||
* @h: the function that is actually run on trigger
|
||||
* @thread: threaded interrupt part
|
||||
* @type: the type of interrupt (basically if oneshot)
|
||||
* @name: name used to identify the trigger consumer.
|
||||
* @irq: the corresponding irq as allocated from the
|
||||
* trigger pool
|
||||
* @timestamp: some devices need a timestamp grabbed as soon
|
||||
* as possible after the trigger - hence handler
|
||||
* passes it via here.
|
||||
**/
|
||||
struct iio_poll_func {
|
||||
struct iio_dev *indio_dev;
|
||||
irqreturn_t (*h)(int irq, void *p);
|
||||
irqreturn_t (*thread)(int irq, void *p);
|
||||
int type;
|
||||
char *name;
|
||||
int irq;
|
||||
s64 timestamp;
|
||||
};
|
||||
|
||||
|
||||
struct iio_poll_func
|
||||
*iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
|
||||
irqreturn_t (*thread)(int irq, void *p),
|
||||
int type,
|
||||
struct iio_dev *indio_dev,
|
||||
const char *fmt,
|
||||
...);
|
||||
void iio_dealloc_pollfunc(struct iio_poll_func *pf);
|
||||
irqreturn_t iio_pollfunc_store_time(int irq, void *p);
|
||||
|
||||
void iio_trigger_notify_done(struct iio_trigger *trig);
|
||||
|
||||
/*
|
||||
* Two functions for common case where all that happens is a pollfunc
|
||||
* is attached and detached from a trigger
|
||||
*/
|
||||
int iio_triggered_buffer_postenable(struct iio_dev *indio_dev);
|
||||
int iio_triggered_buffer_predisable(struct iio_dev *indio_dev);
|
||||
55
include/linux/iio/types.h
Normal file
55
include/linux/iio/types.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/* industrial I/O data types needed both in and out of kernel
|
||||
*
|
||||
* Copyright (c) 2008 Jonathan Cameron
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _IIO_TYPES_H_
|
||||
#define _IIO_TYPES_H_
|
||||
|
||||
enum iio_chan_type {
|
||||
/* real channel types */
|
||||
IIO_VOLTAGE,
|
||||
IIO_CURRENT,
|
||||
IIO_POWER,
|
||||
IIO_ACCEL,
|
||||
IIO_ANGL_VEL,
|
||||
IIO_MAGN,
|
||||
IIO_LIGHT,
|
||||
IIO_INTENSITY,
|
||||
IIO_PROXIMITY,
|
||||
IIO_TEMP,
|
||||
IIO_INCLI,
|
||||
IIO_ROT,
|
||||
IIO_ANGL,
|
||||
IIO_TIMESTAMP,
|
||||
IIO_CAPACITANCE,
|
||||
IIO_ALTVOLTAGE,
|
||||
};
|
||||
|
||||
enum iio_modifier {
|
||||
IIO_NO_MOD,
|
||||
IIO_MOD_X,
|
||||
IIO_MOD_Y,
|
||||
IIO_MOD_Z,
|
||||
IIO_MOD_X_AND_Y,
|
||||
IIO_MOD_X_AND_Z,
|
||||
IIO_MOD_Y_AND_Z,
|
||||
IIO_MOD_X_AND_Y_AND_Z,
|
||||
IIO_MOD_X_OR_Y,
|
||||
IIO_MOD_X_OR_Z,
|
||||
IIO_MOD_Y_OR_Z,
|
||||
IIO_MOD_X_OR_Y_OR_Z,
|
||||
IIO_MOD_LIGHT_BOTH,
|
||||
IIO_MOD_LIGHT_IR,
|
||||
};
|
||||
|
||||
#define IIO_VAL_INT 1
|
||||
#define IIO_VAL_INT_PLUS_MICRO 2
|
||||
#define IIO_VAL_INT_PLUS_NANO 3
|
||||
#define IIO_VAL_INT_PLUS_MICRO_DB 4
|
||||
|
||||
#endif /* _IIO_TYPES_H_ */
|
||||
110
include/linux/mei.h
Normal file
110
include/linux/mei.h
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/******************************************************************************
|
||||
* Intel Management Engine Interface (Intel MEI) Linux driver
|
||||
* Intel MEI Interface Header
|
||||
*
|
||||
* This file is provided under a dual BSD/GPLv2 license. When using or
|
||||
* redistributing this file, you may do so under either license.
|
||||
*
|
||||
* GPL LICENSE SUMMARY
|
||||
*
|
||||
* Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
|
||||
* USA
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution
|
||||
* in the file called LICENSE.GPL.
|
||||
*
|
||||
* Contact Information:
|
||||
* Intel Corporation.
|
||||
* linux-mei@linux.intel.com
|
||||
* http://www.intel.com
|
||||
*
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef _LINUX_MEI_H
|
||||
#define _LINUX_MEI_H
|
||||
|
||||
#include <linux/uuid.h>
|
||||
|
||||
/*
|
||||
* This IOCTL is used to associate the current file descriptor with a
|
||||
* FW Client (given by UUID). This opens a communication channel
|
||||
* between a host client and a FW client. From this point every read and write
|
||||
* will communicate with the associated FW client.
|
||||
* Only in close() (file_operation release()) the communication between
|
||||
* the clients is disconnected
|
||||
*
|
||||
* The IOCTL argument is a struct with a union that contains
|
||||
* the input parameter and the output parameter for this IOCTL.
|
||||
*
|
||||
* The input parameter is UUID of the FW Client.
|
||||
* The output parameter is the properties of the FW client
|
||||
* (FW protocol version and max message size).
|
||||
*
|
||||
*/
|
||||
#define IOCTL_MEI_CONNECT_CLIENT \
|
||||
_IOWR('H' , 0x01, struct mei_connect_client_data)
|
||||
|
||||
/*
|
||||
* Intel MEI client information struct
|
||||
*/
|
||||
struct mei_client {
|
||||
__u32 max_msg_length;
|
||||
__u8 protocol_version;
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
/*
|
||||
* IOCTL Connect Client Data structure
|
||||
*/
|
||||
struct mei_connect_client_data {
|
||||
union {
|
||||
uuid_le in_client_uuid;
|
||||
struct mei_client out_client_properties;
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* _LINUX_MEI_H */
|
||||
61
include/linux/platform_data/at91_adc.h
Normal file
61
include/linux/platform_data/at91_adc.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright (C) 2011 Free Electrons
|
||||
*
|
||||
* Licensed under the GPLv2 or later.
|
||||
*/
|
||||
|
||||
#ifndef _AT91_ADC_H_
|
||||
#define _AT91_ADC_H_
|
||||
|
||||
/**
|
||||
* struct at91_adc_reg_desc - Various informations relative to registers
|
||||
* @channel_base: Base offset for the channel data registers
|
||||
* @drdy_mask: Mask of the DRDY field in the relevant registers
|
||||
(Interruptions registers mostly)
|
||||
* @status_register: Offset of the Interrupt Status Register
|
||||
* @trigger_register: Offset of the Trigger setup register
|
||||
*/
|
||||
struct at91_adc_reg_desc {
|
||||
u8 channel_base;
|
||||
u32 drdy_mask;
|
||||
u8 status_register;
|
||||
u8 trigger_register;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct at91_adc_trigger - description of triggers
|
||||
* @name: name of the trigger advertised to the user
|
||||
* @value: value to set in the ADC's trigger setup register
|
||||
to enable the trigger
|
||||
* @is_external: Does the trigger rely on an external pin?
|
||||
*/
|
||||
struct at91_adc_trigger {
|
||||
const char *name;
|
||||
u8 value;
|
||||
bool is_external;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct at91_adc_data - platform data for ADC driver
|
||||
* @channels_used: channels in use on the board as a bitmask
|
||||
* @num_channels: global number of channels available on the board
|
||||
* @registers: Registers definition on the board
|
||||
* @startup_time: startup time of the ADC in microseconds
|
||||
* @trigger_list: Triggers available in the ADC
|
||||
* @trigger_number: Number of triggers available in the ADC
|
||||
* @use_external_triggers: does the board has external triggers availables
|
||||
* @vref: Reference voltage for the ADC in millivolts
|
||||
*/
|
||||
struct at91_adc_data {
|
||||
unsigned long channels_used;
|
||||
u8 num_channels;
|
||||
struct at91_adc_reg_desc *registers;
|
||||
u8 startup_time;
|
||||
struct at91_adc_trigger *trigger_list;
|
||||
u8 trigger_number;
|
||||
bool use_external_triggers;
|
||||
u16 vref;
|
||||
};
|
||||
|
||||
extern void __init at91_add_device_adc(struct at91_adc_data *data);
|
||||
#endif
|
||||
98
include/linux/pstore_ram.h
Normal file
98
include/linux/pstore_ram.h
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright (C) 2010 Marco Stornelli <marco.stornelli@gmail.com>
|
||||
* Copyright (C) 2011 Kees Cook <keescook@chromium.org>
|
||||
* Copyright (C) 2011 Google, Inc.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_PSTORE_RAM_H__
|
||||
#define __LINUX_PSTORE_RAM_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
struct persistent_ram_buffer;
|
||||
|
||||
struct persistent_ram_descriptor {
|
||||
const char *name;
|
||||
phys_addr_t size;
|
||||
};
|
||||
|
||||
struct persistent_ram {
|
||||
phys_addr_t start;
|
||||
phys_addr_t size;
|
||||
|
||||
int num_descs;
|
||||
struct persistent_ram_descriptor *descs;
|
||||
|
||||
struct list_head node;
|
||||
};
|
||||
|
||||
struct persistent_ram_zone {
|
||||
phys_addr_t paddr;
|
||||
size_t size;
|
||||
void *vaddr;
|
||||
struct persistent_ram_buffer *buffer;
|
||||
size_t buffer_size;
|
||||
|
||||
/* ECC correction */
|
||||
bool ecc;
|
||||
char *par_buffer;
|
||||
char *par_header;
|
||||
struct rs_control *rs_decoder;
|
||||
int corrected_bytes;
|
||||
int bad_blocks;
|
||||
int ecc_block_size;
|
||||
int ecc_size;
|
||||
int ecc_symsize;
|
||||
int ecc_poly;
|
||||
|
||||
char *old_log;
|
||||
size_t old_log_size;
|
||||
};
|
||||
|
||||
int persistent_ram_early_init(struct persistent_ram *ram);
|
||||
|
||||
struct persistent_ram_zone * __init persistent_ram_new(phys_addr_t start,
|
||||
size_t size,
|
||||
bool ecc);
|
||||
void persistent_ram_free(struct persistent_ram_zone *prz);
|
||||
struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev,
|
||||
bool ecc);
|
||||
|
||||
int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
|
||||
unsigned int count);
|
||||
|
||||
size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
|
||||
void *persistent_ram_old(struct persistent_ram_zone *prz);
|
||||
void persistent_ram_free_old(struct persistent_ram_zone *prz);
|
||||
ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
|
||||
char *str, size_t len);
|
||||
|
||||
/*
|
||||
* Ramoops platform data
|
||||
* @mem_size memory size for ramoops
|
||||
* @mem_address physical memory address to contain ramoops
|
||||
*/
|
||||
|
||||
struct ramoops_platform_data {
|
||||
unsigned long mem_size;
|
||||
unsigned long mem_address;
|
||||
unsigned long record_size;
|
||||
int dump_oops;
|
||||
bool ecc;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
#ifndef __RAMOOPS_H
|
||||
#define __RAMOOPS_H
|
||||
|
||||
/*
|
||||
* Ramoops platform data
|
||||
* @mem_size memory size for ramoops
|
||||
* @mem_address physical memory address to contain ramoops
|
||||
*/
|
||||
|
||||
struct ramoops_platform_data {
|
||||
unsigned long mem_size;
|
||||
unsigned long mem_address;
|
||||
unsigned long record_size;
|
||||
int dump_oops;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -54,6 +54,8 @@ typedef struct {
|
|||
UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
static inline int uuid_le_cmp(const uuid_le u1, const uuid_le u2)
|
||||
{
|
||||
return memcmp(&u1, &u2, sizeof(uuid_le));
|
||||
|
|
@ -67,4 +69,6 @@ static inline int uuid_be_cmp(const uuid_be u1, const uuid_be u2)
|
|||
extern void uuid_le_gen(uuid_le *u);
|
||||
extern void uuid_be_gen(uuid_be *u);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif
|
||||
|
|
|
|||
174
include/linux/vme.h
Normal file
174
include/linux/vme.h
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
#ifndef _VME_H_
|
||||
#define _VME_H_
|
||||
|
||||
/* Resource Type */
|
||||
enum vme_resource_type {
|
||||
VME_MASTER,
|
||||
VME_SLAVE,
|
||||
VME_DMA,
|
||||
VME_LM
|
||||
};
|
||||
|
||||
/* VME Address Spaces */
|
||||
#define VME_A16 0x1
|
||||
#define VME_A24 0x2
|
||||
#define VME_A32 0x4
|
||||
#define VME_A64 0x8
|
||||
#define VME_CRCSR 0x10
|
||||
#define VME_USER1 0x20
|
||||
#define VME_USER2 0x40
|
||||
#define VME_USER3 0x80
|
||||
#define VME_USER4 0x100
|
||||
|
||||
#define VME_A16_MAX 0x10000ULL
|
||||
#define VME_A24_MAX 0x1000000ULL
|
||||
#define VME_A32_MAX 0x100000000ULL
|
||||
#define VME_A64_MAX 0x10000000000000000ULL
|
||||
#define VME_CRCSR_MAX 0x1000000ULL
|
||||
|
||||
|
||||
/* VME Cycle Types */
|
||||
#define VME_SCT 0x1
|
||||
#define VME_BLT 0x2
|
||||
#define VME_MBLT 0x4
|
||||
#define VME_2eVME 0x8
|
||||
#define VME_2eSST 0x10
|
||||
#define VME_2eSSTB 0x20
|
||||
|
||||
#define VME_2eSST160 0x100
|
||||
#define VME_2eSST267 0x200
|
||||
#define VME_2eSST320 0x400
|
||||
|
||||
#define VME_SUPER 0x1000
|
||||
#define VME_USER 0x2000
|
||||
#define VME_PROG 0x4000
|
||||
#define VME_DATA 0x8000
|
||||
|
||||
/* VME Data Widths */
|
||||
#define VME_D8 0x1
|
||||
#define VME_D16 0x2
|
||||
#define VME_D32 0x4
|
||||
#define VME_D64 0x8
|
||||
|
||||
/* Arbitration Scheduling Modes */
|
||||
#define VME_R_ROBIN_MODE 0x1
|
||||
#define VME_PRIORITY_MODE 0x2
|
||||
|
||||
#define VME_DMA_PATTERN (1<<0)
|
||||
#define VME_DMA_PCI (1<<1)
|
||||
#define VME_DMA_VME (1<<2)
|
||||
|
||||
#define VME_DMA_PATTERN_BYTE (1<<0)
|
||||
#define VME_DMA_PATTERN_WORD (1<<1)
|
||||
#define VME_DMA_PATTERN_INCREMENT (1<<2)
|
||||
|
||||
#define VME_DMA_VME_TO_MEM (1<<0)
|
||||
#define VME_DMA_MEM_TO_VME (1<<1)
|
||||
#define VME_DMA_VME_TO_VME (1<<2)
|
||||
#define VME_DMA_MEM_TO_MEM (1<<3)
|
||||
#define VME_DMA_PATTERN_TO_VME (1<<4)
|
||||
#define VME_DMA_PATTERN_TO_MEM (1<<5)
|
||||
|
||||
struct vme_dma_attr {
|
||||
u32 type;
|
||||
void *private;
|
||||
};
|
||||
|
||||
struct vme_resource {
|
||||
enum vme_resource_type type;
|
||||
struct list_head *entry;
|
||||
};
|
||||
|
||||
extern struct bus_type vme_bus_type;
|
||||
|
||||
/* VME_MAX_BRIDGES comes from the type of vme_bus_numbers */
|
||||
#define VME_MAX_BRIDGES (sizeof(unsigned int)*8)
|
||||
#define VME_MAX_SLOTS 32
|
||||
|
||||
#define VME_SLOT_CURRENT -1
|
||||
#define VME_SLOT_ALL -2
|
||||
|
||||
/**
|
||||
* Structure representing a VME device
|
||||
* @num: The device number
|
||||
* @bridge: Pointer to the bridge device this device is on
|
||||
* @dev: Internal device structure
|
||||
* @drv_list: List of devices (per driver)
|
||||
* @bridge_list: List of devices (per bridge)
|
||||
*/
|
||||
struct vme_dev {
|
||||
int num;
|
||||
struct vme_bridge *bridge;
|
||||
struct device dev;
|
||||
struct list_head drv_list;
|
||||
struct list_head bridge_list;
|
||||
};
|
||||
|
||||
struct vme_driver {
|
||||
struct list_head node;
|
||||
const char *name;
|
||||
int (*match)(struct vme_dev *);
|
||||
int (*probe)(struct vme_dev *);
|
||||
int (*remove)(struct vme_dev *);
|
||||
void (*shutdown)(void);
|
||||
struct device_driver driver;
|
||||
struct list_head devices;
|
||||
};
|
||||
|
||||
void *vme_alloc_consistent(struct vme_resource *, size_t, dma_addr_t *);
|
||||
void vme_free_consistent(struct vme_resource *, size_t, void *,
|
||||
dma_addr_t);
|
||||
|
||||
size_t vme_get_size(struct vme_resource *);
|
||||
|
||||
struct vme_resource *vme_slave_request(struct vme_dev *, u32, u32);
|
||||
int vme_slave_set(struct vme_resource *, int, unsigned long long,
|
||||
unsigned long long, dma_addr_t, u32, u32);
|
||||
int vme_slave_get(struct vme_resource *, int *, unsigned long long *,
|
||||
unsigned long long *, dma_addr_t *, u32 *, u32 *);
|
||||
void vme_slave_free(struct vme_resource *);
|
||||
|
||||
struct vme_resource *vme_master_request(struct vme_dev *, u32, u32, u32);
|
||||
int vme_master_set(struct vme_resource *, int, unsigned long long,
|
||||
unsigned long long, u32, u32, u32);
|
||||
int vme_master_get(struct vme_resource *, int *, unsigned long long *,
|
||||
unsigned long long *, u32 *, u32 *, u32 *);
|
||||
ssize_t vme_master_read(struct vme_resource *, void *, size_t, loff_t);
|
||||
ssize_t vme_master_write(struct vme_resource *, void *, size_t, loff_t);
|
||||
unsigned int vme_master_rmw(struct vme_resource *, unsigned int, unsigned int,
|
||||
unsigned int, loff_t);
|
||||
void vme_master_free(struct vme_resource *);
|
||||
|
||||
struct vme_resource *vme_dma_request(struct vme_dev *, u32);
|
||||
struct vme_dma_list *vme_new_dma_list(struct vme_resource *);
|
||||
struct vme_dma_attr *vme_dma_pattern_attribute(u32, u32);
|
||||
struct vme_dma_attr *vme_dma_pci_attribute(dma_addr_t);
|
||||
struct vme_dma_attr *vme_dma_vme_attribute(unsigned long long, u32, u32, u32);
|
||||
void vme_dma_free_attribute(struct vme_dma_attr *);
|
||||
int vme_dma_list_add(struct vme_dma_list *, struct vme_dma_attr *,
|
||||
struct vme_dma_attr *, size_t);
|
||||
int vme_dma_list_exec(struct vme_dma_list *);
|
||||
int vme_dma_list_free(struct vme_dma_list *);
|
||||
int vme_dma_free(struct vme_resource *);
|
||||
|
||||
int vme_irq_request(struct vme_dev *, int, int,
|
||||
void (*callback)(int, int, void *), void *);
|
||||
void vme_irq_free(struct vme_dev *, int, int);
|
||||
int vme_irq_generate(struct vme_dev *, int, int);
|
||||
|
||||
struct vme_resource *vme_lm_request(struct vme_dev *);
|
||||
int vme_lm_count(struct vme_resource *);
|
||||
int vme_lm_set(struct vme_resource *, unsigned long long, u32, u32);
|
||||
int vme_lm_get(struct vme_resource *, unsigned long long *, u32 *, u32 *);
|
||||
int vme_lm_attach(struct vme_resource *, int, void (*callback)(int));
|
||||
int vme_lm_detach(struct vme_resource *, int);
|
||||
void vme_lm_free(struct vme_resource *);
|
||||
|
||||
int vme_slot_get(struct vme_dev *);
|
||||
|
||||
int vme_register_driver(struct vme_driver *, unsigned int);
|
||||
void vme_unregister_driver(struct vme_driver *);
|
||||
|
||||
|
||||
#endif /* _VME_H_ */
|
||||
|
||||
Loading…
Reference in a new issue