Merge branch 'master' into for-linus
This commit is contained in:
@@ -148,13 +148,17 @@ static inline void *acpi_os_acquire_object(acpi_cache_t * cache)
|
||||
#define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a)
|
||||
#define ACPI_FREE(a) kfree(a)
|
||||
|
||||
/* Used within ACPICA to show where it is safe to preempt execution */
|
||||
#include <linux/hardirq.h>
|
||||
#ifndef CONFIG_PREEMPT
|
||||
/*
|
||||
* Used within ACPICA to show where it is safe to preempt execution
|
||||
* when CONFIG_PREEMPT=n
|
||||
*/
|
||||
#define ACPI_PREEMPTION_POINT() \
|
||||
do { \
|
||||
if (!in_atomic_preempt_off() && !irqs_disabled()) \
|
||||
if (!irqs_disabled()) \
|
||||
cond_resched(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
||||
@@ -72,9 +72,6 @@ dma_set_mask(struct device *dev, u64 mask);
|
||||
extern int
|
||||
dma_get_cache_alignment(void);
|
||||
|
||||
extern int
|
||||
dma_is_consistent(struct device *dev, dma_addr_t dma_handle);
|
||||
|
||||
extern void
|
||||
dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
||||
enum dma_data_direction direction);
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
* -Eric Paris
|
||||
*/
|
||||
|
||||
/*
|
||||
* When introducing new O_* bits, please check its uniqueness in fcntl_init().
|
||||
*/
|
||||
|
||||
#define O_ACCMODE 00000003
|
||||
#define O_RDONLY 00000000
|
||||
#define O_WRONLY 00000001
|
||||
|
||||
+16
-6
@@ -1075,7 +1075,6 @@ static __inline__ int drm_core_check_feature(struct drm_device *dev,
|
||||
return ((dev->driver->driver_features & feature) ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
static inline int drm_dev_to_irq(struct drm_device *dev)
|
||||
{
|
||||
if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE))
|
||||
@@ -1084,11 +1083,22 @@ static inline int drm_dev_to_irq(struct drm_device *dev)
|
||||
return dev->pdev->irq;
|
||||
}
|
||||
|
||||
#ifdef __alpha__
|
||||
#define drm_get_pci_domain(dev) dev->hose->index
|
||||
#else
|
||||
#define drm_get_pci_domain(dev) 0
|
||||
#endif
|
||||
static inline int drm_get_pci_domain(struct drm_device *dev)
|
||||
{
|
||||
if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE))
|
||||
return 0;
|
||||
|
||||
#ifndef __alpha__
|
||||
/* For historical reasons, drm_get_pci_domain() is busticated
|
||||
* on most archs and has to remain so for userspace interface
|
||||
* < 1.4, except on alpha which was right from the beginning
|
||||
*/
|
||||
if (dev->if_version < 0x10004)
|
||||
return 0;
|
||||
#endif /* __alpha__ */
|
||||
|
||||
return pci_domain_nr(dev->pdev->bus);
|
||||
}
|
||||
|
||||
#if __OS_HAS_AGP
|
||||
static inline int drm_core_has_AGP(struct drm_device *dev)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#define CORE_DATE "20060810"
|
||||
|
||||
#define DRM_IF_MAJOR 1
|
||||
#define DRM_IF_MINOR 3
|
||||
#define DRM_IF_MINOR 4
|
||||
|
||||
#define CORE_MAJOR 1
|
||||
#define CORE_MINOR 1
|
||||
|
||||
+2
-35
@@ -189,49 +189,16 @@ enum subpixel_order {
|
||||
*/
|
||||
struct drm_display_info {
|
||||
char name[DRM_DISPLAY_INFO_LEN];
|
||||
/* Input info */
|
||||
bool serration_vsync;
|
||||
bool sync_on_green;
|
||||
bool composite_sync;
|
||||
bool separate_syncs;
|
||||
bool blank_to_black;
|
||||
unsigned char video_level;
|
||||
bool digital;
|
||||
|
||||
/* Physical size */
|
||||
unsigned int width_mm;
|
||||
unsigned int height_mm;
|
||||
|
||||
/* Display parameters */
|
||||
unsigned char gamma; /* FIXME: storage format */
|
||||
bool gtf_supported;
|
||||
bool standard_color;
|
||||
enum {
|
||||
monochrome = 0,
|
||||
rgb,
|
||||
other,
|
||||
unknown,
|
||||
} display_type;
|
||||
bool active_off_supported;
|
||||
bool suspend_supported;
|
||||
bool standby_supported;
|
||||
|
||||
/* Color info FIXME: storage format */
|
||||
unsigned short redx, redy;
|
||||
unsigned short greenx, greeny;
|
||||
unsigned short bluex, bluey;
|
||||
unsigned short whitex, whitey;
|
||||
|
||||
/* Clock limits FIXME: storage format */
|
||||
unsigned int min_vfreq, max_vfreq;
|
||||
unsigned int min_hfreq, max_hfreq;
|
||||
unsigned int pixel_clock;
|
||||
|
||||
/* White point indices FIXME: storage format */
|
||||
unsigned int wpx1, wpy1;
|
||||
unsigned int wpgamma1;
|
||||
unsigned int wpx2, wpy2;
|
||||
unsigned int wpgamma2;
|
||||
|
||||
enum subpixel_order subpixel_order;
|
||||
|
||||
char *raw_edid; /* if any */
|
||||
@@ -342,7 +309,7 @@ struct drm_crtc_funcs {
|
||||
|
||||
/* Set gamma on the CRTC */
|
||||
void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
|
||||
uint32_t size);
|
||||
uint32_t start, uint32_t size);
|
||||
/* Object destroy routine */
|
||||
void (*destroy)(struct drm_crtc *crtc);
|
||||
|
||||
|
||||
@@ -28,6 +28,12 @@
|
||||
#define EDID_LENGTH 128
|
||||
#define DDC_ADDR 0x50
|
||||
|
||||
#define CEA_EXT 0x02
|
||||
#define VTB_EXT 0x10
|
||||
#define DI_EXT 0x40
|
||||
#define LS_EXT 0x50
|
||||
#define MI_EXT 0x60
|
||||
|
||||
struct est_timings {
|
||||
u8 t1;
|
||||
u8 t2;
|
||||
|
||||
@@ -31,6 +31,7 @@ enum bdi_state {
|
||||
BDI_async_congested, /* The async (write) queue is getting full */
|
||||
BDI_sync_congested, /* The sync queue is getting full */
|
||||
BDI_registered, /* bdi_register() was done */
|
||||
BDI_writeback_running, /* Writeback is in progress */
|
||||
BDI_unused, /* Available bits start here */
|
||||
};
|
||||
|
||||
|
||||
@@ -150,6 +150,7 @@ enum rq_flag_bits {
|
||||
__REQ_FLUSH, /* request for cache flush */
|
||||
__REQ_IO_STAT, /* account I/O stat */
|
||||
__REQ_MIXED_MERGE, /* merge of different types, fail separately */
|
||||
__REQ_SECURE, /* secure discard (used with __REQ_DISCARD) */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
@@ -190,5 +191,6 @@ enum rq_flag_bits {
|
||||
#define REQ_FLUSH (1 << __REQ_FLUSH)
|
||||
#define REQ_IO_STAT (1 << __REQ_IO_STAT)
|
||||
#define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE)
|
||||
#define REQ_SECURE (1 << __REQ_SECURE)
|
||||
|
||||
#endif /* __LINUX_BLK_TYPES_H */
|
||||
|
||||
@@ -389,6 +389,7 @@ struct request_queue
|
||||
#define QUEUE_FLAG_DISCARD 16 /* supports DISCARD */
|
||||
#define QUEUE_FLAG_NOXMERGES 17 /* No extended merges */
|
||||
#define QUEUE_FLAG_ADD_RANDOM 18 /* Contributes to random pool */
|
||||
#define QUEUE_FLAG_SECDISCARD 19 /* supports SECDISCARD */
|
||||
|
||||
#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
|
||||
(1 << QUEUE_FLAG_CLUSTER) | \
|
||||
@@ -524,6 +525,8 @@ enum {
|
||||
#define blk_queue_stackable(q) \
|
||||
test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
|
||||
#define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
|
||||
#define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
|
||||
test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
|
||||
|
||||
#define blk_noretry_request(rq) \
|
||||
((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
|
||||
@@ -918,10 +921,12 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
|
||||
}
|
||||
enum{
|
||||
BLKDEV_WAIT, /* wait for completion */
|
||||
BLKDEV_BARRIER, /*issue request with barrier */
|
||||
BLKDEV_BARRIER, /* issue request with barrier */
|
||||
BLKDEV_SECURE, /* secure discard */
|
||||
};
|
||||
#define BLKDEV_IFL_WAIT (1 << BLKDEV_WAIT)
|
||||
#define BLKDEV_IFL_BARRIER (1 << BLKDEV_BARRIER)
|
||||
#define BLKDEV_IFL_SECURE (1 << BLKDEV_SECURE)
|
||||
extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *,
|
||||
unsigned long);
|
||||
extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
|
||||
|
||||
@@ -315,6 +315,7 @@ extern char *dynamic_dname(struct dentry *, char *, int, const char *, ...);
|
||||
|
||||
extern char *__d_path(const struct path *path, struct path *root, char *, int);
|
||||
extern char *d_path(const struct path *, char *, int);
|
||||
extern char *d_path_with_unreachable(const struct path *, char *, int);
|
||||
extern char *__dentry_path(struct dentry *, char *, int);
|
||||
extern char *dentry_path(struct dentry *, char *, int);
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
|
||||
union map_info {
|
||||
void *ptr;
|
||||
unsigned long long ll;
|
||||
unsigned flush_request;
|
||||
unsigned target_request_nr;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -174,12 +174,18 @@ struct dm_target {
|
||||
* A number of zero-length barrier requests that will be submitted
|
||||
* to the target for the purpose of flushing cache.
|
||||
*
|
||||
* The request number will be placed in union map_info->flush_request.
|
||||
* The request number will be placed in union map_info->target_request_nr.
|
||||
* It is a responsibility of the target driver to remap these requests
|
||||
* to the real underlying devices.
|
||||
*/
|
||||
unsigned num_flush_requests;
|
||||
|
||||
/*
|
||||
* The number of discard requests that will be submitted to the
|
||||
* target. map_info->request_nr is used just like num_flush_requests.
|
||||
*/
|
||||
unsigned num_discard_requests;
|
||||
|
||||
/* target specific data */
|
||||
void *private;
|
||||
|
||||
@@ -392,6 +398,12 @@ void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
|
||||
#define dm_array_too_big(fixed, obj, num) \
|
||||
((num) > (UINT_MAX - (fixed)) / (obj))
|
||||
|
||||
/*
|
||||
* Sector offset taken relative to the start of the target instead of
|
||||
* relative to the start of the device.
|
||||
*/
|
||||
#define dm_target_offset(ti, sector) ((sector) - (ti)->begin)
|
||||
|
||||
static inline sector_t to_sector(unsigned long n)
|
||||
{
|
||||
return (n >> SECTOR_SHIFT);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
#define DM_DIR "mapper" /* Slashes not supported */
|
||||
#define DM_CONTROL_NODE "control"
|
||||
#define DM_MAX_TYPE_NAME 16
|
||||
#define DM_NAME_LEN 128
|
||||
#define DM_UUID_LEN 129
|
||||
@@ -266,9 +267,9 @@ enum {
|
||||
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
|
||||
|
||||
#define DM_VERSION_MAJOR 4
|
||||
#define DM_VERSION_MINOR 17
|
||||
#define DM_VERSION_MINOR 18
|
||||
#define DM_VERSION_PATCHLEVEL 0
|
||||
#define DM_VERSION_EXTRA "-ioctl (2010-03-05)"
|
||||
#define DM_VERSION_EXTRA "-ioctl (2010-06-29)"
|
||||
|
||||
/* Status bits */
|
||||
#define DM_READONLY_FLAG (1 << 0) /* In/Out */
|
||||
|
||||
@@ -142,6 +142,14 @@ static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static inline int dma_get_cache_alignment(void)
|
||||
{
|
||||
#ifdef ARCH_DMA_MINALIGN
|
||||
return ARCH_DMA_MINALIGN;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* flags for the coherent memory api */
|
||||
#define DMA_MEMORY_MAP 0x01
|
||||
#define DMA_MEMORY_IO 0x02
|
||||
|
||||
@@ -129,7 +129,7 @@ static inline void random_ether_addr(u8 *addr)
|
||||
/**
|
||||
* dev_hw_addr_random - Create random MAC and set device flag
|
||||
* @dev: pointer to net_device structure
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
* @hwaddr: Pointer to a six-byte array containing the Ethernet address
|
||||
*
|
||||
* Generate random MAC to be used by a device and set addr_assign_type
|
||||
* so the state can be read by sysfs and be used by udev.
|
||||
|
||||
+3
-1
@@ -93,7 +93,7 @@ struct inodes_stat_t {
|
||||
#define FMODE_RANDOM ((__force fmode_t)0x1000)
|
||||
|
||||
/* File was opened by fanotify and shouldn't generate fanotify events */
|
||||
#define FMODE_NONOTIFY ((__force fmode_t)16777216) /* 0x1000000 */
|
||||
#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
|
||||
|
||||
/*
|
||||
* The below are the various read and write types that we support. Some of
|
||||
@@ -174,6 +174,7 @@ struct inodes_stat_t {
|
||||
*/
|
||||
#define DISCARD_NOBARRIER (WRITE | REQ_DISCARD)
|
||||
#define DISCARD_BARRIER (WRITE | REQ_DISCARD | REQ_HARDBARRIER)
|
||||
#define DISCARD_SECURE (DISCARD_NOBARRIER | REQ_SECURE)
|
||||
|
||||
#define SEL_IN 1
|
||||
#define SEL_OUT 2
|
||||
@@ -317,6 +318,7 @@ struct inodes_stat_t {
|
||||
#define BLKALIGNOFF _IO(0x12,122)
|
||||
#define BLKPBSZGET _IO(0x12,123)
|
||||
#define BLKDISCARDZEROES _IO(0x12,124)
|
||||
#define BLKSECDISCARD _IO(0x12,125)
|
||||
|
||||
#define BMAP_IOCTL 1 /* obsolete - kept for compatibility */
|
||||
#define FIBMAP _IO(0x00,1) /* bmap access */
|
||||
|
||||
@@ -21,4 +21,31 @@ extern void free_fs_struct(struct fs_struct *);
|
||||
extern void daemonize_fs_struct(void);
|
||||
extern int unshare_fs_struct(void);
|
||||
|
||||
static inline void get_fs_root(struct fs_struct *fs, struct path *root)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
*root = fs->root;
|
||||
path_get(root);
|
||||
read_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
*pwd = fs->pwd;
|
||||
path_get(pwd);
|
||||
read_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
static inline void get_fs_root_and_pwd(struct fs_struct *fs, struct path *root,
|
||||
struct path *pwd)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
*root = fs->root;
|
||||
path_get(root);
|
||||
*pwd = fs->pwd;
|
||||
path_get(pwd);
|
||||
read_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_FS_STRUCT_H */
|
||||
|
||||
+21
-16
@@ -26,18 +26,19 @@ static inline void fsnotify_d_instantiate(struct dentry *dentry,
|
||||
}
|
||||
|
||||
/* Notify this dentry's parent about a child's events. */
|
||||
static inline void fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask)
|
||||
static inline void fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask)
|
||||
{
|
||||
if (!dentry)
|
||||
dentry = file->f_path.dentry;
|
||||
dentry = path->dentry;
|
||||
|
||||
__fsnotify_parent(file, dentry, mask);
|
||||
__fsnotify_parent(path, dentry, mask);
|
||||
}
|
||||
|
||||
/* simple call site for access decisions */
|
||||
static inline int fsnotify_perm(struct file *file, int mask)
|
||||
{
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
__u32 fsnotify_mask = 0;
|
||||
|
||||
if (file->f_mode & FMODE_NONOTIFY)
|
||||
@@ -51,7 +52,7 @@ static inline int fsnotify_perm(struct file *file, int mask)
|
||||
else
|
||||
BUG();
|
||||
|
||||
return fsnotify(inode, fsnotify_mask, file, FSNOTIFY_EVENT_FILE, NULL, 0);
|
||||
return fsnotify(inode, fsnotify_mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -186,15 +187,16 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry)
|
||||
*/
|
||||
static inline void fsnotify_access(struct file *file)
|
||||
{
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
__u32 mask = FS_ACCESS;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= FS_IN_ISDIR;
|
||||
|
||||
if (!(file->f_mode & FMODE_NONOTIFY)) {
|
||||
fsnotify_parent(file, NULL, mask);
|
||||
fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0);
|
||||
fsnotify_parent(path, NULL, mask);
|
||||
fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,15 +205,16 @@ static inline void fsnotify_access(struct file *file)
|
||||
*/
|
||||
static inline void fsnotify_modify(struct file *file)
|
||||
{
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
__u32 mask = FS_MODIFY;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= FS_IN_ISDIR;
|
||||
|
||||
if (!(file->f_mode & FMODE_NONOTIFY)) {
|
||||
fsnotify_parent(file, NULL, mask);
|
||||
fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0);
|
||||
fsnotify_parent(path, NULL, mask);
|
||||
fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,15 +223,16 @@ static inline void fsnotify_modify(struct file *file)
|
||||
*/
|
||||
static inline void fsnotify_open(struct file *file)
|
||||
{
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = path->dentry->d_inode;
|
||||
__u32 mask = FS_OPEN;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= FS_IN_ISDIR;
|
||||
|
||||
if (!(file->f_mode & FMODE_NONOTIFY)) {
|
||||
fsnotify_parent(file, NULL, mask);
|
||||
fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0);
|
||||
fsnotify_parent(path, NULL, mask);
|
||||
fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,6 +241,7 @@ static inline void fsnotify_open(struct file *file)
|
||||
*/
|
||||
static inline void fsnotify_close(struct file *file)
|
||||
{
|
||||
struct path *path = &file->f_path;
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
fmode_t mode = file->f_mode;
|
||||
__u32 mask = (mode & FMODE_WRITE) ? FS_CLOSE_WRITE : FS_CLOSE_NOWRITE;
|
||||
@@ -245,8 +250,8 @@ static inline void fsnotify_close(struct file *file)
|
||||
mask |= FS_IN_ISDIR;
|
||||
|
||||
if (!(file->f_mode & FMODE_NONOTIFY)) {
|
||||
fsnotify_parent(file, NULL, mask);
|
||||
fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0);
|
||||
fsnotify_parent(path, NULL, mask);
|
||||
fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -203,20 +203,20 @@ struct fsnotify_event {
|
||||
/* to_tell may ONLY be dereferenced during handle_event(). */
|
||||
struct inode *to_tell; /* either the inode the event happened to or its parent */
|
||||
/*
|
||||
* depending on the event type we should have either a file or inode
|
||||
* We hold a reference on file, but NOT on inode. Since we have the ref on
|
||||
* the file, it may be dereferenced at any point during this object's
|
||||
* depending on the event type we should have either a path or inode
|
||||
* We hold a reference on path, but NOT on inode. Since we have the ref on
|
||||
* the path, it may be dereferenced at any point during this object's
|
||||
* lifetime. That reference is dropped when this object's refcnt hits
|
||||
* 0. If this event contains an inode instead of a file, the inode may
|
||||
* 0. If this event contains an inode instead of a path, the inode may
|
||||
* ONLY be used during handle_event().
|
||||
*/
|
||||
union {
|
||||
struct file *file;
|
||||
struct path path;
|
||||
struct inode *inode;
|
||||
};
|
||||
/* when calling fsnotify tell it if the data is a path or inode */
|
||||
#define FSNOTIFY_EVENT_NONE 0
|
||||
#define FSNOTIFY_EVENT_FILE 1
|
||||
#define FSNOTIFY_EVENT_PATH 1
|
||||
#define FSNOTIFY_EVENT_INODE 2
|
||||
int data_type; /* which of the above union we have */
|
||||
atomic_t refcnt; /* how many groups still are using/need to send this event */
|
||||
@@ -293,7 +293,7 @@ struct fsnotify_mark {
|
||||
/* main fsnotify call to send events */
|
||||
extern int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
|
||||
const unsigned char *name, u32 cookie);
|
||||
extern void __fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask);
|
||||
extern void __fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask);
|
||||
extern void __fsnotify_inode_delete(struct inode *inode);
|
||||
extern void __fsnotify_vfsmount_delete(struct vfsmount *mnt);
|
||||
extern u32 fsnotify_get_cookie(void);
|
||||
@@ -422,7 +422,7 @@ static inline int fsnotify(struct inode *to_tell, __u32 mask, void *data, int da
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void __fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask)
|
||||
static inline void __fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask)
|
||||
{}
|
||||
|
||||
static inline void __fsnotify_inode_delete(struct inode *inode)
|
||||
|
||||
+4
-10
@@ -2,6 +2,7 @@
|
||||
#define _LINUX_HUGETLB_H
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/hugetlb_inline.h>
|
||||
|
||||
struct ctl_table;
|
||||
struct user_struct;
|
||||
@@ -14,11 +15,6 @@ struct user_struct;
|
||||
|
||||
int PageHuge(struct page *page);
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return vma->vm_flags & VM_HUGETLB;
|
||||
}
|
||||
|
||||
void reset_vma_resv_huge_pages(struct vm_area_struct *vma);
|
||||
int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
@@ -47,6 +43,7 @@ int hugetlb_reserve_pages(struct inode *inode, long from, long to,
|
||||
struct vm_area_struct *vma,
|
||||
int acctflags);
|
||||
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
||||
void __isolate_hwpoisoned_huge_page(struct page *page);
|
||||
|
||||
extern unsigned long hugepages_treat_as_movable;
|
||||
extern const unsigned long hugetlb_zero, hugetlb_infinity;
|
||||
@@ -77,11 +74,6 @@ static inline int PageHuge(struct page *page)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
@@ -108,6 +100,8 @@ static inline void hugetlb_report_meminfo(struct seq_file *m)
|
||||
#define is_hugepage_only_range(mm, addr, len) 0
|
||||
#define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) ({BUG(); 0; })
|
||||
#define hugetlb_fault(mm, vma, addr, flags) ({ BUG(); 0; })
|
||||
#define huge_pte_offset(mm, address) 0
|
||||
#define __isolate_hwpoisoned_huge_page(page) 0
|
||||
|
||||
#define hugetlb_change_protection(vma, address, end, newprot)
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef _LINUX_HUGETLB_INLINE_H
|
||||
#define _LINUX_HUGETLB_INLINE_H
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
|
||||
#include <linux/mm.h>
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return vma->vm_flags & VM_HUGETLB;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
*
|
||||
* i2c-mux.h - functions for the i2c-bus mux support
|
||||
*
|
||||
* Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
|
||||
* Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
|
||||
* Michael Lawnick <michael.lawnick.ext@nsn.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_I2C_MUX_H
|
||||
#define _LINUX_I2C_MUX_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
* Called to create a i2c bus on a multiplexed bus segment.
|
||||
* The mux_dev and chan_id parameters are passed to the select
|
||||
* and deselect callback functions to perform hardware-specific
|
||||
* mux control.
|
||||
*/
|
||||
struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent,
|
||||
void *mux_dev, u32 force_nr, u32 chan_id,
|
||||
int (*select) (struct i2c_adapter *,
|
||||
void *mux_dev, u32 chan_id),
|
||||
int (*deselect) (struct i2c_adapter *,
|
||||
void *mux_dev, u32 chan_id));
|
||||
|
||||
int i2c_del_mux_adapter(struct i2c_adapter *adap);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_I2C_MUX_H */
|
||||
+17
-16
@@ -37,6 +37,7 @@
|
||||
#include <linux/of.h> /* for struct device_node */
|
||||
|
||||
extern struct bus_type i2c_bus_type;
|
||||
extern struct device_type i2c_adapter_type;
|
||||
|
||||
/* --- General options ------------------------------------------------ */
|
||||
|
||||
@@ -284,12 +285,18 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
|
||||
|
||||
/* If you don't know the exact address of an I2C device, use this variant
|
||||
* instead, which can probe for device presence in a list of possible
|
||||
* addresses.
|
||||
* addresses. The "probe" callback function is optional. If it is provided,
|
||||
* it must return 1 on successful probe, 0 otherwise. If it is not provided,
|
||||
* a default probing method is used.
|
||||
*/
|
||||
extern struct i2c_client *
|
||||
i2c_new_probed_device(struct i2c_adapter *adap,
|
||||
struct i2c_board_info *info,
|
||||
unsigned short const *addr_list);
|
||||
unsigned short const *addr_list,
|
||||
int (*probe)(struct i2c_adapter *, unsigned short addr));
|
||||
|
||||
/* Common custom probe functions */
|
||||
extern int i2c_probe_func_quick_read(struct i2c_adapter *, unsigned short addr);
|
||||
|
||||
/* For devices that use several addresses, use i2c_new_dummy() to make
|
||||
* client handles for the extra addresses.
|
||||
@@ -362,6 +369,7 @@ struct i2c_adapter {
|
||||
char name[48];
|
||||
struct completion dev_released;
|
||||
|
||||
struct mutex userspace_clients_lock;
|
||||
struct list_head userspace_clients;
|
||||
};
|
||||
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
||||
@@ -376,23 +384,16 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
|
||||
dev_set_drvdata(&dev->dev, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* i2c_lock_adapter - Prevent access to an I2C bus segment
|
||||
* @adapter: Target I2C bus segment
|
||||
*/
|
||||
static inline void i2c_lock_adapter(struct i2c_adapter *adapter)
|
||||
static inline int i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter)
|
||||
{
|
||||
rt_mutex_lock(&adapter->bus_lock);
|
||||
return adapter->dev.parent != NULL
|
||||
&& adapter->dev.parent->bus == &i2c_bus_type
|
||||
&& adapter->dev.parent->type == &i2c_adapter_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* i2c_unlock_adapter - Reauthorize access to an I2C bus segment
|
||||
* @adapter: Target I2C bus segment
|
||||
*/
|
||||
static inline void i2c_unlock_adapter(struct i2c_adapter *adapter)
|
||||
{
|
||||
rt_mutex_unlock(&adapter->bus_lock);
|
||||
}
|
||||
/* Adapter locking functions, exported for shared pin cases */
|
||||
void i2c_lock_adapter(struct i2c_adapter *);
|
||||
void i2c_unlock_adapter(struct i2c_adapter *);
|
||||
|
||||
/*flags for the client struct: */
|
||||
#define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
*
|
||||
* pca954x.h - I2C multiplexer/switch support
|
||||
*
|
||||
* Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
|
||||
* Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
|
||||
* Michael Lawnick <michael.lawnick.ext@nsn.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _LINUX_I2C_PCA954X_H
|
||||
#define _LINUX_I2C_PCA954X_H
|
||||
|
||||
/* Platform data for the PCA954x I2C multiplexers */
|
||||
|
||||
/* Per channel initialisation data:
|
||||
* @adap_id: bus number for the adapter. 0 = don't care
|
||||
* @deselect_on_exit: set this entry to 1, if your H/W needs deselection
|
||||
* of this channel after transaction.
|
||||
*
|
||||
*/
|
||||
struct pca954x_platform_mode {
|
||||
int adap_id;
|
||||
unsigned int deselect_on_exit:1;
|
||||
};
|
||||
|
||||
/* Per mux/switch data, used with i2c_register_board_info */
|
||||
struct pca954x_platform_data {
|
||||
struct pca954x_platform_mode *modes;
|
||||
int num_modes;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_I2C_PCA954X_H */
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Driver for the Semtech SX150x I2C GPIO Expanders
|
||||
*
|
||||
* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 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-1301, USA.
|
||||
*/
|
||||
#ifndef __LINUX_I2C_SX150X_H
|
||||
#define __LINUX_I2C_SX150X_H
|
||||
|
||||
/**
|
||||
* struct sx150x_platform_data - config data for SX150x driver
|
||||
* @gpio_base: The index number of the first GPIO assigned to this
|
||||
* GPIO expander. The expander will create a block of
|
||||
* consecutively numbered gpios beginning at the given base,
|
||||
* with the size of the block depending on the model of the
|
||||
* expander chip.
|
||||
* @oscio_is_gpo: If set to true, the driver will configure OSCIO as a GPO
|
||||
* instead of as an oscillator, increasing the size of the
|
||||
* GP(I)O pool created by this expander by one. The
|
||||
* output-only GPO pin will be added at the end of the block.
|
||||
* @io_pullup_ena: A bit-mask which enables or disables the pull-up resistor
|
||||
* for each IO line in the expander. Setting the bit at
|
||||
* position n will enable the pull-up for the IO at
|
||||
* the corresponding offset. For chips with fewer than
|
||||
* 16 IO pins, high-end bits are ignored.
|
||||
* @io_pulldn_ena: A bit-mask which enables-or disables the pull-down
|
||||
* resistor for each IO line in the expander. Setting the
|
||||
* bit at position n will enable the pull-down for the IO at
|
||||
* the corresponding offset. For chips with fewer than
|
||||
* 16 IO pins, high-end bits are ignored.
|
||||
* @io_open_drain_ena: A bit-mask which enables-or disables open-drain
|
||||
* operation for each IO line in the expander. Setting the
|
||||
* bit at position n enables open-drain operation for
|
||||
* the IO at the corresponding offset. Clearing the bit
|
||||
* enables regular push-pull operation for that IO.
|
||||
* For chips with fewer than 16 IO pins, high-end bits
|
||||
* are ignored.
|
||||
* @io_polarity: A bit-mask which enables polarity inversion for each IO line
|
||||
* in the expander. Setting the bit at position n inverts
|
||||
* the polarity of that IO line, while clearing it results
|
||||
* in normal polarity. For chips with fewer than 16 IO pins,
|
||||
* high-end bits are ignored.
|
||||
* @irq_summary: The 'summary IRQ' line to which the GPIO expander's INT line
|
||||
* is connected, via which it reports interrupt events
|
||||
* across all GPIO lines. This must be a real,
|
||||
* pre-existing IRQ line.
|
||||
* Setting this value < 0 disables the irq_chip functionality
|
||||
* of the driver.
|
||||
* @irq_base: The first 'virtual IRQ' line at which our block of GPIO-based
|
||||
* IRQ lines will appear. Similarly to gpio_base, the expander
|
||||
* will create a block of irqs beginning at this number.
|
||||
* This value is ignored if irq_summary is < 0.
|
||||
*/
|
||||
struct sx150x_platform_data {
|
||||
unsigned gpio_base;
|
||||
bool oscio_is_gpo;
|
||||
u16 io_pullup_ena;
|
||||
u16 io_pulldn_ena;
|
||||
u16 io_open_drain_ena;
|
||||
u16 io_polarity;
|
||||
int irq_summary;
|
||||
unsigned irq_base;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_I2C_SX150X_H */
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/iomap.h>
|
||||
|
||||
/*
|
||||
* The io_mapping mechanism provides an abstraction for mapping
|
||||
@@ -33,6 +32,8 @@
|
||||
|
||||
#ifdef CONFIG_HAVE_ATOMIC_IOMAP
|
||||
|
||||
#include <asm/iomap.h>
|
||||
|
||||
struct io_mapping {
|
||||
resource_size_t base;
|
||||
unsigned long size;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
#ifndef __LINUX_JZ4740_ADC
|
||||
#define __LINUX_JZ4740_ADC
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
/*
|
||||
* jz4740_adc_set_config - Configure a JZ4740 adc device
|
||||
* @dev: Pointer to a jz4740-adc device
|
||||
* @mask: Mask for the config value to be set
|
||||
* @val: Value to be set
|
||||
*
|
||||
* This function can be used by the JZ4740 ADC mfd cells to configure their
|
||||
* options in the shared config register.
|
||||
*/
|
||||
int jz4740_adc_set_config(struct device *dev, uint32_t mask, uint32_t val);
|
||||
|
||||
#define JZ_ADC_CONFIG_SPZZ BIT(31)
|
||||
#define JZ_ADC_CONFIG_EX_IN BIT(30)
|
||||
#define JZ_ADC_CONFIG_DNUM_MASK (0x7 << 16)
|
||||
#define JZ_ADC_CONFIG_DMA_ENABLE BIT(15)
|
||||
#define JZ_ADC_CONFIG_XYZ_MASK (0x2 << 13)
|
||||
#define JZ_ADC_CONFIG_SAMPLE_NUM_MASK (0x7 << 10)
|
||||
#define JZ_ADC_CONFIG_CLKDIV_MASK (0xf << 5)
|
||||
#define JZ_ADC_CONFIG_BAT_MB BIT(4)
|
||||
|
||||
#define JZ_ADC_CONFIG_DNUM(dnum) ((dnum) << 16)
|
||||
#define JZ_ADC_CONFIG_XYZ_OFFSET(dnum) ((xyz) << 13)
|
||||
#define JZ_ADC_CONFIG_SAMPLE_NUM(x) ((x) << 10)
|
||||
#define JZ_ADC_CONFIG_CLKDIV(div) ((div) << 5)
|
||||
|
||||
#endif
|
||||
@@ -177,11 +177,12 @@ struct va_format {
|
||||
};
|
||||
|
||||
extern struct atomic_notifier_head panic_notifier_list;
|
||||
extern long (*panic_blink)(long time);
|
||||
extern long (*panic_blink)(int state);
|
||||
NORET_TYPE void panic(const char * fmt, ...)
|
||||
__attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
|
||||
extern void oops_enter(void);
|
||||
extern void oops_exit(void);
|
||||
void print_oops_end_marker(void);
|
||||
extern int oops_may_print(void);
|
||||
NORET_TYPE void do_exit(long error_code)
|
||||
ATTRIB_NORET;
|
||||
@@ -305,6 +306,13 @@ static inline void log_buf_kexec_setup(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Dummy printk for disabled debugging statements to use whilst maintaining
|
||||
* gcc's format and side-effect checking.
|
||||
*/
|
||||
static inline __attribute__ ((format (printf, 1, 2)))
|
||||
int no_printk(const char *s, ...) { return 0; }
|
||||
|
||||
extern int printk_needs_cpu(int cpu);
|
||||
extern void printk_tick(void);
|
||||
|
||||
|
||||
+727
-498
File diff suppressed because it is too large
Load Diff
@@ -123,8 +123,7 @@ static inline bool mem_cgroup_disabled(void)
|
||||
|
||||
void mem_cgroup_update_file_mapped(struct page *page, int val);
|
||||
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
|
||||
gfp_t gfp_mask, int nid,
|
||||
int zid);
|
||||
gfp_t gfp_mask);
|
||||
u64 mem_cgroup_get_limit(struct mem_cgroup *mem);
|
||||
|
||||
#else /* CONFIG_CGROUP_MEM_RES_CTLR */
|
||||
@@ -301,7 +300,7 @@ static inline void mem_cgroup_update_file_mapped(struct page *page,
|
||||
|
||||
static inline
|
||||
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
|
||||
gfp_t gfp_mask, int nid, int zid)
|
||||
gfp_t gfp_mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -76,6 +76,8 @@
|
||||
#define AB8500_NR_IRQS 104
|
||||
#define AB8500_NUM_IRQ_REGS 13
|
||||
|
||||
#define AB8500_NUM_REGULATORS 15
|
||||
|
||||
/**
|
||||
* struct ab8500 - ab8500 internal structure
|
||||
* @dev: parent device
|
||||
@@ -108,14 +110,18 @@ struct ab8500 {
|
||||
u8 oldmask[AB8500_NUM_IRQ_REGS];
|
||||
};
|
||||
|
||||
struct regulator_init_data;
|
||||
|
||||
/**
|
||||
* struct ab8500_platform_data - AB8500 platform data
|
||||
* @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used
|
||||
* @init: board-specific initialization after detection of ab8500
|
||||
* @regulator: machine-specific constraints for regulators
|
||||
*/
|
||||
struct ab8500_platform_data {
|
||||
int irq_base;
|
||||
void (*init) (struct ab8500 *);
|
||||
struct regulator_init_data *regulator[AB8500_NUM_REGULATORS];
|
||||
};
|
||||
|
||||
extern int ab8500_write(struct ab8500 *a8500, u16 addr, u8 data);
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* max8698.h - Voltage regulator driver for the Maxim 8998
|
||||
*
|
||||
* Copyright (C) 2009-2010 Samsung Electrnoics
|
||||
* Kyungmin Park <kyungmin.park@samsung.com>
|
||||
* Marek Szyprowski <m.szyprowski@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_MAX8998_PRIV_H
|
||||
#define __LINUX_MFD_MAX8998_PRIV_H
|
||||
|
||||
/* MAX 8998 registers */
|
||||
enum {
|
||||
MAX8998_REG_IRQ1,
|
||||
MAX8998_REG_IRQ2,
|
||||
MAX8998_REG_IRQ3,
|
||||
MAX8998_REG_IRQ4,
|
||||
MAX8998_REG_IRQM1,
|
||||
MAX8998_REG_IRQM2,
|
||||
MAX8998_REG_IRQM3,
|
||||
MAX8998_REG_IRQM4,
|
||||
MAX8998_REG_STATUS1,
|
||||
MAX8998_REG_STATUS2,
|
||||
MAX8998_REG_STATUSM1,
|
||||
MAX8998_REG_STATUSM2,
|
||||
MAX8998_REG_CHGR1,
|
||||
MAX8998_REG_CHGR2,
|
||||
MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
|
||||
MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
|
||||
MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
|
||||
MAX8998_REG_ONOFF1,
|
||||
MAX8998_REG_ONOFF2,
|
||||
MAX8998_REG_ONOFF3,
|
||||
MAX8998_REG_ONOFF4,
|
||||
MAX8998_REG_BUCK1_DVSARM1,
|
||||
MAX8998_REG_BUCK1_DVSARM2,
|
||||
MAX8998_REG_BUCK1_DVSARM3,
|
||||
MAX8998_REG_BUCK1_DVSARM4,
|
||||
MAX8998_REG_BUCK2_DVSINT1,
|
||||
MAX8998_REG_BUCK2_DVSINT2,
|
||||
MAX8998_REG_BUCK3,
|
||||
MAX8998_REG_BUCK4,
|
||||
MAX8998_REG_LDO2_LDO3,
|
||||
MAX8998_REG_LDO4,
|
||||
MAX8998_REG_LDO5,
|
||||
MAX8998_REG_LDO6,
|
||||
MAX8998_REG_LDO7,
|
||||
MAX8998_REG_LDO8_LDO9,
|
||||
MAX8998_REG_LDO10_LDO11,
|
||||
MAX8998_REG_LDO12,
|
||||
MAX8998_REG_LDO13,
|
||||
MAX8998_REG_LDO14,
|
||||
MAX8998_REG_LDO15,
|
||||
MAX8998_REG_LDO16,
|
||||
MAX8998_REG_LDO17,
|
||||
MAX8998_REG_BKCHR,
|
||||
MAX8998_REG_LBCNFG1,
|
||||
MAX8998_REG_LBCNFG2,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct max8998_dev - max8998 master device for sub-drivers
|
||||
* @dev: master device of the chip (can be used to access platform data)
|
||||
* @i2c_client: i2c client private data
|
||||
* @dev_read(): chip register read function
|
||||
* @dev_write(): chip register write function
|
||||
* @dev_update(): chip register update function
|
||||
* @iolock: mutex for serializing io access
|
||||
*/
|
||||
|
||||
struct max8998_dev {
|
||||
struct device *dev;
|
||||
struct i2c_client *i2c_client;
|
||||
int (*dev_read)(struct max8998_dev *max8998, u8 reg, u8 *dest);
|
||||
int (*dev_write)(struct max8998_dev *max8998, u8 reg, u8 val);
|
||||
int (*dev_update)(struct max8998_dev *max8998, u8 reg, u8 val, u8 mask);
|
||||
struct mutex iolock;
|
||||
};
|
||||
|
||||
static inline int max8998_read_reg(struct max8998_dev *max8998, u8 reg,
|
||||
u8 *value)
|
||||
{
|
||||
return max8998->dev_read(max8998, reg, value);
|
||||
}
|
||||
|
||||
static inline int max8998_write_reg(struct max8998_dev *max8998, u8 reg,
|
||||
u8 value)
|
||||
{
|
||||
return max8998->dev_write(max8998, reg, value);
|
||||
}
|
||||
|
||||
static inline int max8998_update_reg(struct max8998_dev *max8998, u8 reg,
|
||||
u8 value, u8 mask)
|
||||
{
|
||||
return max8998->dev_update(max8998, reg, value, mask);
|
||||
}
|
||||
|
||||
#endif /* __LINUX_MFD_MAX8998_PRIV_H */
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* max8698.h - Voltage regulator driver for the Maxim 8998
|
||||
*
|
||||
* Copyright (C) 2009-2010 Samsung Electrnoics
|
||||
* Kyungmin Park <kyungmin.park@samsung.com>
|
||||
* Marek Szyprowski <m.szyprowski@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_MAX8998_H
|
||||
#define __LINUX_MFD_MAX8998_H
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
/* MAX 8998 regulator ids */
|
||||
enum {
|
||||
MAX8998_LDO2 = 2,
|
||||
MAX8998_LDO3,
|
||||
MAX8998_LDO4,
|
||||
MAX8998_LDO5,
|
||||
MAX8998_LDO6,
|
||||
MAX8998_LDO7,
|
||||
MAX8998_LDO8,
|
||||
MAX8998_LDO9,
|
||||
MAX8998_LDO10,
|
||||
MAX8998_LDO11,
|
||||
MAX8998_LDO12,
|
||||
MAX8998_LDO13,
|
||||
MAX8998_LDO14,
|
||||
MAX8998_LDO15,
|
||||
MAX8998_LDO16,
|
||||
MAX8998_LDO17,
|
||||
MAX8998_BUCK1,
|
||||
MAX8998_BUCK2,
|
||||
MAX8998_BUCK3,
|
||||
MAX8998_BUCK4,
|
||||
MAX8998_EN32KHZ_AP,
|
||||
MAX8998_EN32KHZ_CP,
|
||||
MAX8998_ENVICHG,
|
||||
MAX8998_ESAFEOUT1,
|
||||
MAX8998_ESAFEOUT2,
|
||||
};
|
||||
|
||||
/**
|
||||
* max8998_regulator_data - regulator data
|
||||
* @id: regulator id
|
||||
* @initdata: regulator init data (contraints, supplies, ...)
|
||||
*/
|
||||
struct max8998_regulator_data {
|
||||
int id;
|
||||
struct regulator_init_data *initdata;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct max8998_board - packages regulator init data
|
||||
* @num_regulators: number of regultors used
|
||||
* @regulators: array of defined regulators
|
||||
*/
|
||||
|
||||
struct max8998_platform_data {
|
||||
int num_regulators;
|
||||
struct max8998_regulator_data *regulators;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MFD_MAX8998_H */
|
||||
@@ -1,220 +0,0 @@
|
||||
/*
|
||||
* Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
|
||||
*
|
||||
* Initial development of this code was funded by
|
||||
* Phytec Messtechnik GmbH, http://www.phytec.de
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_MC13783_PRIV_H
|
||||
#define __LINUX_MFD_MC13783_PRIV_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
struct mc13783 {
|
||||
struct spi_device *spidev;
|
||||
struct mutex lock;
|
||||
int irq;
|
||||
int flags;
|
||||
|
||||
irq_handler_t irqhandler[MC13783_NUM_IRQ];
|
||||
void *irqdata[MC13783_NUM_IRQ];
|
||||
|
||||
/* XXX these should go as platformdata to the regulator subdevice */
|
||||
struct mc13783_regulator_init_data *regulators;
|
||||
int num_regulators;
|
||||
};
|
||||
|
||||
#define MC13783_REG_INTERRUPT_STATUS_0 0
|
||||
#define MC13783_REG_INTERRUPT_MASK_0 1
|
||||
#define MC13783_REG_INTERRUPT_SENSE_0 2
|
||||
#define MC13783_REG_INTERRUPT_STATUS_1 3
|
||||
#define MC13783_REG_INTERRUPT_MASK_1 4
|
||||
#define MC13783_REG_INTERRUPT_SENSE_1 5
|
||||
#define MC13783_REG_POWER_UP_MODE_SENSE 6
|
||||
#define MC13783_REG_REVISION 7
|
||||
#define MC13783_REG_SEMAPHORE 8
|
||||
#define MC13783_REG_ARBITRATION_PERIPHERAL_AUDIO 9
|
||||
#define MC13783_REG_ARBITRATION_SWITCHERS 10
|
||||
#define MC13783_REG_ARBITRATION_REGULATORS_0 11
|
||||
#define MC13783_REG_ARBITRATION_REGULATORS_1 12
|
||||
#define MC13783_REG_POWER_CONTROL_0 13
|
||||
#define MC13783_REG_POWER_CONTROL_1 14
|
||||
#define MC13783_REG_POWER_CONTROL_2 15
|
||||
#define MC13783_REG_REGEN_ASSIGNMENT 16
|
||||
#define MC13783_REG_CONTROL_SPARE 17
|
||||
#define MC13783_REG_MEMORY_A 18
|
||||
#define MC13783_REG_MEMORY_B 19
|
||||
#define MC13783_REG_RTC_TIME 20
|
||||
#define MC13783_REG_RTC_ALARM 21
|
||||
#define MC13783_REG_RTC_DAY 22
|
||||
#define MC13783_REG_RTC_DAY_ALARM 23
|
||||
#define MC13783_REG_SWITCHERS_0 24
|
||||
#define MC13783_REG_SWITCHERS_1 25
|
||||
#define MC13783_REG_SWITCHERS_2 26
|
||||
#define MC13783_REG_SWITCHERS_3 27
|
||||
#define MC13783_REG_SWITCHERS_4 28
|
||||
#define MC13783_REG_SWITCHERS_5 29
|
||||
#define MC13783_REG_REGULATOR_SETTING_0 30
|
||||
#define MC13783_REG_REGULATOR_SETTING_1 31
|
||||
#define MC13783_REG_REGULATOR_MODE_0 32
|
||||
#define MC13783_REG_REGULATOR_MODE_1 33
|
||||
#define MC13783_REG_POWER_MISCELLANEOUS 34
|
||||
#define MC13783_REG_POWER_SPARE 35
|
||||
#define MC13783_REG_AUDIO_RX_0 36
|
||||
#define MC13783_REG_AUDIO_RX_1 37
|
||||
#define MC13783_REG_AUDIO_TX 38
|
||||
#define MC13783_REG_AUDIO_SSI_NETWORK 39
|
||||
#define MC13783_REG_AUDIO_CODEC 40
|
||||
#define MC13783_REG_AUDIO_STEREO_DAC 41
|
||||
#define MC13783_REG_AUDIO_SPARE 42
|
||||
#define MC13783_REG_ADC_0 43
|
||||
#define MC13783_REG_ADC_1 44
|
||||
#define MC13783_REG_ADC_2 45
|
||||
#define MC13783_REG_ADC_3 46
|
||||
#define MC13783_REG_ADC_4 47
|
||||
#define MC13783_REG_CHARGER 48
|
||||
#define MC13783_REG_USB 49
|
||||
#define MC13783_REG_CHARGE_USB_SPARE 50
|
||||
#define MC13783_REG_LED_CONTROL_0 51
|
||||
#define MC13783_REG_LED_CONTROL_1 52
|
||||
#define MC13783_REG_LED_CONTROL_2 53
|
||||
#define MC13783_REG_LED_CONTROL_3 54
|
||||
#define MC13783_REG_LED_CONTROL_4 55
|
||||
#define MC13783_REG_LED_CONTROL_5 56
|
||||
#define MC13783_REG_SPARE 57
|
||||
#define MC13783_REG_TRIM_0 58
|
||||
#define MC13783_REG_TRIM_1 59
|
||||
#define MC13783_REG_TEST_0 60
|
||||
#define MC13783_REG_TEST_1 61
|
||||
#define MC13783_REG_TEST_2 62
|
||||
#define MC13783_REG_TEST_3 63
|
||||
#define MC13783_REG_NB 64
|
||||
|
||||
/*
|
||||
* Reg Regulator Mode 0
|
||||
*/
|
||||
#define MC13783_REGCTRL_VAUDIO_EN (1 << 0)
|
||||
#define MC13783_REGCTRL_VAUDIO_STBY (1 << 1)
|
||||
#define MC13783_REGCTRL_VAUDIO_MODE (1 << 2)
|
||||
#define MC13783_REGCTRL_VIOHI_EN (1 << 3)
|
||||
#define MC13783_REGCTRL_VIOHI_STBY (1 << 4)
|
||||
#define MC13783_REGCTRL_VIOHI_MODE (1 << 5)
|
||||
#define MC13783_REGCTRL_VIOLO_EN (1 << 6)
|
||||
#define MC13783_REGCTRL_VIOLO_STBY (1 << 7)
|
||||
#define MC13783_REGCTRL_VIOLO_MODE (1 << 8)
|
||||
#define MC13783_REGCTRL_VDIG_EN (1 << 9)
|
||||
#define MC13783_REGCTRL_VDIG_STBY (1 << 10)
|
||||
#define MC13783_REGCTRL_VDIG_MODE (1 << 11)
|
||||
#define MC13783_REGCTRL_VGEN_EN (1 << 12)
|
||||
#define MC13783_REGCTRL_VGEN_STBY (1 << 13)
|
||||
#define MC13783_REGCTRL_VGEN_MODE (1 << 14)
|
||||
#define MC13783_REGCTRL_VRFDIG_EN (1 << 15)
|
||||
#define MC13783_REGCTRL_VRFDIG_STBY (1 << 16)
|
||||
#define MC13783_REGCTRL_VRFDIG_MODE (1 << 17)
|
||||
#define MC13783_REGCTRL_VRFREF_EN (1 << 18)
|
||||
#define MC13783_REGCTRL_VRFREF_STBY (1 << 19)
|
||||
#define MC13783_REGCTRL_VRFREF_MODE (1 << 20)
|
||||
#define MC13783_REGCTRL_VRFCP_EN (1 << 21)
|
||||
#define MC13783_REGCTRL_VRFCP_STBY (1 << 22)
|
||||
#define MC13783_REGCTRL_VRFCP_MODE (1 << 23)
|
||||
|
||||
/*
|
||||
* Reg Regulator Mode 1
|
||||
*/
|
||||
#define MC13783_REGCTRL_VSIM_EN (1 << 0)
|
||||
#define MC13783_REGCTRL_VSIM_STBY (1 << 1)
|
||||
#define MC13783_REGCTRL_VSIM_MODE (1 << 2)
|
||||
#define MC13783_REGCTRL_VESIM_EN (1 << 3)
|
||||
#define MC13783_REGCTRL_VESIM_STBY (1 << 4)
|
||||
#define MC13783_REGCTRL_VESIM_MODE (1 << 5)
|
||||
#define MC13783_REGCTRL_VCAM_EN (1 << 6)
|
||||
#define MC13783_REGCTRL_VCAM_STBY (1 << 7)
|
||||
#define MC13783_REGCTRL_VCAM_MODE (1 << 8)
|
||||
#define MC13783_REGCTRL_VRFBG_EN (1 << 9)
|
||||
#define MC13783_REGCTRL_VRFBG_STBY (1 << 10)
|
||||
#define MC13783_REGCTRL_VVIB_EN (1 << 11)
|
||||
#define MC13783_REGCTRL_VRF1_EN (1 << 12)
|
||||
#define MC13783_REGCTRL_VRF1_STBY (1 << 13)
|
||||
#define MC13783_REGCTRL_VRF1_MODE (1 << 14)
|
||||
#define MC13783_REGCTRL_VRF2_EN (1 << 15)
|
||||
#define MC13783_REGCTRL_VRF2_STBY (1 << 16)
|
||||
#define MC13783_REGCTRL_VRF2_MODE (1 << 17)
|
||||
#define MC13783_REGCTRL_VMMC1_EN (1 << 18)
|
||||
#define MC13783_REGCTRL_VMMC1_STBY (1 << 19)
|
||||
#define MC13783_REGCTRL_VMMC1_MODE (1 << 20)
|
||||
#define MC13783_REGCTRL_VMMC2_EN (1 << 21)
|
||||
#define MC13783_REGCTRL_VMMC2_STBY (1 << 22)
|
||||
#define MC13783_REGCTRL_VMMC2_MODE (1 << 23)
|
||||
|
||||
/*
|
||||
* Reg Regulator Misc.
|
||||
*/
|
||||
#define MC13783_REGCTRL_GPO1_EN (1 << 6)
|
||||
#define MC13783_REGCTRL_GPO2_EN (1 << 8)
|
||||
#define MC13783_REGCTRL_GPO3_EN (1 << 10)
|
||||
#define MC13783_REGCTRL_GPO4_EN (1 << 12)
|
||||
#define MC13783_REGCTRL_VIBPINCTRL (1 << 14)
|
||||
|
||||
/*
|
||||
* Reg Switcher 4
|
||||
*/
|
||||
#define MC13783_SWCTRL_SW1A_MODE (1 << 0)
|
||||
#define MC13783_SWCTRL_SW1A_STBY_MODE (1 << 2)
|
||||
#define MC13783_SWCTRL_SW1A_DVS_SPEED (1 << 6)
|
||||
#define MC13783_SWCTRL_SW1A_PANIC_MODE (1 << 8)
|
||||
#define MC13783_SWCTRL_SW1A_SOFTSTART (1 << 9)
|
||||
#define MC13783_SWCTRL_SW1B_MODE (1 << 10)
|
||||
#define MC13783_SWCTRL_SW1B_STBY_MODE (1 << 12)
|
||||
#define MC13783_SWCTRL_SW1B_DVS_SPEED (1 << 14)
|
||||
#define MC13783_SWCTRL_SW1B_PANIC_MODE (1 << 16)
|
||||
#define MC13783_SWCTRL_SW1B_SOFTSTART (1 << 17)
|
||||
#define MC13783_SWCTRL_PLL_EN (1 << 18)
|
||||
#define MC13783_SWCTRL_PLL_FACTOR (1 << 19)
|
||||
|
||||
/*
|
||||
* Reg Switcher 5
|
||||
*/
|
||||
#define MC13783_SWCTRL_SW2A_MODE (1 << 0)
|
||||
#define MC13783_SWCTRL_SW2A_STBY_MODE (1 << 2)
|
||||
#define MC13783_SWCTRL_SW2A_DVS_SPEED (1 << 6)
|
||||
#define MC13783_SWCTRL_SW2A_PANIC_MODE (1 << 8)
|
||||
#define MC13783_SWCTRL_SW2A_SOFTSTART (1 << 9)
|
||||
#define MC13783_SWCTRL_SW2B_MODE (1 << 10)
|
||||
#define MC13783_SWCTRL_SW2B_STBY_MODE (1 << 12)
|
||||
#define MC13783_SWCTRL_SW2B_DVS_SPEED (1 << 14)
|
||||
#define MC13783_SWCTRL_SW2B_PANIC_MODE (1 << 16)
|
||||
#define MC13783_SWCTRL_SW2B_SOFTSTART (1 << 17)
|
||||
#define MC13783_SWSET_SW3 (1 << 18)
|
||||
#define MC13783_SWCTRL_SW3_EN (1 << 20)
|
||||
#define MC13783_SWCTRL_SW3_STBY (1 << 21)
|
||||
#define MC13783_SWCTRL_SW3_MODE (1 << 22)
|
||||
|
||||
static inline int mc13783_set_bits(struct mc13783 *mc13783, unsigned int offset,
|
||||
u32 mask, u32 val)
|
||||
{
|
||||
int ret;
|
||||
mc13783_lock(mc13783);
|
||||
ret = mc13783_reg_rmw(mc13783, offset, mask, val);
|
||||
mc13783_unlock(mc13783);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* __LINUX_MFD_MC13783_PRIV_H */
|
||||
@@ -21,6 +21,8 @@ int mc13783_reg_write(struct mc13783 *mc13783, unsigned int offset, u32 val);
|
||||
int mc13783_reg_rmw(struct mc13783 *mc13783, unsigned int offset,
|
||||
u32 mask, u32 val);
|
||||
|
||||
int mc13783_get_flags(struct mc13783 *mc13783);
|
||||
|
||||
int mc13783_irq_request(struct mc13783 *mc13783, int irq,
|
||||
irq_handler_t handler, const char *name, void *dev);
|
||||
int mc13783_irq_request_nounmask(struct mc13783 *mc13783, int irq,
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Copyright (C) ST-Ericsson SA 2010
|
||||
*
|
||||
* License Terms: GNU General Public License, version 2
|
||||
* Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_STMPE_H
|
||||
#define __LINUX_MFD_STMPE_H
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
enum stmpe_block {
|
||||
STMPE_BLOCK_GPIO = 1 << 0,
|
||||
STMPE_BLOCK_KEYPAD = 1 << 1,
|
||||
STMPE_BLOCK_TOUCHSCREEN = 1 << 2,
|
||||
STMPE_BLOCK_ADC = 1 << 3,
|
||||
STMPE_BLOCK_PWM = 1 << 4,
|
||||
STMPE_BLOCK_ROTATOR = 1 << 5,
|
||||
};
|
||||
|
||||
enum stmpe_partnum {
|
||||
STMPE811,
|
||||
STMPE1601,
|
||||
STMPE2401,
|
||||
STMPE2403,
|
||||
};
|
||||
|
||||
/*
|
||||
* For registers whose locations differ on variants, the correct address is
|
||||
* obtained by indexing stmpe->regs with one of the following.
|
||||
*/
|
||||
enum {
|
||||
STMPE_IDX_CHIP_ID,
|
||||
STMPE_IDX_ICR_LSB,
|
||||
STMPE_IDX_IER_LSB,
|
||||
STMPE_IDX_ISR_MSB,
|
||||
STMPE_IDX_GPMR_LSB,
|
||||
STMPE_IDX_GPSR_LSB,
|
||||
STMPE_IDX_GPCR_LSB,
|
||||
STMPE_IDX_GPDR_LSB,
|
||||
STMPE_IDX_GPEDR_MSB,
|
||||
STMPE_IDX_GPRER_LSB,
|
||||
STMPE_IDX_GPFER_LSB,
|
||||
STMPE_IDX_GPAFR_U_MSB,
|
||||
STMPE_IDX_IEGPIOR_LSB,
|
||||
STMPE_IDX_ISGPIOR_MSB,
|
||||
STMPE_IDX_MAX,
|
||||
};
|
||||
|
||||
|
||||
struct stmpe_variant_info;
|
||||
|
||||
/**
|
||||
* struct stmpe - STMPE MFD structure
|
||||
* @lock: lock protecting I/O operations
|
||||
* @irq_lock: IRQ bus lock
|
||||
* @dev: device, mostly for dev_dbg()
|
||||
* @i2c: i2c client
|
||||
* @variant: the detected STMPE model number
|
||||
* @regs: list of addresses of registers which are at different addresses on
|
||||
* different variants. Indexed by one of STMPE_IDX_*.
|
||||
* @irq_base: starting IRQ number for internal IRQs
|
||||
* @num_gpios: number of gpios, differs for variants
|
||||
* @ier: cache of IER registers for bus_lock
|
||||
* @oldier: cache of IER registers for bus_lock
|
||||
* @pdata: platform data
|
||||
*/
|
||||
struct stmpe {
|
||||
struct mutex lock;
|
||||
struct mutex irq_lock;
|
||||
struct device *dev;
|
||||
struct i2c_client *i2c;
|
||||
enum stmpe_partnum partnum;
|
||||
struct stmpe_variant_info *variant;
|
||||
const u8 *regs;
|
||||
|
||||
int irq_base;
|
||||
int num_gpios;
|
||||
u8 ier[2];
|
||||
u8 oldier[2];
|
||||
struct stmpe_platform_data *pdata;
|
||||
};
|
||||
|
||||
extern int stmpe_reg_write(struct stmpe *stmpe, u8 reg, u8 data);
|
||||
extern int stmpe_reg_read(struct stmpe *stmpe, u8 reg);
|
||||
extern int stmpe_block_read(struct stmpe *stmpe, u8 reg, u8 length,
|
||||
u8 *values);
|
||||
extern int stmpe_block_write(struct stmpe *stmpe, u8 reg, u8 length,
|
||||
const u8 *values);
|
||||
extern int stmpe_set_bits(struct stmpe *stmpe, u8 reg, u8 mask, u8 val);
|
||||
extern int stmpe_set_altfunc(struct stmpe *stmpe, u32 pins,
|
||||
enum stmpe_block block);
|
||||
extern int stmpe_enable(struct stmpe *stmpe, unsigned int blocks);
|
||||
extern int stmpe_disable(struct stmpe *stmpe, unsigned int blocks);
|
||||
|
||||
struct matrix_keymap_data;
|
||||
|
||||
/**
|
||||
* struct stmpe_keypad_platform_data - STMPE keypad platform data
|
||||
* @keymap_data: key map table and size
|
||||
* @debounce_ms: debounce interval, in ms. Maximum is
|
||||
* %STMPE_KEYPAD_MAX_DEBOUNCE.
|
||||
* @scan_count: number of key scanning cycles to confirm key data.
|
||||
* Maximum is %STMPE_KEYPAD_MAX_SCAN_COUNT.
|
||||
* @no_autorepeat: disable key autorepeat
|
||||
*/
|
||||
struct stmpe_keypad_platform_data {
|
||||
struct matrix_keymap_data *keymap_data;
|
||||
unsigned int debounce_ms;
|
||||
unsigned int scan_count;
|
||||
bool no_autorepeat;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct stmpe_gpio_platform_data - STMPE GPIO platform data
|
||||
* @gpio_base: first gpio number assigned. A maximum of
|
||||
* %STMPE_NR_GPIOS GPIOs will be allocated.
|
||||
*/
|
||||
struct stmpe_gpio_platform_data {
|
||||
int gpio_base;
|
||||
void (*setup)(struct stmpe *stmpe, unsigned gpio_base);
|
||||
void (*remove)(struct stmpe *stmpe, unsigned gpio_base);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct stmpe_ts_platform_data - stmpe811 touch screen controller platform
|
||||
* data
|
||||
* @sample_time: ADC converstion time in number of clock.
|
||||
* (0 -> 36 clocks, 1 -> 44 clocks, 2 -> 56 clocks, 3 -> 64 clocks,
|
||||
* 4 -> 80 clocks, 5 -> 96 clocks, 6 -> 144 clocks),
|
||||
* recommended is 4.
|
||||
* @mod_12b: ADC Bit mode (0 -> 10bit ADC, 1 -> 12bit ADC)
|
||||
* @ref_sel: ADC reference source
|
||||
* (0 -> internal reference, 1 -> external reference)
|
||||
* @adc_freq: ADC Clock speed
|
||||
* (0 -> 1.625 MHz, 1 -> 3.25 MHz, 2 || 3 -> 6.5 MHz)
|
||||
* @ave_ctrl: Sample average control
|
||||
* (0 -> 1 sample, 1 -> 2 samples, 2 -> 4 samples, 3 -> 8 samples)
|
||||
* @touch_det_delay: Touch detect interrupt delay
|
||||
* (0 -> 10 us, 1 -> 50 us, 2 -> 100 us, 3 -> 500 us,
|
||||
* 4-> 1 ms, 5 -> 5 ms, 6 -> 10 ms, 7 -> 50 ms)
|
||||
* recommended is 3
|
||||
* @settling: Panel driver settling time
|
||||
* (0 -> 10 us, 1 -> 100 us, 2 -> 500 us, 3 -> 1 ms,
|
||||
* 4 -> 5 ms, 5 -> 10 ms, 6 for 50 ms, 7 -> 100 ms)
|
||||
* recommended is 2
|
||||
* @fraction_z: Length of the fractional part in z
|
||||
* (fraction_z ([0..7]) = Count of the fractional part)
|
||||
* recommended is 7
|
||||
* @i_drive: current limit value of the touchscreen drivers
|
||||
* (0 -> 20 mA typical 35 mA max, 1 -> 50 mA typical 80 mA max)
|
||||
*
|
||||
* */
|
||||
struct stmpe_ts_platform_data {
|
||||
u8 sample_time;
|
||||
u8 mod_12b;
|
||||
u8 ref_sel;
|
||||
u8 adc_freq;
|
||||
u8 ave_ctrl;
|
||||
u8 touch_det_delay;
|
||||
u8 settling;
|
||||
u8 fraction_z;
|
||||
u8 i_drive;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct stmpe_platform_data - STMPE platform data
|
||||
* @id: device id to distinguish between multiple STMPEs on the same board
|
||||
* @blocks: bitmask of blocks to enable (use STMPE_BLOCK_*)
|
||||
* @irq_trigger: IRQ trigger to use for the interrupt to the host
|
||||
* @irq_invert_polarity: IRQ line is connected with reversed polarity
|
||||
* @autosleep: bool to enable/disable stmpe autosleep
|
||||
* @autosleep_timeout: inactivity timeout in milliseconds for autosleep
|
||||
* @irq_base: base IRQ number. %STMPE_NR_IRQS irqs will be used, or
|
||||
* %STMPE_NR_INTERNAL_IRQS if the GPIO driver is not used.
|
||||
* @gpio: GPIO-specific platform data
|
||||
* @keypad: keypad-specific platform data
|
||||
* @ts: touchscreen-specific platform data
|
||||
*/
|
||||
struct stmpe_platform_data {
|
||||
int id;
|
||||
unsigned int blocks;
|
||||
int irq_base;
|
||||
unsigned int irq_trigger;
|
||||
bool irq_invert_polarity;
|
||||
bool autosleep;
|
||||
int autosleep_timeout;
|
||||
|
||||
struct stmpe_gpio_platform_data *gpio;
|
||||
struct stmpe_keypad_platform_data *keypad;
|
||||
struct stmpe_ts_platform_data *ts;
|
||||
};
|
||||
|
||||
#define STMPE_NR_INTERNAL_IRQS 9
|
||||
#define STMPE_INT_GPIO(x) (STMPE_NR_INTERNAL_IRQS + (x))
|
||||
|
||||
#define STMPE_NR_GPIOS 24
|
||||
#define STMPE_NR_IRQS STMPE_INT_GPIO(STMPE_NR_GPIOS)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef __LINUX_MFD_TPS6586X_H
|
||||
#define __LINUX_MFD_TPS6586X_H
|
||||
|
||||
enum {
|
||||
TPS6586X_ID_SM_0,
|
||||
TPS6586X_ID_SM_1,
|
||||
TPS6586X_ID_SM_2,
|
||||
TPS6586X_ID_LDO_0,
|
||||
TPS6586X_ID_LDO_1,
|
||||
TPS6586X_ID_LDO_2,
|
||||
TPS6586X_ID_LDO_3,
|
||||
TPS6586X_ID_LDO_4,
|
||||
TPS6586X_ID_LDO_5,
|
||||
TPS6586X_ID_LDO_6,
|
||||
TPS6586X_ID_LDO_7,
|
||||
TPS6586X_ID_LDO_8,
|
||||
TPS6586X_ID_LDO_9,
|
||||
TPS6586X_ID_LDO_RTC,
|
||||
};
|
||||
|
||||
struct tps6586x_subdev_info {
|
||||
int id;
|
||||
const char *name;
|
||||
void *platform_data;
|
||||
};
|
||||
|
||||
struct tps6586x_platform_data {
|
||||
int num_subdevs;
|
||||
struct tps6586x_subdev_info *subdevs;
|
||||
|
||||
int gpio_base;
|
||||
};
|
||||
|
||||
/*
|
||||
* NOTE: the functions below are not intended for use outside
|
||||
* of the TPS6586X sub-device drivers
|
||||
*/
|
||||
extern int tps6586x_write(struct device *dev, int reg, uint8_t val);
|
||||
extern int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val);
|
||||
extern int tps6586x_read(struct device *dev, int reg, uint8_t *val);
|
||||
extern int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val);
|
||||
extern int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask);
|
||||
extern int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask);
|
||||
extern int tps6586x_update(struct device *dev, int reg, uint8_t val,
|
||||
uint8_t mask);
|
||||
|
||||
#endif /*__LINUX_MFD_TPS6586X_H */
|
||||
@@ -36,6 +36,10 @@
|
||||
#define WM8994_GP_FN_WSEQ_STATUS 16
|
||||
#define WM8994_GP_FN_FIFO_ERROR 17
|
||||
#define WM8994_GP_FN_OPCLK 18
|
||||
#define WM8994_GP_FN_THW 19
|
||||
#define WM8994_GP_FN_DCS_DONE 20
|
||||
#define WM8994_GP_FN_FLL1_OUT 21
|
||||
#define WM8994_GP_FN_FLL2_OUT 22
|
||||
|
||||
#define WM8994_GPN_DIR 0x8000 /* GPN_DIR */
|
||||
#define WM8994_GPN_DIR_MASK 0x8000 /* GPN_DIR */
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define KVM_MINOR 232
|
||||
#define BTRFS_MINOR 234
|
||||
#define AUTOFS_MINOR 235
|
||||
#define MAPPER_CTRL_MINOR 236
|
||||
#define MISC_DYNAMIC_MINOR 255
|
||||
|
||||
struct device;
|
||||
|
||||
@@ -24,12 +24,14 @@ struct mmc_cid {
|
||||
};
|
||||
|
||||
struct mmc_csd {
|
||||
unsigned char structure;
|
||||
unsigned char mmca_vsn;
|
||||
unsigned short cmdclass;
|
||||
unsigned short tacc_clks;
|
||||
unsigned int tacc_ns;
|
||||
unsigned int r2w_factor;
|
||||
unsigned int max_dtr;
|
||||
unsigned int erase_size; /* In sectors */
|
||||
unsigned int read_blkbits;
|
||||
unsigned int write_blkbits;
|
||||
unsigned int capacity;
|
||||
@@ -41,9 +43,16 @@ struct mmc_csd {
|
||||
|
||||
struct mmc_ext_csd {
|
||||
u8 rev;
|
||||
u8 erase_group_def;
|
||||
u8 sec_feature_support;
|
||||
unsigned int sa_timeout; /* Units: 100ns */
|
||||
unsigned int hs_max_dtr;
|
||||
unsigned int sectors;
|
||||
unsigned int hc_erase_size; /* In sectors */
|
||||
unsigned int hc_erase_timeout; /* In milliseconds */
|
||||
unsigned int sec_trim_mult; /* Secure trim multiplier */
|
||||
unsigned int sec_erase_mult; /* Secure erase multiplier */
|
||||
unsigned int trim_timeout; /* In milliseconds */
|
||||
};
|
||||
|
||||
struct sd_scr {
|
||||
@@ -53,6 +62,12 @@ struct sd_scr {
|
||||
#define SD_SCR_BUS_WIDTH_4 (1<<2)
|
||||
};
|
||||
|
||||
struct sd_ssr {
|
||||
unsigned int au; /* In sectors */
|
||||
unsigned int erase_timeout; /* In milliseconds */
|
||||
unsigned int erase_offset; /* In milliseconds */
|
||||
};
|
||||
|
||||
struct sd_switch_caps {
|
||||
unsigned int hs_max_dtr;
|
||||
};
|
||||
@@ -92,6 +107,7 @@ struct mmc_card {
|
||||
#define MMC_TYPE_MMC 0 /* MMC card */
|
||||
#define MMC_TYPE_SD 1 /* SD card */
|
||||
#define MMC_TYPE_SDIO 2 /* SDIO card */
|
||||
#define MMC_TYPE_SD_COMBO 3 /* SD combo (IO+mem) card */
|
||||
unsigned int state; /* (our) card state */
|
||||
#define MMC_STATE_PRESENT (1<<0) /* present in sysfs */
|
||||
#define MMC_STATE_READONLY (1<<1) /* card is read-only */
|
||||
@@ -101,6 +117,13 @@ struct mmc_card {
|
||||
#define MMC_QUIRK_LENIENT_FN0 (1<<0) /* allow SDIO FN0 writes outside of the VS CCCR range */
|
||||
#define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1) /* use func->cur_blksize */
|
||||
/* for byte mode */
|
||||
#define MMC_QUIRK_NONSTD_SDIO (1<<2) /* non-standard SDIO card attached */
|
||||
/* (missing CIA registers) */
|
||||
|
||||
unsigned int erase_size; /* erase size in sectors */
|
||||
unsigned int erase_shift; /* if erase unit is power 2 */
|
||||
unsigned int pref_erase; /* in sectors */
|
||||
u8 erased_byte; /* value of erased bytes */
|
||||
|
||||
u32 raw_cid[4]; /* raw card CID */
|
||||
u32 raw_csd[4]; /* raw card CSD */
|
||||
@@ -109,6 +132,7 @@ struct mmc_card {
|
||||
struct mmc_csd csd; /* card specific */
|
||||
struct mmc_ext_csd ext_csd; /* mmc v4 extended card specific */
|
||||
struct sd_scr scr; /* extra SD information */
|
||||
struct sd_ssr ssr; /* yet more SD information */
|
||||
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */
|
||||
|
||||
unsigned int sdio_funcs; /* number of SDIO functions */
|
||||
|
||||
@@ -92,6 +92,8 @@ struct mmc_command {
|
||||
* actively failing requests
|
||||
*/
|
||||
|
||||
unsigned int erase_timeout; /* in milliseconds */
|
||||
|
||||
struct mmc_data *data; /* data segment associated with cmd */
|
||||
struct mmc_request *mrq; /* associated request */
|
||||
};
|
||||
@@ -134,6 +136,23 @@ extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
|
||||
extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
|
||||
struct mmc_command *, int);
|
||||
|
||||
#define MMC_ERASE_ARG 0x00000000
|
||||
#define MMC_SECURE_ERASE_ARG 0x80000000
|
||||
#define MMC_TRIM_ARG 0x00000001
|
||||
#define MMC_SECURE_TRIM1_ARG 0x80000001
|
||||
#define MMC_SECURE_TRIM2_ARG 0x80008000
|
||||
|
||||
#define MMC_SECURE_ARGS 0x80000000
|
||||
#define MMC_TRIM_ARGS 0x00008001
|
||||
|
||||
extern int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr,
|
||||
unsigned int arg);
|
||||
extern int mmc_can_erase(struct mmc_card *card);
|
||||
extern int mmc_can_trim(struct mmc_card *card);
|
||||
extern int mmc_can_secure_erase_trim(struct mmc_card *card);
|
||||
extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from,
|
||||
unsigned int nr);
|
||||
|
||||
extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *);
|
||||
extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int);
|
||||
|
||||
|
||||
@@ -124,6 +124,7 @@ struct mmc_host {
|
||||
unsigned int f_min;
|
||||
unsigned int f_max;
|
||||
u32 ocr_avail;
|
||||
struct notifier_block pm_notify;
|
||||
|
||||
#define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */
|
||||
#define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
|
||||
@@ -155,6 +156,7 @@ struct mmc_host {
|
||||
#define MMC_CAP_DISABLE (1 << 7) /* Can the host be disabled */
|
||||
#define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */
|
||||
#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */
|
||||
#define MMC_CAP_ERASE (1 << 10) /* Allow erase/trim commands */
|
||||
|
||||
mmc_pm_flag_t pm_caps; /* supported pm features */
|
||||
|
||||
@@ -183,6 +185,7 @@ struct mmc_host {
|
||||
|
||||
/* Only used with MMC_CAP_DISABLE */
|
||||
int enabled; /* host is enabled */
|
||||
int rescan_disable; /* disable card detection */
|
||||
int nesting_cnt; /* "enable" nesting count */
|
||||
int en_dis_recurs; /* detect recursion */
|
||||
unsigned int disable_delay; /* disable delay in msecs */
|
||||
@@ -257,6 +260,7 @@ int mmc_card_can_sleep(struct mmc_host *host);
|
||||
int mmc_host_enable(struct mmc_host *host);
|
||||
int mmc_host_disable(struct mmc_host *host);
|
||||
int mmc_host_lazy_disable(struct mmc_host *host);
|
||||
int mmc_pm_notify(struct notifier_block *notify_block, unsigned long, void *);
|
||||
|
||||
static inline void mmc_set_disable_delay(struct mmc_host *host,
|
||||
unsigned int disable_delay)
|
||||
|
||||
+19
-6
@@ -251,12 +251,21 @@ struct _mmc_csd {
|
||||
* EXT_CSD fields
|
||||
*/
|
||||
|
||||
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
|
||||
#define EXT_CSD_HS_TIMING 185 /* R/W */
|
||||
#define EXT_CSD_CARD_TYPE 196 /* RO */
|
||||
#define EXT_CSD_REV 192 /* RO */
|
||||
#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */
|
||||
#define EXT_CSD_S_A_TIMEOUT 217
|
||||
#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
|
||||
#define EXT_CSD_ERASED_MEM_CONT 181 /* RO */
|
||||
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
|
||||
#define EXT_CSD_HS_TIMING 185 /* R/W */
|
||||
#define EXT_CSD_REV 192 /* RO */
|
||||
#define EXT_CSD_STRUCTURE 194 /* RO */
|
||||
#define EXT_CSD_CARD_TYPE 196 /* RO */
|
||||
#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */
|
||||
#define EXT_CSD_S_A_TIMEOUT 217 /* RO */
|
||||
#define EXT_CSD_ERASE_TIMEOUT_MULT 223 /* RO */
|
||||
#define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */
|
||||
#define EXT_CSD_SEC_TRIM_MULT 229 /* RO */
|
||||
#define EXT_CSD_SEC_ERASE_MULT 230 /* RO */
|
||||
#define EXT_CSD_SEC_FEATURE_SUPPORT 231 /* RO */
|
||||
#define EXT_CSD_TRIM_MULT 232 /* RO */
|
||||
|
||||
/*
|
||||
* EXT_CSD field definitions
|
||||
@@ -274,6 +283,10 @@ struct _mmc_csd {
|
||||
#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
|
||||
#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
|
||||
|
||||
#define EXT_CSD_SEC_ER_EN BIT(0)
|
||||
#define EXT_CSD_SEC_BD_BLK_EN BIT(2)
|
||||
#define EXT_CSD_SEC_GB_CL_EN BIT(4)
|
||||
|
||||
/*
|
||||
* MMC_SWITCH access modes
|
||||
*/
|
||||
|
||||
@@ -21,8 +21,13 @@
|
||||
/* class 10 */
|
||||
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
||||
|
||||
/* class 5 */
|
||||
#define SD_ERASE_WR_BLK_START 32 /* ac [31:0] data addr R1 */
|
||||
#define SD_ERASE_WR_BLK_END 33 /* ac [31:0] data addr R1 */
|
||||
|
||||
/* Application commands */
|
||||
#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
|
||||
#define SD_APP_SD_STATUS 13 /* adtc R1 */
|
||||
#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
|
||||
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
|
||||
#define SD_APP_SEND_SCR 51 /* adtc R1 */
|
||||
|
||||
+221
-67
@@ -31,20 +31,23 @@ static const char __module_cat(name,__LINE__)[] \
|
||||
|
||||
struct kernel_param;
|
||||
|
||||
/* Returns 0, or -errno. arg is in kp->arg. */
|
||||
typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
|
||||
/* Returns length written or -errno. Buffer is 4k (ie. be short!) */
|
||||
typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
|
||||
struct kernel_param_ops {
|
||||
/* Returns 0, or -errno. arg is in kp->arg. */
|
||||
int (*set)(const char *val, const struct kernel_param *kp);
|
||||
/* Returns length written or -errno. Buffer is 4k (ie. be short!) */
|
||||
int (*get)(char *buffer, const struct kernel_param *kp);
|
||||
/* Optional function to free kp->arg when module unloaded. */
|
||||
void (*free)(void *arg);
|
||||
};
|
||||
|
||||
/* Flag bits for kernel_param.flags */
|
||||
#define KPARAM_ISBOOL 2
|
||||
|
||||
struct kernel_param {
|
||||
const char *name;
|
||||
const struct kernel_param_ops *ops;
|
||||
u16 perm;
|
||||
u16 flags;
|
||||
param_set_fn set;
|
||||
param_get_fn get;
|
||||
union {
|
||||
void *arg;
|
||||
const struct kparam_string *str;
|
||||
@@ -63,12 +66,67 @@ struct kparam_array
|
||||
{
|
||||
unsigned int max;
|
||||
unsigned int *num;
|
||||
param_set_fn set;
|
||||
param_get_fn get;
|
||||
const struct kernel_param_ops *ops;
|
||||
unsigned int elemsize;
|
||||
void *elem;
|
||||
};
|
||||
|
||||
/**
|
||||
* module_param - typesafe helper for a module/cmdline parameter
|
||||
* @value: the variable to alter, and exposed parameter name.
|
||||
* @type: the type of the parameter
|
||||
* @perm: visibility in sysfs.
|
||||
*
|
||||
* @value becomes the module parameter, or (prefixed by KBUILD_MODNAME and a
|
||||
* ".") the kernel commandline parameter. Note that - is changed to _, so
|
||||
* the user can use "foo-bar=1" even for variable "foo_bar".
|
||||
*
|
||||
* @perm is 0 if the the variable is not to appear in sysfs, or 0444
|
||||
* for world-readable, 0644 for root-writable, etc. Note that if it
|
||||
* is writable, you may need to use kparam_block_sysfs_write() around
|
||||
* accesses (esp. charp, which can be kfreed when it changes).
|
||||
*
|
||||
* The @type is simply pasted to refer to a param_ops_##type and a
|
||||
* param_check_##type: for convenience many standard types are provided but
|
||||
* you can create your own by defining those variables.
|
||||
*
|
||||
* Standard types are:
|
||||
* byte, short, ushort, int, uint, long, ulong
|
||||
* charp: a character pointer
|
||||
* bool: a bool, values 0/1, y/n, Y/N.
|
||||
* invbool: the above, only sense-reversed (N = true).
|
||||
*/
|
||||
#define module_param(name, type, perm) \
|
||||
module_param_named(name, name, type, perm)
|
||||
|
||||
/**
|
||||
* module_param_named - typesafe helper for a renamed module/cmdline parameter
|
||||
* @name: a valid C identifier which is the parameter name.
|
||||
* @value: the actual lvalue to alter.
|
||||
* @type: the type of the parameter
|
||||
* @perm: visibility in sysfs.
|
||||
*
|
||||
* Usually it's a good idea to have variable names and user-exposed names the
|
||||
* same, but that's harder if the variable must be non-static or is inside a
|
||||
* structure. This allows exposure under a different name.
|
||||
*/
|
||||
#define module_param_named(name, value, type, perm) \
|
||||
param_check_##type(name, &(value)); \
|
||||
module_param_cb(name, ¶m_ops_##type, &value, perm); \
|
||||
__MODULE_PARM_TYPE(name, #type)
|
||||
|
||||
/**
|
||||
* module_param_cb - general callback for a module/cmdline parameter
|
||||
* @name: a valid C identifier which is the parameter name.
|
||||
* @ops: the set & get operations for this parameter.
|
||||
* @perm: visibility in sysfs.
|
||||
*
|
||||
* The ops can have NULL set or get functions.
|
||||
*/
|
||||
#define module_param_cb(name, ops, arg, perm) \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, \
|
||||
name, ops, arg, __same_type((arg), bool *), perm)
|
||||
|
||||
/* On alpha, ia64 and ppc64 relocations to global data cannot go into
|
||||
read-only sections (which is part of respective UNIX ABI on these
|
||||
platforms). So 'const' makes no sense and even causes compile failures
|
||||
@@ -80,10 +138,8 @@ struct kparam_array
|
||||
#endif
|
||||
|
||||
/* This is the fundamental function for registering boot/module
|
||||
parameters. perm sets the visibility in sysfs: 000 means it's
|
||||
not there, read bits mean it's readable, write bits mean it's
|
||||
writable. */
|
||||
#define __module_param_call(prefix, name, set, get, arg, isbool, perm) \
|
||||
parameters. */
|
||||
#define __module_param_call(prefix, name, ops, arg, isbool, perm) \
|
||||
/* Default value instead of permissions? */ \
|
||||
static int __param_perm_check_##name __attribute__((unused)) = \
|
||||
BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \
|
||||
@@ -92,31 +148,87 @@ struct kparam_array
|
||||
static struct kernel_param __moduleparam_const __param_##name \
|
||||
__used \
|
||||
__attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
|
||||
= { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \
|
||||
set, get, { arg } }
|
||||
= { __param_str_##name, ops, perm, isbool ? KPARAM_ISBOOL : 0, \
|
||||
{ arg } }
|
||||
|
||||
#define module_param_call(name, set, get, arg, perm) \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, \
|
||||
name, set, get, arg, \
|
||||
__same_type(*(arg), bool), perm)
|
||||
/* Obsolete - use module_param_cb() */
|
||||
#define module_param_call(name, set, get, arg, perm) \
|
||||
static struct kernel_param_ops __param_ops_##name = \
|
||||
{ (void *)set, (void *)get }; \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, \
|
||||
name, &__param_ops_##name, arg, \
|
||||
__same_type(arg, bool *), \
|
||||
(perm) + sizeof(__check_old_set_param(set))*0)
|
||||
|
||||
/* Helper functions: type is byte, short, ushort, int, uint, long,
|
||||
ulong, charp, bool or invbool, or XXX if you define param_get_XXX,
|
||||
param_set_XXX and param_check_XXX. */
|
||||
#define module_param_named(name, value, type, perm) \
|
||||
param_check_##type(name, &(value)); \
|
||||
module_param_call(name, param_set_##type, param_get_##type, &value, perm); \
|
||||
__MODULE_PARM_TYPE(name, #type)
|
||||
/* We don't get oldget: it's often a new-style param_get_uint, etc. */
|
||||
static inline int
|
||||
__check_old_set_param(int (*oldset)(const char *, struct kernel_param *))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define module_param(name, type, perm) \
|
||||
module_param_named(name, name, type, perm)
|
||||
/**
|
||||
* kparam_block_sysfs_write - make sure a parameter isn't written via sysfs.
|
||||
* @name: the name of the parameter
|
||||
*
|
||||
* There's no point blocking write on a paramter that isn't writable via sysfs!
|
||||
*/
|
||||
#define kparam_block_sysfs_write(name) \
|
||||
do { \
|
||||
BUG_ON(!(__param_##name.perm & 0222)); \
|
||||
__kernel_param_lock(); \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* kparam_unblock_sysfs_write - allows sysfs to write to a parameter again.
|
||||
* @name: the name of the parameter
|
||||
*/
|
||||
#define kparam_unblock_sysfs_write(name) \
|
||||
do { \
|
||||
BUG_ON(!(__param_##name.perm & 0222)); \
|
||||
__kernel_param_unlock(); \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* kparam_block_sysfs_read - make sure a parameter isn't read via sysfs.
|
||||
* @name: the name of the parameter
|
||||
*
|
||||
* This also blocks sysfs writes.
|
||||
*/
|
||||
#define kparam_block_sysfs_read(name) \
|
||||
do { \
|
||||
BUG_ON(!(__param_##name.perm & 0444)); \
|
||||
__kernel_param_lock(); \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* kparam_unblock_sysfs_read - allows sysfs to read a parameter again.
|
||||
* @name: the name of the parameter
|
||||
*/
|
||||
#define kparam_unblock_sysfs_read(name) \
|
||||
do { \
|
||||
BUG_ON(!(__param_##name.perm & 0444)); \
|
||||
__kernel_param_unlock(); \
|
||||
} while (0)
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
extern void __kernel_param_lock(void);
|
||||
extern void __kernel_param_unlock(void);
|
||||
#else
|
||||
static inline void __kernel_param_lock(void)
|
||||
{
|
||||
}
|
||||
static inline void __kernel_param_unlock(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef MODULE
|
||||
/**
|
||||
* core_param - define a historical core kernel parameter.
|
||||
* @name: the name of the cmdline and sysfs parameter (often the same as var)
|
||||
* @var: the variable
|
||||
* @type: the type (for param_set_##type and param_get_##type)
|
||||
* @type: the type of the parameter
|
||||
* @perm: visibility in sysfs
|
||||
*
|
||||
* core_param is just like module_param(), but cannot be modular and
|
||||
@@ -126,23 +238,32 @@ struct kparam_array
|
||||
*/
|
||||
#define core_param(name, var, type, perm) \
|
||||
param_check_##type(name, &(var)); \
|
||||
__module_param_call("", name, param_set_##type, param_get_##type, \
|
||||
__module_param_call("", name, ¶m_ops_##type, \
|
||||
&var, __same_type(var, bool), perm)
|
||||
#endif /* !MODULE */
|
||||
|
||||
/* Actually copy string: maxlen param is usually sizeof(string). */
|
||||
/**
|
||||
* module_param_string - a char array parameter
|
||||
* @name: the name of the parameter
|
||||
* @string: the string variable
|
||||
* @len: the maximum length of the string, incl. terminator
|
||||
* @perm: visibility in sysfs.
|
||||
*
|
||||
* This actually copies the string when it's set (unlike type charp).
|
||||
* @len is usually just sizeof(string).
|
||||
*/
|
||||
#define module_param_string(name, string, len, perm) \
|
||||
static const struct kparam_string __param_string_##name \
|
||||
= { len, string }; \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, name, \
|
||||
param_set_copystring, param_get_string, \
|
||||
¶m_ops_string, \
|
||||
.str = &__param_string_##name, 0, perm); \
|
||||
__MODULE_PARM_TYPE(name, "string")
|
||||
|
||||
/* Called on module insert or kernel boot */
|
||||
extern int parse_args(const char *name,
|
||||
char *args,
|
||||
struct kernel_param *params,
|
||||
const struct kernel_param *params,
|
||||
unsigned num,
|
||||
int (*unknown)(char *param, char *val));
|
||||
|
||||
@@ -162,72 +283,105 @@ static inline void destroy_params(const struct kernel_param *params,
|
||||
#define __param_check(name, p, type) \
|
||||
static inline type *__check_##name(void) { return(p); }
|
||||
|
||||
extern int param_set_byte(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_byte(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_byte;
|
||||
extern int param_set_byte(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_byte(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_byte(name, p) __param_check(name, p, unsigned char)
|
||||
|
||||
extern int param_set_short(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_short(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_short;
|
||||
extern int param_set_short(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_short(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_short(name, p) __param_check(name, p, short)
|
||||
|
||||
extern int param_set_ushort(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_ushort(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_ushort;
|
||||
extern int param_set_ushort(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_ushort(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_ushort(name, p) __param_check(name, p, unsigned short)
|
||||
|
||||
extern int param_set_int(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_int(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_int;
|
||||
extern int param_set_int(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_int(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_int(name, p) __param_check(name, p, int)
|
||||
|
||||
extern int param_set_uint(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_uint(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_uint;
|
||||
extern int param_set_uint(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_uint(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_uint(name, p) __param_check(name, p, unsigned int)
|
||||
|
||||
extern int param_set_long(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_long(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_long;
|
||||
extern int param_set_long(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_long(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_long(name, p) __param_check(name, p, long)
|
||||
|
||||
extern int param_set_ulong(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_ulong(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_ulong;
|
||||
extern int param_set_ulong(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_ulong(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_ulong(name, p) __param_check(name, p, unsigned long)
|
||||
|
||||
extern int param_set_charp(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_charp(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_charp;
|
||||
extern int param_set_charp(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_charp(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_charp(name, p) __param_check(name, p, char *)
|
||||
|
||||
/* For historical reasons "bool" parameters can be (unsigned) "int". */
|
||||
extern int param_set_bool(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_bool(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_bool;
|
||||
extern int param_set_bool(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_bool(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_bool(name, p) \
|
||||
static inline void __check_##name(void) \
|
||||
{ \
|
||||
BUILD_BUG_ON(!__same_type(*(p), bool) && \
|
||||
!__same_type(*(p), unsigned int) && \
|
||||
!__same_type(*(p), int)); \
|
||||
BUILD_BUG_ON(!__same_type((p), bool *) && \
|
||||
!__same_type((p), unsigned int *) && \
|
||||
!__same_type((p), int *)); \
|
||||
}
|
||||
|
||||
extern int param_set_invbool(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_invbool(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_invbool;
|
||||
extern int param_set_invbool(const char *val, const struct kernel_param *kp);
|
||||
extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
|
||||
#define param_check_invbool(name, p) __param_check(name, p, bool)
|
||||
|
||||
/* Comma-separated array: *nump is set to number they actually specified. */
|
||||
/**
|
||||
* module_param_array - a parameter which is an array of some type
|
||||
* @name: the name of the array variable
|
||||
* @type: the type, as per module_param()
|
||||
* @nump: optional pointer filled in with the number written
|
||||
* @perm: visibility in sysfs
|
||||
*
|
||||
* Input and output are as comma-separated values. Commas inside values
|
||||
* don't work properly (eg. an array of charp).
|
||||
*
|
||||
* ARRAY_SIZE(@name) is used to determine the number of elements in the
|
||||
* array, so the definition must be visible.
|
||||
*/
|
||||
#define module_param_array(name, type, nump, perm) \
|
||||
module_param_array_named(name, name, type, nump, perm)
|
||||
|
||||
/**
|
||||
* module_param_array_named - renamed parameter which is an array of some type
|
||||
* @name: a valid C identifier which is the parameter name
|
||||
* @array: the name of the array variable
|
||||
* @type: the type, as per module_param()
|
||||
* @nump: optional pointer filled in with the number written
|
||||
* @perm: visibility in sysfs
|
||||
*
|
||||
* This exposes a different name than the actual variable name. See
|
||||
* module_param_named() for why this might be necessary.
|
||||
*/
|
||||
#define module_param_array_named(name, array, type, nump, perm) \
|
||||
static const struct kparam_array __param_arr_##name \
|
||||
= { ARRAY_SIZE(array), nump, param_set_##type, param_get_##type,\
|
||||
= { ARRAY_SIZE(array), nump, ¶m_ops_##type, \
|
||||
sizeof(array[0]), array }; \
|
||||
__module_param_call(MODULE_PARAM_PREFIX, name, \
|
||||
param_array_set, param_array_get, \
|
||||
¶m_array_ops, \
|
||||
.arr = &__param_arr_##name, \
|
||||
__same_type(array[0], bool), perm); \
|
||||
__MODULE_PARM_TYPE(name, "array of " #type)
|
||||
|
||||
#define module_param_array(name, type, nump, perm) \
|
||||
module_param_array_named(name, name, type, nump, perm)
|
||||
extern struct kernel_param_ops param_array_ops;
|
||||
|
||||
extern int param_array_set(const char *val, struct kernel_param *kp);
|
||||
extern int param_array_get(char *buffer, struct kernel_param *kp);
|
||||
|
||||
extern int param_set_copystring(const char *val, struct kernel_param *kp);
|
||||
extern int param_get_string(char *buffer, struct kernel_param *kp);
|
||||
extern struct kernel_param_ops param_ops_string;
|
||||
extern int param_set_copystring(const char *val, const struct kernel_param *);
|
||||
extern int param_get_string(char *buffer, const struct kernel_param *kp);
|
||||
|
||||
/* for exporting parameters in /sys/parameters */
|
||||
|
||||
@@ -235,13 +389,13 @@ struct module;
|
||||
|
||||
#if defined(CONFIG_SYSFS) && defined(CONFIG_MODULES)
|
||||
extern int module_param_sysfs_setup(struct module *mod,
|
||||
struct kernel_param *kparam,
|
||||
const struct kernel_param *kparam,
|
||||
unsigned int num_params);
|
||||
|
||||
extern void module_param_sysfs_remove(struct module *mod);
|
||||
#else
|
||||
static inline int module_param_sysfs_setup(struct module *mod,
|
||||
struct kernel_param *kparam,
|
||||
const struct kernel_param *kparam,
|
||||
unsigned int num_params)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -27,7 +27,6 @@ struct mnt_namespace;
|
||||
#define MNT_NODIRATIME 0x10
|
||||
#define MNT_RELATIME 0x20
|
||||
#define MNT_READONLY 0x40 /* does the user want this to be r/o? */
|
||||
#define MNT_STRICTATIME 0x80
|
||||
|
||||
#define MNT_SHRINKABLE 0x100
|
||||
#define MNT_WRITE_HOLD 0x200
|
||||
|
||||
@@ -122,7 +122,7 @@ static inline int netpoll_tx_running(struct net_device *dev)
|
||||
}
|
||||
|
||||
#else
|
||||
static inline int netpoll_rx(struct sk_buff *skb)
|
||||
static inline bool netpoll_rx(struct sk_buff *skb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,20 +1,6 @@
|
||||
#ifndef _LINUX_OF_DEVICE_H
|
||||
#define _LINUX_OF_DEVICE_H
|
||||
|
||||
/*
|
||||
* The of_device *was* a kind of "base class" that was a superset of
|
||||
* struct device for use by devices attached to an OF node and probed
|
||||
* using OF properties. However, the important bit of OF-style
|
||||
* probing, namely the device node pointer, has been moved into the
|
||||
* common struct device when CONFIG_OF is set to make OF-style probing
|
||||
* available to all bus types. So now, just make of_device and
|
||||
* platform_device equivalent so that current of_platform bus users
|
||||
* can be transparently migrated over to using the platform bus.
|
||||
*
|
||||
* This line will go away once all references to of_device are removed
|
||||
* from the kernel.
|
||||
*/
|
||||
#define of_device platform_device
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of_platform.h> /* temporary until merge */
|
||||
|
||||
@@ -23,8 +9,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
#define to_of_device(d) container_of(d, struct of_device, dev)
|
||||
|
||||
extern const struct of_device_id *of_match_device(
|
||||
const struct of_device_id *matches, const struct device *dev);
|
||||
extern void of_device_make_bus_id(struct device *dev);
|
||||
|
||||
@@ -19,9 +19,17 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
/*
|
||||
* An of_platform_driver driver is attached to a basic of_device on
|
||||
* the "platform bus" (platform_bus_type).
|
||||
/**
|
||||
* of_platform_driver - Legacy of-aware driver for platform devices.
|
||||
*
|
||||
* An of_platform_driver driver is attached to a basic platform_device on
|
||||
* ether the "platform bus" (platform_bus_type), or the ibm ebus
|
||||
* (ibmebus_bus_type).
|
||||
*
|
||||
* of_platform_driver is being phased out when used with the platform_bus_type,
|
||||
* and regular platform_drivers should be used instead. When the transition
|
||||
* is complete, only ibmebus will be using this structure, and the
|
||||
* platform_driver member of this structure will be removed.
|
||||
*/
|
||||
struct of_platform_driver
|
||||
{
|
||||
|
||||
@@ -66,6 +66,8 @@ static inline void oom_killer_enable(void)
|
||||
extern unsigned long badness(struct task_struct *p, struct mem_cgroup *mem,
|
||||
const nodemask_t *nodemask, unsigned long uptime);
|
||||
|
||||
extern struct task_struct *find_lock_task_mm(struct task_struct *p);
|
||||
|
||||
/* sysctls */
|
||||
extern int sysctl_oom_dump_tasks;
|
||||
extern int sysctl_oom_kill_allocating_task;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/hardirq.h> /* for in_interrupt() */
|
||||
#include <linux/hugetlb_inline.h>
|
||||
|
||||
/*
|
||||
* Bits in mapping->flags. The lower __GFP_BITS_SHIFT bits are the page
|
||||
@@ -281,10 +282,16 @@ static inline loff_t page_offset(struct page *page)
|
||||
return ((loff_t)page->index) << PAGE_CACHE_SHIFT;
|
||||
}
|
||||
|
||||
extern pgoff_t linear_hugepage_index(struct vm_area_struct *vma,
|
||||
unsigned long address);
|
||||
|
||||
static inline pgoff_t linear_page_index(struct vm_area_struct *vma,
|
||||
unsigned long address)
|
||||
{
|
||||
pgoff_t pgoff = (address - vma->vm_start) >> PAGE_SHIFT;
|
||||
pgoff_t pgoff;
|
||||
if (unlikely(is_vm_hugetlb_page(vma)))
|
||||
return linear_hugepage_index(vma, address);
|
||||
pgoff = (address - vma->vm_start) >> PAGE_SHIFT;
|
||||
pgoff += vma->vm_pgoff;
|
||||
return pgoff >> (PAGE_CACHE_SHIFT - PAGE_SHIFT);
|
||||
}
|
||||
|
||||
@@ -12,4 +12,9 @@ struct path {
|
||||
extern void path_get(struct path *);
|
||||
extern void path_put(struct path *);
|
||||
|
||||
static inline int path_equal(const struct path *path1, const struct path *path2)
|
||||
{
|
||||
return path1->mnt == path2->mnt && path1->dentry == path2->dentry;
|
||||
}
|
||||
|
||||
#endif /* _LINUX_PATH_H */
|
||||
|
||||
@@ -48,15 +48,6 @@
|
||||
#define POISON_FREE 0x6b /* for use-after-free poisoning */
|
||||
#define POISON_END 0xa5 /* end-byte of poisoning */
|
||||
|
||||
/********** mm/hugetlb.c **********/
|
||||
/*
|
||||
* Private mappings of hugetlb pages use this poisoned value for
|
||||
* page->mapping. The core VM should not be doing anything with this mapping
|
||||
* but futex requires the existence of some page->mapping value even though it
|
||||
* is unused if PAGE_MAPPING_ANON is set.
|
||||
*/
|
||||
#define HUGETLB_POISON ((void *)(0x00300300 + POISON_POINTER_DELTA + PAGE_MAPPING_ANON))
|
||||
|
||||
/********** arch/$ARCH/mm/init.c **********/
|
||||
#define POISON_FREE_INITMEM 0xcc
|
||||
|
||||
|
||||
@@ -62,7 +62,9 @@ extern const char raid6_empty_zero_page[PAGE_SIZE];
|
||||
#define disable_kernel_altivec()
|
||||
|
||||
#define EXPORT_SYMBOL(sym)
|
||||
#define EXPORT_SYMBOL_GPL(sym)
|
||||
#define MODULE_LICENSE(licence)
|
||||
#define MODULE_DESCRIPTION(desc)
|
||||
#define subsys_initcall(x)
|
||||
#define module_exit(x)
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) ST-Ericsson SA 2010
|
||||
*
|
||||
* License Terms: GNU General Public License v2
|
||||
*
|
||||
* Author: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_AB8500_REGULATOR_H
|
||||
#define __LINUX_MFD_AB8500_REGULATOR_H
|
||||
|
||||
/* AB8500 regulators */
|
||||
#define AB8500_LDO_AUX1 0
|
||||
#define AB8500_LDO_AUX2 1
|
||||
#define AB8500_LDO_AUX3 2
|
||||
#define AB8500_LDO_INTCORE 3
|
||||
#define AB8500_LDO_TVOUT 4
|
||||
#define AB8500_LDO_AUDIO 5
|
||||
#define AB8500_LDO_ANAMIC1 6
|
||||
#define AB8500_LDO_ANAMIC2 7
|
||||
#define AB8500_LDO_DMIC 8
|
||||
#define AB8500_LDO_ANA 9
|
||||
|
||||
#endif
|
||||
@@ -168,6 +168,11 @@ void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned lon
|
||||
void page_add_file_rmap(struct page *);
|
||||
void page_remove_rmap(struct page *);
|
||||
|
||||
void hugepage_add_anon_rmap(struct page *, struct vm_area_struct *,
|
||||
unsigned long);
|
||||
void hugepage_add_new_anon_rmap(struct page *, struct vm_area_struct *,
|
||||
unsigned long);
|
||||
|
||||
static inline void page_dup_rmap(struct page *page)
|
||||
{
|
||||
atomic_inc(&page->_mapcount);
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#ifndef _S3C_ADC_BATTERY_H
|
||||
#define _S3C_ADC_BATTERY_H
|
||||
|
||||
struct s3c_adc_bat_thresh {
|
||||
int volt; /* mV */
|
||||
int cur; /* mA */
|
||||
int level; /* percent */
|
||||
};
|
||||
|
||||
struct s3c_adc_bat_pdata {
|
||||
int (*init)(void);
|
||||
void (*exit)(void);
|
||||
void (*enable_charger)(void);
|
||||
void (*disable_charger)(void);
|
||||
|
||||
int gpio_charge_finished;
|
||||
|
||||
const struct s3c_adc_bat_thresh *lut_noac;
|
||||
unsigned int lut_noac_cnt;
|
||||
const struct s3c_adc_bat_thresh *lut_acin;
|
||||
unsigned int lut_acin_cnt;
|
||||
|
||||
const unsigned int volt_channel;
|
||||
const unsigned int current_channel;
|
||||
const unsigned int backup_volt_channel;
|
||||
|
||||
const unsigned int volt_mult;
|
||||
const unsigned int current_mult;
|
||||
const unsigned int backup_volt_mult;
|
||||
const unsigned int internal_impedance;
|
||||
|
||||
const unsigned int backup_volt_max;
|
||||
const unsigned int backup_volt_min;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -186,6 +186,9 @@
|
||||
#define PORT_ALTERA_JTAGUART 91
|
||||
#define PORT_ALTERA_UART 92
|
||||
|
||||
/* SH-SCI */
|
||||
#define PORT_SCIFB 93
|
||||
|
||||
/* MAX3107 */
|
||||
#define PORT_MAX3107 94
|
||||
|
||||
|
||||
+18
-5
@@ -25,6 +25,10 @@ struct clk {
|
||||
int id;
|
||||
|
||||
struct clk *parent;
|
||||
struct clk **parent_table; /* list of parents to */
|
||||
unsigned short parent_num; /* choose between */
|
||||
unsigned char src_shift; /* source clock field in the */
|
||||
unsigned char src_width; /* configuration register */
|
||||
struct clk_ops *ops;
|
||||
|
||||
struct list_head children;
|
||||
@@ -138,13 +142,22 @@ int sh_clk_div4_enable_register(struct clk *clks, int nr,
|
||||
int sh_clk_div4_reparent_register(struct clk *clks, int nr,
|
||||
struct clk_div4_table *table);
|
||||
|
||||
#define SH_CLK_DIV6(_parent, _reg, _flags) \
|
||||
{ \
|
||||
.parent = _parent, \
|
||||
.enable_reg = (void __iomem *)_reg, \
|
||||
.flags = _flags, \
|
||||
#define SH_CLK_DIV6_EXT(_parent, _reg, _flags, _parents, \
|
||||
_num_parents, _src_shift, _src_width) \
|
||||
{ \
|
||||
.parent = _parent, \
|
||||
.enable_reg = (void __iomem *)_reg, \
|
||||
.flags = _flags, \
|
||||
.parent_table = _parents, \
|
||||
.parent_num = _num_parents, \
|
||||
.src_shift = _src_shift, \
|
||||
.src_width = _src_width, \
|
||||
}
|
||||
|
||||
#define SH_CLK_DIV6(_parent, _reg, _flags) \
|
||||
SH_CLK_DIV6_EXT(_parent, _reg, _flags, NULL, 0, 0, 0)
|
||||
|
||||
int sh_clk_div6_register(struct clk *clks, int nr);
|
||||
int sh_clk_div6_reparent_register(struct clk *clks, int nr);
|
||||
|
||||
#endif /* __SH_CLOCK_H */
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
#include <trace/events/kmem.h>
|
||||
|
||||
#ifndef ARCH_KMALLOC_MINALIGN
|
||||
/*
|
||||
* Enforce a minimum alignment for the kmalloc caches.
|
||||
* Usually, the kmalloc caches are cache_line_size() aligned, except when
|
||||
@@ -27,6 +26,9 @@
|
||||
* ARCH_KMALLOC_MINALIGN allows that.
|
||||
* Note that increasing this value may disable some debug features.
|
||||
*/
|
||||
#ifdef ARCH_DMA_MINALIGN
|
||||
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
|
||||
#else
|
||||
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#ifndef __LINUX_SLOB_DEF_H
|
||||
#define __LINUX_SLOB_DEF_H
|
||||
|
||||
#ifndef ARCH_KMALLOC_MINALIGN
|
||||
#ifdef ARCH_DMA_MINALIGN
|
||||
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
|
||||
#else
|
||||
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -106,15 +106,17 @@ struct kmem_cache {
|
||||
/*
|
||||
* Kmalloc subsystem.
|
||||
*/
|
||||
#if defined(ARCH_KMALLOC_MINALIGN) && ARCH_KMALLOC_MINALIGN > 8
|
||||
#define KMALLOC_MIN_SIZE ARCH_KMALLOC_MINALIGN
|
||||
#if defined(ARCH_DMA_MINALIGN) && ARCH_DMA_MINALIGN > 8
|
||||
#define KMALLOC_MIN_SIZE ARCH_DMA_MINALIGN
|
||||
#else
|
||||
#define KMALLOC_MIN_SIZE 8
|
||||
#endif
|
||||
|
||||
#define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE)
|
||||
|
||||
#ifndef ARCH_KMALLOC_MINALIGN
|
||||
#ifdef ARCH_DMA_MINALIGN
|
||||
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
|
||||
#else
|
||||
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ struct max7301 {
|
||||
struct mutex lock;
|
||||
u8 port_config[8]; /* field 0 is unused */
|
||||
u32 out_level; /* cached output levels */
|
||||
u32 input_pullup_active;
|
||||
struct gpio_chip chip;
|
||||
struct device *dev;
|
||||
int (*write)(struct device *dev, unsigned int reg, unsigned int val);
|
||||
@@ -20,6 +21,13 @@ struct max7301 {
|
||||
struct max7301_platform_data {
|
||||
/* number assigned to the first GPIO */
|
||||
unsigned base;
|
||||
/*
|
||||
* bitmask controlling the pullup configuration,
|
||||
*
|
||||
* _note_ the 4 lowest bits are unused, because the first 4
|
||||
* ports of the controller are not used, too.
|
||||
*/
|
||||
u32 input_pullup_active;
|
||||
};
|
||||
|
||||
extern int __max730x_remove(struct device *dev);
|
||||
|
||||
@@ -244,8 +244,7 @@ extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem,
|
||||
extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
|
||||
gfp_t gfp_mask, bool noswap,
|
||||
unsigned int swappiness,
|
||||
struct zone *zone,
|
||||
int nid);
|
||||
struct zone *zone);
|
||||
extern int __isolate_lru_page(struct page *page, int mode, int file);
|
||||
extern unsigned long shrink_all_memory(unsigned long nr_pages);
|
||||
extern int vm_swappiness;
|
||||
|
||||
@@ -148,6 +148,17 @@ struct v7_super_block {
|
||||
char s_fname[6]; /* file system name */
|
||||
char s_fpack[6]; /* file system pack name */
|
||||
};
|
||||
/* Constants to aid sanity checking */
|
||||
/* This is not a hard limit, nor enforced by v7 kernel. It's actually just
|
||||
* the limit used by Seventh Edition's ls, though is high enough to assume
|
||||
* that no reasonable file system would have that much entries in root
|
||||
* directory. Thus, if we see anything higher, we just probably got the
|
||||
* endiannes wrong. */
|
||||
#define V7_NFILES 1024
|
||||
/* The disk addresses are three-byte (despite direct block addresses being
|
||||
* aligned word-wise in inode). If the most significant byte is non-zero,
|
||||
* something is most likely wrong (not a filesystem, bad bytesex). */
|
||||
#define V7_MAXSIZE 0x00ffffff
|
||||
|
||||
/* Coherent super-block data on disk */
|
||||
#define COH_NICINOD 100 /* number of inode cache entries */
|
||||
|
||||
@@ -38,7 +38,7 @@ extern struct timezone sys_tz;
|
||||
#define NSEC_PER_MSEC 1000000L
|
||||
#define USEC_PER_SEC 1000000L
|
||||
#define NSEC_PER_SEC 1000000000L
|
||||
#define FSEC_PER_SEC 1000000000000000L
|
||||
#define FSEC_PER_SEC 1000000000000000LL
|
||||
|
||||
#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#ifndef LINUX_VGA_H
|
||||
#define LINUX_VGA_H
|
||||
|
||||
#include <asm/vga.h>
|
||||
|
||||
/* Legacy VGA regions */
|
||||
#define VGA_RSRC_NONE 0x00
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _LINUX_VIRTIO_9P_H
|
||||
/* This header is BSD licensed so anyone can use the definitions to implement
|
||||
* compatible drivers/servers. */
|
||||
#include <linux/types.h>
|
||||
#include <linux/virtio_ids.h>
|
||||
#include <linux/virtio_config.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
struct vm_area_struct; /* vma defining user mapping in mm_types.h */
|
||||
|
||||
extern bool vmap_lazy_unmap;
|
||||
|
||||
/* bits in flags of vmalloc's vm_struct below */
|
||||
#define VM_IOREMAP 0x00000001 /* ioremap() and friends */
|
||||
#define VM_ALLOC 0x00000002 /* vmalloc() */
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef _LINUX_WM97XX_BAT_H
|
||||
#define _LINUX_WM97XX_BAT_H
|
||||
|
||||
#include <linux/wm97xx.h>
|
||||
|
||||
#warning This file will be removed soon, use wm97xx.h instead!
|
||||
|
||||
#define wm97xx_batt_info wm97xx_batt_pdata
|
||||
|
||||
#ifdef CONFIG_BATTERY_WM97XX
|
||||
void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data);
|
||||
#else
|
||||
static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -124,8 +124,9 @@ struct ctl_table;
|
||||
int dirty_writeback_centisecs_handler(struct ctl_table *, int,
|
||||
void __user *, size_t *, loff_t *);
|
||||
|
||||
void get_dirty_limits(unsigned long *pbackground, unsigned long *pdirty,
|
||||
unsigned long *pbdi_dirty, struct backing_dev_info *bdi);
|
||||
void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty);
|
||||
unsigned long bdi_dirty_limit(struct backing_dev_info *bdi,
|
||||
unsigned long dirty);
|
||||
|
||||
void page_writeback_init(void);
|
||||
void balance_dirty_pages_ratelimited_nr(struct address_space *mapping,
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
#define L2CAP_DEFAULT_FLUSH_TO 0xffff
|
||||
#define L2CAP_DEFAULT_TX_WINDOW 63
|
||||
#define L2CAP_DEFAULT_MAX_TX 3
|
||||
#define L2CAP_DEFAULT_RETRANS_TO 1000 /* 1 second */
|
||||
#define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */
|
||||
#define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */
|
||||
#define L2CAP_DEFAULT_MAX_PDU_SIZE 672
|
||||
#define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */
|
||||
#define L2CAP_DEFAULT_ACK_TO 200
|
||||
#define L2CAP_LOCAL_BUSY_TRIES 12
|
||||
|
||||
|
||||
+3
-1
@@ -195,7 +195,8 @@ struct sock_common {
|
||||
* @sk_priority: %SO_PRIORITY setting
|
||||
* @sk_type: socket type (%SOCK_STREAM, etc)
|
||||
* @sk_protocol: which protocol this socket belongs in this network family
|
||||
* @sk_peercred: %SO_PEERCRED setting
|
||||
* @sk_peer_pid: &struct pid for this socket's peer
|
||||
* @sk_peer_cred: %SO_PEERCRED setting
|
||||
* @sk_rcvlowat: %SO_RCVLOWAT setting
|
||||
* @sk_rcvtimeo: %SO_RCVTIMEO setting
|
||||
* @sk_sndtimeo: %SO_SNDTIMEO setting
|
||||
@@ -211,6 +212,7 @@ struct sock_common {
|
||||
* @sk_send_head: front of stuff to transmit
|
||||
* @sk_security: used by security modules
|
||||
* @sk_mark: generic packet mark
|
||||
* @sk_classid: this socket's cgroup classid
|
||||
* @sk_write_pending: a write to stream socket waits to start
|
||||
* @sk_state_change: callback to indicate change in the state of the sock
|
||||
* @sk_data_ready: callback to indicate there is data to be processed
|
||||
|
||||
+4
-4
@@ -151,10 +151,10 @@ struct scsi_cmnd;
|
||||
|
||||
/* defined in T10 SCSI Primary Commands-2 (SPC2) */
|
||||
struct scsi_varlen_cdb_hdr {
|
||||
u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
|
||||
u8 control;
|
||||
u8 misc[5];
|
||||
u8 additional_cdb_length; /* total cdb length - 8 */
|
||||
__u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
|
||||
__u8 control;
|
||||
__u8 misc[5];
|
||||
__u8 additional_cdb_length; /* total cdb length - 8 */
|
||||
__be16 service_action;
|
||||
/* service specific data follows */
|
||||
};
|
||||
|
||||
@@ -105,8 +105,8 @@ struct scsi_nl_host_vendor_msg {
|
||||
* PCI : ID data is the 16 bit PCI Registered Vendor ID
|
||||
*/
|
||||
#define SCSI_NL_VID_TYPE_SHIFT 56
|
||||
#define SCSI_NL_VID_TYPE_MASK ((u64)0xFF << SCSI_NL_VID_TYPE_SHIFT)
|
||||
#define SCSI_NL_VID_TYPE_PCI ((u64)0x01 << SCSI_NL_VID_TYPE_SHIFT)
|
||||
#define SCSI_NL_VID_TYPE_MASK ((__u64)0xFF << SCSI_NL_VID_TYPE_SHIFT)
|
||||
#define SCSI_NL_VID_TYPE_PCI ((__u64)0x01 << SCSI_NL_VID_TYPE_SHIFT)
|
||||
#define SCSI_NL_VID_ID_MASK (~ SCSI_NL_VID_TYPE_MASK)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Defines for Mobile Industry Processor Interface (MIPI(R))
|
||||
* Display Working Group standards: DSI, DCS, DBI, DPI
|
||||
*
|
||||
* Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
* Copyright (C) 2006 Nokia Corporation
|
||||
* Author: Imre Deak <imre.deak@nokia.com>
|
||||
*
|
||||
* 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 MIPI_DISPLAY_H
|
||||
#define MIPI_DISPLAY_H
|
||||
|
||||
/* MIPI DSI Processor-to-Peripheral transaction types */
|
||||
enum {
|
||||
MIPI_DSI_V_SYNC_START = 0x01,
|
||||
MIPI_DSI_V_SYNC_END = 0x11,
|
||||
MIPI_DSI_H_SYNC_START = 0x21,
|
||||
MIPI_DSI_H_SYNC_END = 0x31,
|
||||
|
||||
MIPI_DSI_COLOR_MODE_OFF = 0x02,
|
||||
MIPI_DSI_COLOR_MODE_ON = 0x12,
|
||||
MIPI_DSI_SHUTDOWN_PERIPHERAL = 0x22,
|
||||
MIPI_DSI_TURN_ON_PERIPHERAL = 0x32,
|
||||
|
||||
MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 0x03,
|
||||
MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 0x13,
|
||||
MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 0x23,
|
||||
|
||||
MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 0x04,
|
||||
MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 0x14,
|
||||
MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 0x24,
|
||||
|
||||
MIPI_DSI_DCS_SHORT_WRITE = 0x05,
|
||||
MIPI_DSI_DCS_SHORT_WRITE_PARAM = 0x15,
|
||||
|
||||
MIPI_DSI_DCS_READ = 0x06,
|
||||
|
||||
MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 0x37,
|
||||
|
||||
MIPI_DSI_END_OF_TRANSMISSION = 0x08,
|
||||
|
||||
MIPI_DSI_NULL_PACKET = 0x09,
|
||||
MIPI_DSI_BLANKING_PACKET = 0x19,
|
||||
MIPI_DSI_GENERIC_LONG_WRITE = 0x29,
|
||||
MIPI_DSI_DCS_LONG_WRITE = 0x39,
|
||||
|
||||
MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 0x0c,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 0x1c,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 0x2c,
|
||||
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_30 = 0x0d,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_36 = 0x1d,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 0x3d,
|
||||
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_16 = 0x0e,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_18 = 0x1e,
|
||||
MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 0x2e,
|
||||
MIPI_DSI_PACKED_PIXEL_STREAM_24 = 0x3e,
|
||||
};
|
||||
|
||||
/* MIPI DSI Peripheral-to-Processor transaction types */
|
||||
enum {
|
||||
MIPI_DSI_RX_ACKNOWLEDGE_AND_ERROR_REPORT = 0x02,
|
||||
MIPI_DSI_RX_END_OF_TRANSMISSION = 0x08,
|
||||
MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE = 0x11,
|
||||
MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_2BYTE = 0x12,
|
||||
MIPI_DSI_RX_GENERIC_LONG_READ_RESPONSE = 0x1a,
|
||||
MIPI_DSI_RX_DCS_LONG_READ_RESPONSE = 0x1c,
|
||||
MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE = 0x21,
|
||||
MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_2BYTE = 0x22,
|
||||
};
|
||||
|
||||
/* MIPI DCS commands */
|
||||
enum {
|
||||
MIPI_DCS_NOP = 0x00,
|
||||
MIPI_DCS_SOFT_RESET = 0x01,
|
||||
MIPI_DCS_GET_DISPLAY_ID = 0x04,
|
||||
MIPI_DCS_GET_RED_CHANNEL = 0x06,
|
||||
MIPI_DCS_GET_GREEN_CHANNEL = 0x07,
|
||||
MIPI_DCS_GET_BLUE_CHANNEL = 0x08,
|
||||
MIPI_DCS_GET_DISPLAY_STATUS = 0x09,
|
||||
MIPI_DCS_GET_POWER_MODE = 0x0A,
|
||||
MIPI_DCS_GET_ADDRESS_MODE = 0x0B,
|
||||
MIPI_DCS_GET_PIXEL_FORMAT = 0x0C,
|
||||
MIPI_DCS_GET_DISPLAY_MODE = 0x0D,
|
||||
MIPI_DCS_GET_SIGNAL_MODE = 0x0E,
|
||||
MIPI_DCS_GET_DIAGNOSTIC_RESULT = 0x0F,
|
||||
MIPI_DCS_ENTER_SLEEP_MODE = 0x10,
|
||||
MIPI_DCS_EXIT_SLEEP_MODE = 0x11,
|
||||
MIPI_DCS_ENTER_PARTIAL_MODE = 0x12,
|
||||
MIPI_DCS_ENTER_NORMAL_MODE = 0x13,
|
||||
MIPI_DCS_EXIT_INVERT_MODE = 0x20,
|
||||
MIPI_DCS_ENTER_INVERT_MODE = 0x21,
|
||||
MIPI_DCS_SET_GAMMA_CURVE = 0x26,
|
||||
MIPI_DCS_SET_DISPLAY_OFF = 0x28,
|
||||
MIPI_DCS_SET_DISPLAY_ON = 0x29,
|
||||
MIPI_DCS_SET_COLUMN_ADDRESS = 0x2A,
|
||||
MIPI_DCS_SET_PAGE_ADDRESS = 0x2B,
|
||||
MIPI_DCS_WRITE_MEMORY_START = 0x2C,
|
||||
MIPI_DCS_WRITE_LUT = 0x2D,
|
||||
MIPI_DCS_READ_MEMORY_START = 0x2E,
|
||||
MIPI_DCS_SET_PARTIAL_AREA = 0x30,
|
||||
MIPI_DCS_SET_SCROLL_AREA = 0x33,
|
||||
MIPI_DCS_SET_TEAR_OFF = 0x34,
|
||||
MIPI_DCS_SET_TEAR_ON = 0x35,
|
||||
MIPI_DCS_SET_ADDRESS_MODE = 0x36,
|
||||
MIPI_DCS_SET_SCROLL_START = 0x37,
|
||||
MIPI_DCS_EXIT_IDLE_MODE = 0x38,
|
||||
MIPI_DCS_ENTER_IDLE_MODE = 0x39,
|
||||
MIPI_DCS_SET_PIXEL_FORMAT = 0x3A,
|
||||
MIPI_DCS_WRITE_MEMORY_CONTINUE = 0x3C,
|
||||
MIPI_DCS_READ_MEMORY_CONTINUE = 0x3E,
|
||||
MIPI_DCS_SET_TEAR_SCANLINE = 0x44,
|
||||
MIPI_DCS_GET_SCANLINE = 0x45,
|
||||
MIPI_DCS_READ_DDB_START = 0xA1,
|
||||
MIPI_DCS_READ_DDB_CONTINUE = 0xA8,
|
||||
};
|
||||
|
||||
/* MIPI DCS pixel formats */
|
||||
#define MIPI_DCS_PIXEL_FMT_24BIT 7
|
||||
#define MIPI_DCS_PIXEL_FMT_18BIT 6
|
||||
#define MIPI_DCS_PIXEL_FMT_16BIT 5
|
||||
#define MIPI_DCS_PIXEL_FMT_12BIT 3
|
||||
#define MIPI_DCS_PIXEL_FMT_8BIT 2
|
||||
#define MIPI_DCS_PIXEL_FMT_3BIT 1
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Public SH-mobile MIPI DSI header
|
||||
*
|
||||
* Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
*
|
||||
* 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 VIDEO_SH_MIPI_DSI_H
|
||||
#define VIDEO_SH_MIPI_DSI_H
|
||||
|
||||
enum sh_mipi_dsi_data_fmt {
|
||||
MIPI_RGB888,
|
||||
MIPI_RGB565,
|
||||
MIPI_RGB666_LP,
|
||||
MIPI_RGB666,
|
||||
MIPI_BGR888,
|
||||
MIPI_BGR565,
|
||||
MIPI_BGR666_LP,
|
||||
MIPI_BGR666,
|
||||
MIPI_YUYV,
|
||||
MIPI_UYVY,
|
||||
MIPI_YUV420_L,
|
||||
MIPI_YUV420,
|
||||
};
|
||||
|
||||
struct sh_mobile_lcdc_chan_cfg;
|
||||
|
||||
struct sh_mipi_dsi_info {
|
||||
enum sh_mipi_dsi_data_fmt data_format;
|
||||
struct sh_mobile_lcdc_chan_cfg *lcd_chan;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* SH-Mobile High-Definition Multimedia Interface (HDMI)
|
||||
*
|
||||
* Copyright (C) 2010, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
*
|
||||
* 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 SH_MOBILE_HDMI_H
|
||||
#define SH_MOBILE_HDMI_H
|
||||
|
||||
struct sh_mobile_lcdc_chan_cfg;
|
||||
struct device;
|
||||
|
||||
struct sh_mobile_hdmi_info {
|
||||
struct sh_mobile_lcdc_chan_cfg *lcd_chan;
|
||||
struct device *lcd_dev;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -3,24 +3,27 @@
|
||||
|
||||
#include <linux/fb.h>
|
||||
|
||||
enum { RGB8, /* 24bpp, 8:8:8 */
|
||||
RGB9, /* 18bpp, 9:9 */
|
||||
RGB12A, /* 24bpp, 12:12 */
|
||||
RGB12B, /* 12bpp */
|
||||
RGB16, /* 16bpp */
|
||||
RGB18, /* 18bpp */
|
||||
RGB24, /* 24bpp */
|
||||
SYS8A, /* 24bpp, 8:8:8 */
|
||||
SYS8B, /* 18bpp, 8:8:2 */
|
||||
SYS8C, /* 18bpp, 2:8:8 */
|
||||
SYS8D, /* 16bpp, 8:8 */
|
||||
SYS9, /* 18bpp, 9:9 */
|
||||
SYS12, /* 24bpp, 12:12 */
|
||||
SYS16A, /* 16bpp */
|
||||
SYS16B, /* 18bpp, 16:2 */
|
||||
SYS16C, /* 18bpp, 2:16 */
|
||||
SYS18, /* 18bpp */
|
||||
SYS24 };/* 24bpp */
|
||||
enum {
|
||||
RGB8, /* 24bpp, 8:8:8 */
|
||||
RGB9, /* 18bpp, 9:9 */
|
||||
RGB12A, /* 24bpp, 12:12 */
|
||||
RGB12B, /* 12bpp */
|
||||
RGB16, /* 16bpp */
|
||||
RGB18, /* 18bpp */
|
||||
RGB24, /* 24bpp */
|
||||
YUV422, /* 16bpp */
|
||||
SYS8A, /* 24bpp, 8:8:8 */
|
||||
SYS8B, /* 18bpp, 8:8:2 */
|
||||
SYS8C, /* 18bpp, 2:8:8 */
|
||||
SYS8D, /* 16bpp, 8:8 */
|
||||
SYS9, /* 18bpp, 9:9 */
|
||||
SYS12, /* 24bpp, 12:12 */
|
||||
SYS16A, /* 16bpp */
|
||||
SYS16B, /* 18bpp, 16:2 */
|
||||
SYS16C, /* 18bpp, 2:16 */
|
||||
SYS18, /* 18bpp */
|
||||
SYS24, /* 24bpp */
|
||||
};
|
||||
|
||||
enum { LCDC_CHAN_DISABLED = 0,
|
||||
LCDC_CHAN_MAINLCD,
|
||||
@@ -52,7 +55,7 @@ struct sh_mobile_lcdc_board_cfg {
|
||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||
void (*start_transfer)(void *board_data, void *sys_ops_handle,
|
||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||
void (*display_on)(void *board_data);
|
||||
void (*display_on)(void *board_data, struct fb_info *info);
|
||||
void (*display_off)(void *board_data);
|
||||
};
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#ifndef __XEN_PUBLIC_MEMORY_H__
|
||||
#define __XEN_PUBLIC_MEMORY_H__
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
/*
|
||||
* Increase or decrease the specified domain's memory reservation. Returns a
|
||||
* -ve errcode on failure, or the # extents successfully allocated or freed.
|
||||
@@ -52,6 +54,48 @@ struct xen_memory_reservation {
|
||||
};
|
||||
DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation);
|
||||
|
||||
/*
|
||||
* An atomic exchange of memory pages. If return code is zero then
|
||||
* @out.extent_list provides GMFNs of the newly-allocated memory.
|
||||
* Returns zero on complete success, otherwise a negative error code.
|
||||
* On complete success then always @nr_exchanged == @in.nr_extents.
|
||||
* On partial success @nr_exchanged indicates how much work was done.
|
||||
*/
|
||||
#define XENMEM_exchange 11
|
||||
struct xen_memory_exchange {
|
||||
/*
|
||||
* [IN] Details of memory extents to be exchanged (GMFN bases).
|
||||
* Note that @in.address_bits is ignored and unused.
|
||||
*/
|
||||
struct xen_memory_reservation in;
|
||||
|
||||
/*
|
||||
* [IN/OUT] Details of new memory extents.
|
||||
* We require that:
|
||||
* 1. @in.domid == @out.domid
|
||||
* 2. @in.nr_extents << @in.extent_order ==
|
||||
* @out.nr_extents << @out.extent_order
|
||||
* 3. @in.extent_start and @out.extent_start lists must not overlap
|
||||
* 4. @out.extent_start lists GPFN bases to be populated
|
||||
* 5. @out.extent_start is overwritten with allocated GMFN bases
|
||||
*/
|
||||
struct xen_memory_reservation out;
|
||||
|
||||
/*
|
||||
* [OUT] Number of input extents that were successfully exchanged:
|
||||
* 1. The first @nr_exchanged input extents were successfully
|
||||
* deallocated.
|
||||
* 2. The corresponding first entries in the output extent list correctly
|
||||
* indicate the GMFNs that were successfully exchanged.
|
||||
* 3. All other input and output extents are untouched.
|
||||
* 4. If not all input exents are exchanged then the return code of this
|
||||
* command will be non-zero.
|
||||
* 5. THIS FIELD MUST BE INITIALISED TO ZERO BY THE CALLER!
|
||||
*/
|
||||
unsigned long nr_exchanged;
|
||||
};
|
||||
|
||||
DEFINE_GUEST_HANDLE_STRUCT(xen_memory_exchange);
|
||||
/*
|
||||
* Returns the maximum machine frame number of mapped RAM in this system.
|
||||
* This command always succeeds (it never returns an error code).
|
||||
@@ -142,4 +186,10 @@ struct xen_translate_gpfn_list {
|
||||
};
|
||||
DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list);
|
||||
|
||||
|
||||
/*
|
||||
* Prevent the balloon driver from changing the memory reservation
|
||||
* during a driver critical region.
|
||||
*/
|
||||
extern spinlock_t xen_reservation_lock;
|
||||
#endif /* __XEN_PUBLIC_MEMORY_H__ */
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
#ifndef __LINUX_SWIOTLB_XEN_H
|
||||
#define __LINUX_SWIOTLB_XEN_H
|
||||
|
||||
#include <linux/swiotlb.h>
|
||||
|
||||
extern void xen_swiotlb_init(int verbose);
|
||||
|
||||
extern void
|
||||
*xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flags);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_free_coherent(struct device *hwdev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
|
||||
extern dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
|
||||
unsigned long offset, size_t size,
|
||||
enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
|
||||
extern void xen_swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
|
||||
size_t size, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
/*
|
||||
extern int
|
||||
xen_swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction dir);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction dir);
|
||||
*/
|
||||
extern int
|
||||
xen_swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
|
||||
int nelems, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
|
||||
int nelems, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
|
||||
size_t size, enum dma_data_direction dir);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
|
||||
int nelems, enum dma_data_direction dir);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
|
||||
size_t size, enum dma_data_direction dir);
|
||||
|
||||
extern void
|
||||
xen_swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
|
||||
int nelems, enum dma_data_direction dir);
|
||||
|
||||
extern int
|
||||
xen_swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
|
||||
|
||||
extern int
|
||||
xen_swiotlb_dma_supported(struct device *hwdev, u64 mask);
|
||||
|
||||
#endif /* __LINUX_SWIOTLB_XEN_H */
|
||||
@@ -17,4 +17,10 @@ void xen_arch_resume(void);
|
||||
|
||||
int xen_setup_shutdown_event(void);
|
||||
|
||||
extern unsigned long *xen_contiguous_bitmap;
|
||||
int xen_create_contiguous_region(unsigned long vstart, unsigned int order,
|
||||
unsigned int address_bits);
|
||||
|
||||
void xen_destroy_contiguous_region(unsigned long vstart, unsigned int order);
|
||||
|
||||
#endif /* INCLUDE_XEN_OPS_H */
|
||||
|
||||
Reference in New Issue
Block a user