diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-01-16 10:09:10 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-16 10:09:10 +0100 | 
| commit | af2519fb2298cdf7540082c36f4d8c66bbff103f (patch) | |
| tree | 1d290d28d42d42f9e693457762c4008988628060 /include | |
| parent | 961d7d0ee5150e0197cc81c2a8884ecb230276e2 (diff) | |
| parent | 7cb36b6ccdca03bd87e8faca7fd920643dd1aec7 (diff) | |
Merge branch 'linus' into core/iommu
Conflicts:
	arch/ia64/include/asm/dma-mapping.h
	arch/ia64/include/asm/machvec.h
	arch/ia64/include/asm/machvec_sn2.h
Diffstat (limited to 'include')
53 files changed, 742 insertions, 121 deletions
diff --git a/include/asm-frv/Kbuild b/include/asm-frv/Kbuild index 1f44e7c76995..0f8956def738 100644 --- a/include/asm-frv/Kbuild +++ b/include/asm-frv/Kbuild @@ -3,4 +3,3 @@ include include/asm-generic/Kbuild.asm  header-y += registers.h  unifdef-y += termios.h -unifdef-y += swab.h diff --git a/include/asm-frv/byteorder.h b/include/asm-frv/byteorder.h index 1187e51ecd13..f29b7593e088 100644 --- a/include/asm-frv/byteorder.h +++ b/include/asm-frv/byteorder.h @@ -1,7 +1,6 @@  #ifndef _ASM_BYTEORDER_H  #define _ASM_BYTEORDER_H -#include <asm/swab.h>  #include <linux/byteorder/big_endian.h>  #endif /* _ASM_BYTEORDER_H */ diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index 1870d5e05f1c..70d185534b9d 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm @@ -31,6 +31,7 @@ unifdef-y += socket.h  unifdef-y += sockios.h  unifdef-y += stat.h  unifdef-y += statfs.h +unifdef-y += swab.h  unifdef-y += termbits.h  unifdef-y += termios.h  unifdef-y += types.h diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 72ebe91005a8..8e6d0ca70aba 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -301,7 +301,7 @@ static inline void ptep_modify_prot_commit(struct mm_struct *mm,   * track_pfn_vma_new is called when a _new_ pfn mapping is being established   * for physical range indicated by pfn and size.   */ -static inline int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t prot, +static inline int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,  					unsigned long pfn, unsigned long size)  {  	return 0; @@ -332,7 +332,7 @@ static inline void untrack_pfn_vma(struct vm_area_struct *vma,  {  }  #else -extern int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t prot, +extern int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,  				unsigned long pfn, unsigned long size);  extern int track_pfn_vma_copy(struct vm_area_struct *vma);  extern void untrack_pfn_vma(struct vm_area_struct *vma, unsigned long pfn, diff --git a/include/asm-generic/rtc.h b/include/asm-generic/rtc.h index 89061c1a67d4..763e3b060f43 100644 --- a/include/asm-generic/rtc.h +++ b/include/asm-generic/rtc.h @@ -42,7 +42,7 @@ static inline unsigned char rtc_is_updating(void)  	return uip;  } -static inline unsigned int get_rtc_time(struct rtc_time *time) +static inline unsigned int __get_rtc_time(struct rtc_time *time)  {  	unsigned char ctrl;  	unsigned long flags; @@ -108,8 +108,12 @@ static inline unsigned int get_rtc_time(struct rtc_time *time)  	return RTC_24H;  } +#ifndef get_rtc_time +#define get_rtc_time	__get_rtc_time +#endif +  /* Set the current date and time in the real time clock. */ -static inline int set_rtc_time(struct rtc_time *time) +static inline int __set_rtc_time(struct rtc_time *time)  {  	unsigned long flags;  	unsigned char mon, day, hrs, min, sec; @@ -190,11 +194,15 @@ static inline int set_rtc_time(struct rtc_time *time)  	return 0;  } +#ifndef set_rtc_time +#define set_rtc_time	__set_rtc_time +#endif +  static inline unsigned int get_rtc_ss(void)  {  	struct rtc_time h; -	get_rtc_time(&h); +	__get_rtc_time(&h);  	return h.tm_sec;  } diff --git a/include/asm-m32r/Kbuild b/include/asm-m32r/Kbuild index 27b108a86b39..c68e1680da01 100644 --- a/include/asm-m32r/Kbuild +++ b/include/asm-m32r/Kbuild @@ -1,2 +1 @@  include include/asm-generic/Kbuild.asm -unifdef-y += swab.h diff --git a/include/asm-m32r/byteorder.h b/include/asm-m32r/byteorder.h index 61ff9cfd8451..21855d8b028b 100644 --- a/include/asm-m32r/byteorder.h +++ b/include/asm-m32r/byteorder.h @@ -1,8 +1,6 @@  #ifndef _ASM_M32R_BYTEORDER_H  #define _ASM_M32R_BYTEORDER_H -#include <asm/swab.h> -  #if defined(__LITTLE_ENDIAN__)  #  include <linux/byteorder/little_endian.h>  #else diff --git a/include/asm-m68k/Kbuild b/include/asm-m68k/Kbuild index 52fd96b4142a..1a922fad76f7 100644 --- a/include/asm-m68k/Kbuild +++ b/include/asm-m68k/Kbuild @@ -1,3 +1,2 @@  include include/asm-generic/Kbuild.asm  header-y += cachectl.h -unifdef-y += swab.h diff --git a/include/asm-m68k/byteorder.h b/include/asm-m68k/byteorder.h index 300866523b86..31b260a88803 100644 --- a/include/asm-m68k/byteorder.h +++ b/include/asm-m68k/byteorder.h @@ -1,7 +1,6 @@  #ifndef _M68K_BYTEORDER_H  #define _M68K_BYTEORDER_H -#include <asm/swab.h>  #include <linux/byteorder/big_endian.h>  #endif /* _M68K_BYTEORDER_H */ diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index 965abb8bc7ff..3c19027331fa 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h @@ -5,6 +5,7 @@   * This file contains the system call numbers.   */ +#define __NR_restart_syscall	  0  #define __NR_exit		  1  #define __NR_fork		  2  #define __NR_read		  3 @@ -359,9 +360,6 @@  #define __ARCH_WANT_SYS_SIGPROCMASK  #define __ARCH_WANT_SYS_RT_SIGACTION -/* whitelist for checksyscalls */ -#define __IGNORE_restart_syscall -  /*   * "Conditional" syscalls   * diff --git a/include/asm-mn10300/Kbuild b/include/asm-mn10300/Kbuild index 27b108a86b39..c68e1680da01 100644 --- a/include/asm-mn10300/Kbuild +++ b/include/asm-mn10300/Kbuild @@ -1,2 +1 @@  include include/asm-generic/Kbuild.asm -unifdef-y += swab.h diff --git a/include/asm-mn10300/byteorder.h b/include/asm-mn10300/byteorder.h index 45b18ded19e6..5dd0bdd9feee 100644 --- a/include/asm-mn10300/byteorder.h +++ b/include/asm-mn10300/byteorder.h @@ -1,7 +1,6 @@  #ifndef _ASM_BYTEORDER_H  #define _ASM_BYTEORDER_H -#include <asm/swab.h>  #include <linux/byteorder/little_endian.h>  #endif /* _ASM_BYTEORDER_H */ diff --git a/include/linux/agpgart.h b/include/linux/agpgart.h index c8fdb6e658e1..110c600c885f 100644 --- a/include/linux/agpgart.h +++ b/include/linux/agpgart.h @@ -52,7 +52,6 @@  #ifndef __KERNEL__  #include <linux/types.h> -#include <asm/types.h>  struct agp_version {  	__u16 major; diff --git a/include/linux/atm_idt77105.h b/include/linux/atm_idt77105.h index 05621cf20709..8b724000aa50 100644 --- a/include/linux/atm_idt77105.h +++ b/include/linux/atm_idt77105.h @@ -7,7 +7,7 @@  #ifndef LINUX_ATM_IDT77105_H  #define LINUX_ATM_IDT77105_H -#include <asm/types.h> +#include <linux/types.h>  #include <linux/atmioc.h>  #include <linux/atmdev.h> diff --git a/include/linux/capi.h b/include/linux/capi.h index fdebaaa9f66e..65100d6cb89b 100644 --- a/include/linux/capi.h +++ b/include/linux/capi.h @@ -12,7 +12,7 @@  #ifndef __LINUX_CAPI_H__  #define __LINUX_CAPI_H__ -#include <asm/types.h> +#include <linux/types.h>  #include <linux/ioctl.h>  #ifndef __KERNEL__  #include <linux/kernelcapi.h> diff --git a/include/linux/compat.h b/include/linux/compat.h index e88f3ecf38b4..3fd2194ff573 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -280,5 +280,18 @@ asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,  asmlinkage long compat_sys_timerfd_gettime(int ufd,  				   struct compat_itimerspec __user *otmr); +asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, +				      __u32 __user *pages, +				      const int __user *nodes, +				      int __user *status, +				      int flags); +asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, +				     struct compat_timeval __user *t); +asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, +				      struct compat_stat __user *statbuf, +				      int flag); +asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, +				  int flags, int mode); +  #endif /* CONFIG_COMPAT */  #endif /* _LINUX_COMPAT_H */ diff --git a/include/linux/connector.h b/include/linux/connector.h index 5c7f9468f753..34f2789d9b9b 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h @@ -22,7 +22,7 @@  #ifndef __CONNECTOR_H  #define __CONNECTOR_H -#include <asm/types.h> +#include <linux/types.h>  #define CN_IDX_CONNECTOR		0xffffffff  #define CN_VAL_CONNECTOR		0xffffffff diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index 2d3d1e04ba92..d06fbf286346 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h @@ -150,8 +150,6 @@ struct CYZ_BOOT_CTRL {   *	architectures and compilers.   */ -#include <asm/types.h> -  typedef __u64  ucdouble;		/* 64 bits, unsigned */  typedef __u32  uclong;			/* 32 bits, unsigned */  typedef __u16  ucshort;		/* 16 bits, unsigned */ diff --git a/include/linux/dio.h b/include/linux/dio.h index 1e65ebc2a3db..b2dd31ca1710 100644 --- a/include/linux/dio.h +++ b/include/linux/dio.h @@ -241,7 +241,7 @@ struct dio_driver {  extern int dio_find(int deviceid);  extern unsigned long dio_scodetophysaddr(int scode); -extern void dio_create_sysfs_dev_files(struct dio_dev *); +extern int dio_create_sysfs_dev_files(struct dio_dev *);  /* New-style probing */  extern int dio_register_driver(struct dio_driver *); diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 64dea2ab326c..c73f1e2b59b7 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -270,8 +270,18 @@ struct dma_device {  /* --- public DMA engine API --- */ +#ifdef CONFIG_DMA_ENGINE  void dmaengine_get(void);  void dmaengine_put(void); +#else +static inline void dmaengine_get(void) +{ +} +static inline void dmaengine_put(void) +{ +} +#endif +  dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,  	void *dest, void *src, size_t len);  dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan, diff --git a/include/linux/fb.h b/include/linux/fb.h index 1ee63df5be92..818fe21257e8 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -1,7 +1,7 @@  #ifndef _LINUX_FB_H  #define _LINUX_FB_H -#include <asm/types.h> +#include <linux/types.h>  #include <linux/i2c.h>  struct dentry; diff --git a/include/linux/ide.h b/include/linux/ide.h index 3644f6323384..194da5a4b0d6 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -871,7 +871,7 @@ struct ide_host {  	ide_hwif_t	*cur_port;	/* for hosts requiring serialization */  	/* used for hosts requiring serialization */ -	volatile long	host_busy; +	volatile unsigned long	host_busy;  };  #define IDE_HOST_BUSY 0 diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h index a7d6a2234b31..c7a66882b6d0 100644 --- a/include/linux/if_pppol2tp.h +++ b/include/linux/if_pppol2tp.h @@ -15,7 +15,7 @@  #ifndef __LINUX_IF_PPPOL2TP_H  #define __LINUX_IF_PPPOL2TP_H -#include <asm/types.h> +#include <linux/types.h>  #ifdef __KERNEL__  #include <linux/in.h> diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h index 6fb7f1788570..30c88b2245ff 100644 --- a/include/linux/if_pppox.h +++ b/include/linux/if_pppox.h @@ -17,7 +17,7 @@  #define __LINUX_IF_PPPOX_H -#include <asm/types.h> +#include <linux/types.h>  #include <asm/byteorder.h>  #ifdef  __KERNEL__ diff --git a/include/linux/input.h b/include/linux/input.h index 9a6355f74db2..1249a0c20a38 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -16,7 +16,7 @@  #include <sys/time.h>  #include <sys/ioctl.h>  #include <sys/types.h> -#include <asm/types.h> +#include <linux/types.h>  #endif  /* diff --git a/include/linux/ioport.h b/include/linux/ioport.h index f6bb2ca8e3ba..32e4b2f72294 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -143,7 +143,8 @@ static inline unsigned long resource_type(struct resource *res)  extern struct resource * __request_region(struct resource *,  					resource_size_t start, -					resource_size_t n, const char *name, int relaxed); +					resource_size_t n, +					const char *name, int flags);  /* Compatibility cruft */  #define release_region(start,n)	__release_region(&ioport_resource, (start), (n)) diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 6384b19efe64..64246dce5663 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h @@ -614,6 +614,8 @@ struct transaction_s   * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the   *	number that will fit in j_blocksize   * @j_last_sync_writer: most recent pid which did a synchronous write + * @j_average_commit_time: the average amount of time in nanoseconds it + *	takes to commit a transaction to the disk.   * @j_private: An opaque pointer to fs-private information.   */ diff --git a/include/linux/joystick.h b/include/linux/joystick.h index b5e051295a67..9e20c29c1e14 100644 --- a/include/linux/joystick.h +++ b/include/linux/joystick.h @@ -27,7 +27,7 @@   * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic   */ -#include <asm/types.h> +#include <linux/types.h>  #include <linux/input.h>  /* diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 35525ac63337..5715f1907601 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -7,7 +7,7 @@   * Note: you must update KVM_API_VERSION if you change this interface.   */ -#include <asm/types.h> +#include <linux/types.h>  #include <linux/compiler.h>  #include <linux/ioctl.h>  #include <asm/kvm.h> diff --git a/include/linux/libata.h b/include/linux/libata.h index 4f7c8fb4d3fe..b6b8a7f3ec66 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -239,6 +239,7 @@ enum {  	/* host set flags */  	ATA_HOST_SIMPLEX	= (1 << 0),	/* Host is simplex, one DMA channel per host only */  	ATA_HOST_STARTED	= (1 << 1),	/* Host started */ +	ATA_HOST_PARALLEL_SCAN	= (1 << 2),	/* Ports on this host can be scanned in parallel */  	/* bits 24:31 of host->flags are reserved for LLD specific flags */ diff --git a/include/linux/loop.h b/include/linux/loop.h index 46169a7b559b..6ffd6db5bb0d 100644 --- a/include/linux/loop.h +++ b/include/linux/loop.h @@ -80,7 +80,7 @@ enum {  };  #include <asm/posix_types.h>	/* for __kernel_old_dev_t */ -#include <asm/types.h>		/* for __u64 */ +#include <linux/types.h>	/* for __u64 */  /* Backwards compatibility version */  struct loop_info { diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 557477ac3d5b..5da3d95b27f1 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h @@ -559,7 +559,10 @@ extern void	mISDN_unregister_clock(struct mISDNclock *);  static inline struct mISDNdevice *dev_to_mISDN(struct device *dev)  { -	return dev_get_drvdata(dev); +	if (dev) +		return dev_get_drvdata(dev); +	else +		return NULL;  }  extern void	set_channel_address(struct mISDNchannel *, u_int, u_int); diff --git a/include/linux/magic.h b/include/linux/magic.h index 439f6f3cb0c4..0b4df7eba852 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h @@ -10,11 +10,13 @@  #define SYSFS_MAGIC		0x62656572  #define SECURITYFS_MAGIC	0x73636673  #define TMPFS_MAGIC		0x01021994 +#define SQUASHFS_MAGIC		0x73717368  #define EFS_SUPER_MAGIC		0x414A53  #define EXT2_SUPER_MAGIC	0xEF53  #define EXT3_SUPER_MAGIC	0xEF53  #define XENFS_SUPER_MAGIC	0xabba1974  #define EXT4_SUPER_MAGIC	0xEF53 +#define BTRFS_SUPER_MAGIC	0x9123683E  #define HPFS_SUPER_MAGIC	0xf995e849  #define ISOFS_SUPER_MAGIC	0x9660  #define JFFS2_SUPER_MAGIC	0x72b6 diff --git a/include/linux/matroxfb.h b/include/linux/matroxfb.h index ae5b09493062..404f678e734b 100644 --- a/include/linux/matroxfb.h +++ b/include/linux/matroxfb.h @@ -2,7 +2,7 @@  #define __LINUX_MATROXFB_H__  #include <asm/ioctl.h> -#include <asm/types.h> +#include <linux/types.h>  #include <linux/videodev2.h>  struct matroxioc_output_mode { diff --git a/include/linux/mfd/pcf50633/adc.h b/include/linux/mfd/pcf50633/adc.h new file mode 100644 index 000000000000..56669b4183ad --- /dev/null +++ b/include/linux/mfd/pcf50633/adc.h @@ -0,0 +1,72 @@ +/* + * adc.h  -- Driver for NXP PCF50633 ADC + * + * (C) 2006-2008 by Openmoko, Inc. + * 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 as published by the + * Free Software Foundation;  either version 2 of the  License, or (at your + * option) any later version. + */ + +#ifndef __LINUX_MFD_PCF50633_ADC_H +#define __LINUX_MFD_PCF50633_ADC_H + +#include <linux/mfd/pcf50633/core.h> +#include <linux/platform_device.h> + +/* ADC Registers */ +#define PCF50633_REG_ADCC3		0x52 +#define PCF50633_REG_ADCC2		0x53 +#define PCF50633_REG_ADCC1		0x54 +#define PCF50633_REG_ADCS1		0x55 +#define PCF50633_REG_ADCS2		0x56 +#define PCF50633_REG_ADCS3		0x57 + +#define PCF50633_ADCC1_ADCSTART		0x01 +#define PCF50633_ADCC1_RES_10BIT	0x02 +#define PCF50633_ADCC1_AVERAGE_NO	0x00 +#define PCF50633_ADCC1_AVERAGE_4	0x04 +#define PCF50633_ADCC1_AVERAGE_8	0x08 +#define PCF50633_ADCC1_AVERAGE_16	0x0c +#define PCF50633_ADCC1_MUX_BATSNS_RES	0x00 +#define PCF50633_ADCC1_MUX_BATSNS_SUBTR	0x10 +#define PCF50633_ADCC1_MUX_ADCIN2_RES	0x20 +#define PCF50633_ADCC1_MUX_ADCIN2_SUBTR	0x30 +#define PCF50633_ADCC1_MUX_BATTEMP	0x60 +#define PCF50633_ADCC1_MUX_ADCIN1	0x70 +#define PCF50633_ADCC1_AVERAGE_MASK	0x0c +#define PCF50633_ADCC1_ADCMUX_MASK	0xf0 + +#define PCF50633_ADCC2_RATIO_NONE	0x00 +#define PCF50633_ADCC2_RATIO_BATTEMP	0x01 +#define PCF50633_ADCC2_RATIO_ADCIN1	0x02 +#define PCF50633_ADCC2_RATIO_BOTH	0x03 +#define PCF50633_ADCC2_RATIOSETTL_100US 0x04 + +#define PCF50633_ADCC3_ACCSW_EN		0x01 +#define PCF50633_ADCC3_NTCSW_EN		0x04 +#define PCF50633_ADCC3_RES_DIV_TWO	0x10 +#define PCF50633_ADCC3_RES_DIV_THREE	0x00 + +#define PCF50633_ADCS3_REF_NTCSW	0x00 +#define PCF50633_ADCS3_REF_ACCSW	0x10 +#define PCF50633_ADCS3_REF_2V0		0x20 +#define PCF50633_ADCS3_REF_VISA		0x30 +#define PCF50633_ADCS3_REF_2V0_2	0x70 +#define PCF50633_ADCS3_ADCRDY		0x80 + +#define PCF50633_ADCS3_ADCDAT1L_MASK	0x03 +#define PCF50633_ADCS3_ADCDAT2L_MASK	0x0c +#define PCF50633_ADCS3_ADCDAT2L_SHIFT	2 +#define PCF50633_ASCS3_REF_MASK		0x70 + +extern int +pcf50633_adc_async_read(struct pcf50633 *pcf, int mux, int avg, +		void (*callback)(struct pcf50633 *, void *, int), +		void *callback_param); +extern int +pcf50633_adc_sync_read(struct pcf50633 *pcf, int mux, int avg); + +#endif /* __LINUX_PCF50633_ADC_H */ diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h new file mode 100644 index 000000000000..4455b212d75a --- /dev/null +++ b/include/linux/mfd/pcf50633/core.h @@ -0,0 +1,218 @@ +/* + * core.h  -- Core driver for NXP PCF50633 + * + * (C) 2006-2008 by Openmoko, Inc. + * 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 as published by the + * Free Software Foundation;  either version 2 of the  License, or (at your + * option) any later version. + */ + +#ifndef __LINUX_MFD_PCF50633_CORE_H +#define __LINUX_MFD_PCF50633_CORE_H + +#include <linux/i2c.h> +#include <linux/workqueue.h> +#include <linux/regulator/driver.h> +#include <linux/regulator/machine.h> +#include <linux/power_supply.h> + +struct pcf50633; + +#define PCF50633_NUM_REGULATORS	11 + +struct pcf50633_platform_data { +	struct regulator_init_data reg_init_data[PCF50633_NUM_REGULATORS]; + +	char **batteries; +	int num_batteries; + +	/* Callbacks */ +	void (*probe_done)(struct pcf50633 *); +	void (*mbc_event_callback)(struct pcf50633 *, int); +	void (*regulator_registered)(struct pcf50633 *, int); +	void (*force_shutdown)(struct pcf50633 *); + +	u8 resumers[5]; +}; + +struct pcf50633_subdev_pdata { +	struct pcf50633 *pcf; +}; + +struct pcf50633_irq { +	void (*handler) (int, void *); +	void *data; +}; + +int pcf50633_register_irq(struct pcf50633 *pcf, int irq, +			void (*handler) (int, void *), void *data); +int pcf50633_free_irq(struct pcf50633 *pcf, int irq); + +int pcf50633_irq_mask(struct pcf50633 *pcf, int irq); +int pcf50633_irq_unmask(struct pcf50633 *pcf, int irq); +int pcf50633_irq_mask_get(struct pcf50633 *pcf, int irq); + +int pcf50633_read_block(struct pcf50633 *, u8 reg, +					int nr_regs, u8 *data); +int pcf50633_write_block(struct pcf50633 *pcf, u8 reg, +					int nr_regs, u8 *data); +u8 pcf50633_reg_read(struct pcf50633 *, u8 reg); +int pcf50633_reg_write(struct pcf50633 *pcf, u8 reg, u8 val); + +int pcf50633_reg_set_bit_mask(struct pcf50633 *pcf, u8 reg, u8 mask, u8 val); +int pcf50633_reg_clear_bits(struct pcf50633 *pcf, u8 reg, u8 bits); + +/* Interrupt registers */ + +#define PCF50633_REG_INT1	0x02 +#define PCF50633_REG_INT2	0x03 +#define PCF50633_REG_INT3	0x04 +#define PCF50633_REG_INT4	0x05 +#define PCF50633_REG_INT5	0x06 + +#define PCF50633_REG_INT1M	0x07 +#define PCF50633_REG_INT2M	0x08 +#define PCF50633_REG_INT3M	0x09 +#define PCF50633_REG_INT4M	0x0a +#define PCF50633_REG_INT5M	0x0b + +enum { +	/* Chip IRQs */ +	PCF50633_IRQ_ADPINS, +	PCF50633_IRQ_ADPREM, +	PCF50633_IRQ_USBINS, +	PCF50633_IRQ_USBREM, +	PCF50633_IRQ_RESERVED1, +	PCF50633_IRQ_RESERVED2, +	PCF50633_IRQ_ALARM, +	PCF50633_IRQ_SECOND, +	PCF50633_IRQ_ONKEYR, +	PCF50633_IRQ_ONKEYF, +	PCF50633_IRQ_EXTON1R, +	PCF50633_IRQ_EXTON1F, +	PCF50633_IRQ_EXTON2R, +	PCF50633_IRQ_EXTON2F, +	PCF50633_IRQ_EXTON3R, +	PCF50633_IRQ_EXTON3F, +	PCF50633_IRQ_BATFULL, +	PCF50633_IRQ_CHGHALT, +	PCF50633_IRQ_THLIMON, +	PCF50633_IRQ_THLIMOFF, +	PCF50633_IRQ_USBLIMON, +	PCF50633_IRQ_USBLIMOFF, +	PCF50633_IRQ_ADCRDY, +	PCF50633_IRQ_ONKEY1S, +	PCF50633_IRQ_LOWSYS, +	PCF50633_IRQ_LOWBAT, +	PCF50633_IRQ_HIGHTMP, +	PCF50633_IRQ_AUTOPWRFAIL, +	PCF50633_IRQ_DWN1PWRFAIL, +	PCF50633_IRQ_DWN2PWRFAIL, +	PCF50633_IRQ_LEDPWRFAIL, +	PCF50633_IRQ_LEDOVP, +	PCF50633_IRQ_LDO1PWRFAIL, +	PCF50633_IRQ_LDO2PWRFAIL, +	PCF50633_IRQ_LDO3PWRFAIL, +	PCF50633_IRQ_LDO4PWRFAIL, +	PCF50633_IRQ_LDO5PWRFAIL, +	PCF50633_IRQ_LDO6PWRFAIL, +	PCF50633_IRQ_HCLDOPWRFAIL, +	PCF50633_IRQ_HCLDOOVL, + +	/* Always last */ +	PCF50633_NUM_IRQ, +}; + +struct pcf50633 { +	struct device *dev; +	struct i2c_client *i2c_client; + +	struct pcf50633_platform_data *pdata; +	int irq; +	struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; +	struct work_struct irq_work; +	struct mutex lock; + +	u8 mask_regs[5]; + +	u8 suspend_irq_masks[5]; +	u8 resume_reason[5]; +	int is_suspended; + +	int onkey1s_held; + +	struct platform_device *rtc_pdev; +	struct platform_device *mbc_pdev; +	struct platform_device *adc_pdev; +	struct platform_device *input_pdev; +	struct platform_device *regulator_pdev[PCF50633_NUM_REGULATORS]; +}; + +enum pcf50633_reg_int1 { +	PCF50633_INT1_ADPINS	= 0x01,	/* Adapter inserted */ +	PCF50633_INT1_ADPREM	= 0x02,	/* Adapter removed */ +	PCF50633_INT1_USBINS	= 0x04,	/* USB inserted */ +	PCF50633_INT1_USBREM	= 0x08,	/* USB removed */ +	/* reserved */ +	PCF50633_INT1_ALARM	= 0x40, /* RTC alarm time is reached */ +	PCF50633_INT1_SECOND	= 0x80,	/* RTC periodic second interrupt */ +}; + +enum pcf50633_reg_int2 { +	PCF50633_INT2_ONKEYR	= 0x01, /* ONKEY rising edge */ +	PCF50633_INT2_ONKEYF	= 0x02, /* ONKEY falling edge */ +	PCF50633_INT2_EXTON1R	= 0x04, /* EXTON1 rising edge */ +	PCF50633_INT2_EXTON1F	= 0x08, /* EXTON1 falling edge */ +	PCF50633_INT2_EXTON2R	= 0x10, /* EXTON2 rising edge */ +	PCF50633_INT2_EXTON2F	= 0x20, /* EXTON2 falling edge */ +	PCF50633_INT2_EXTON3R	= 0x40, /* EXTON3 rising edge */ +	PCF50633_INT2_EXTON3F	= 0x80, /* EXTON3 falling edge */ +}; + +enum pcf50633_reg_int3 { +	PCF50633_INT3_BATFULL	= 0x01, /* Battery full */ +	PCF50633_INT3_CHGHALT	= 0x02,	/* Charger halt */ +	PCF50633_INT3_THLIMON	= 0x04, +	PCF50633_INT3_THLIMOFF	= 0x08, +	PCF50633_INT3_USBLIMON	= 0x10, +	PCF50633_INT3_USBLIMOFF	= 0x20, +	PCF50633_INT3_ADCRDY	= 0x40, /* ADC result ready */ +	PCF50633_INT3_ONKEY1S	= 0x80,	/* ONKEY pressed 1 second */ +}; + +enum pcf50633_reg_int4 { +	PCF50633_INT4_LOWSYS		= 0x01, +	PCF50633_INT4_LOWBAT		= 0x02, +	PCF50633_INT4_HIGHTMP		= 0x04, +	PCF50633_INT4_AUTOPWRFAIL	= 0x08, +	PCF50633_INT4_DWN1PWRFAIL	= 0x10, +	PCF50633_INT4_DWN2PWRFAIL	= 0x20, +	PCF50633_INT4_LEDPWRFAIL	= 0x40, +	PCF50633_INT4_LEDOVP		= 0x80, +}; + +enum pcf50633_reg_int5 { +	PCF50633_INT5_LDO1PWRFAIL	= 0x01, +	PCF50633_INT5_LDO2PWRFAIL	= 0x02, +	PCF50633_INT5_LDO3PWRFAIL	= 0x04, +	PCF50633_INT5_LDO4PWRFAIL	= 0x08, +	PCF50633_INT5_LDO5PWRFAIL	= 0x10, +	PCF50633_INT5_LDO6PWRFAIL	= 0x20, +	PCF50633_INT5_HCLDOPWRFAIL	= 0x40, +	PCF50633_INT5_HCLDOOVL		= 0x80, +}; + +/* misc. registers */ +#define PCF50633_REG_OOCSHDWN	0x0c + +/* LED registers */ +#define PCF50633_REG_LEDOUT 0x28 +#define PCF50633_REG_LEDENA 0x29 +#define PCF50633_REG_LEDCTL 0x2a +#define PCF50633_REG_LEDDIM 0x2b + +#endif + diff --git a/include/linux/mfd/pcf50633/gpio.h b/include/linux/mfd/pcf50633/gpio.h new file mode 100644 index 000000000000..a42b845efc54 --- /dev/null +++ b/include/linux/mfd/pcf50633/gpio.h @@ -0,0 +1,52 @@ +/* + * gpio.h -- GPIO driver for NXP PCF50633 + * + * (C) 2006-2008 by Openmoko, Inc. + * 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 as published by the + * Free Software Foundation;  either version 2 of the  License, or (at your + * option) any later version. + */ + +#ifndef __LINUX_MFD_PCF50633_GPIO_H +#define __LINUX_MFD_PCF50633_GPIO_H + +#include <linux/mfd/pcf50633/core.h> + +#define PCF50633_GPIO1		1 +#define PCF50633_GPIO2		2 +#define PCF50633_GPIO3		3 +#define PCF50633_GPO		4 + +#define PCF50633_REG_GPIO1CFG	0x14 +#define PCF50633_REG_GPIO2CFG	0x15 +#define PCF50633_REG_GPIO3CFG	0x16 +#define PCF50633_REG_GPOCFG 	0x17 + +#define PCF50633_GPOCFG_GPOSEL_MASK	0x07 + +enum pcf50633_reg_gpocfg { +	PCF50633_GPOCFG_GPOSEL_0	= 0x00, +	PCF50633_GPOCFG_GPOSEL_LED_NFET	= 0x01, +	PCF50633_GPOCFG_GPOSEL_SYSxOK	= 0x02, +	PCF50633_GPOCFG_GPOSEL_CLK32K	= 0x03, +	PCF50633_GPOCFG_GPOSEL_ADAPUSB	= 0x04, +	PCF50633_GPOCFG_GPOSEL_USBxOK	= 0x05, +	PCF50633_GPOCFG_GPOSEL_ACTPH4	= 0x06, +	PCF50633_GPOCFG_GPOSEL_1	= 0x07, +	PCF50633_GPOCFG_GPOSEL_INVERSE	= 0x08, +}; + +int pcf50633_gpio_set(struct pcf50633 *pcf, int gpio, u8 val); +u8 pcf50633_gpio_get(struct pcf50633 *pcf, int gpio); + +int pcf50633_gpio_invert_set(struct pcf50633 *, int gpio, int invert); +int pcf50633_gpio_invert_get(struct pcf50633 *pcf, int gpio); + +int pcf50633_gpio_power_supply_set(struct pcf50633 *, +					int gpio, int regulator, int on); +#endif /* __LINUX_MFD_PCF50633_GPIO_H */ + + diff --git a/include/linux/mfd/pcf50633/mbc.h b/include/linux/mfd/pcf50633/mbc.h new file mode 100644 index 000000000000..6e17619b773a --- /dev/null +++ b/include/linux/mfd/pcf50633/mbc.h @@ -0,0 +1,134 @@ +/* + * mbc.h  -- Driver for NXP PCF50633 Main Battery Charger + * + * (C) 2006-2008 by Openmoko, Inc. + * 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 as published by the + * Free Software Foundation;  either version 2 of the  License, or (at your + * option) any later version. + */ + +#ifndef __LINUX_MFD_PCF50633_MBC_H +#define __LINUX_MFD_PCF50633_MBC_H + +#include <linux/mfd/pcf50633/core.h> +#include <linux/platform_device.h> + +#define PCF50633_REG_MBCC1	0x43 +#define PCF50633_REG_MBCC2	0x44 +#define PCF50633_REG_MBCC3	0x45 +#define PCF50633_REG_MBCC4	0x46 +#define PCF50633_REG_MBCC5	0x47 +#define PCF50633_REG_MBCC6	0x48 +#define PCF50633_REG_MBCC7	0x49 +#define PCF50633_REG_MBCC8	0x4a +#define PCF50633_REG_MBCS1	0x4b +#define PCF50633_REG_MBCS2	0x4c +#define PCF50633_REG_MBCS3	0x4d + +enum pcf50633_reg_mbcc1 { +	PCF50633_MBCC1_CHGENA		= 0x01,	/* Charger enable */ +	PCF50633_MBCC1_AUTOSTOP		= 0x02, +	PCF50633_MBCC1_AUTORES		= 0x04, /* automatic resume */ +	PCF50633_MBCC1_RESUME		= 0x08, /* explicit resume cmd */ +	PCF50633_MBCC1_RESTART		= 0x10, /* restart charging */ +	PCF50633_MBCC1_PREWDTIME_60M	= 0x20,	/* max. precharging time */ +	PCF50633_MBCC1_WDTIME_1H	= 0x00, +	PCF50633_MBCC1_WDTIME_2H	= 0x40, +	PCF50633_MBCC1_WDTIME_4H	= 0x80, +	PCF50633_MBCC1_WDTIME_6H	= 0xc0, +}; +#define PCF50633_MBCC1_WDTIME_MASK	  0xc0 + +enum pcf50633_reg_mbcc2 { +	PCF50633_MBCC2_VBATCOND_2V7	= 0x00, +	PCF50633_MBCC2_VBATCOND_2V85	= 0x01, +	PCF50633_MBCC2_VBATCOND_3V0	= 0x02, +	PCF50633_MBCC2_VBATCOND_3V15	= 0x03, +	PCF50633_MBCC2_VMAX_4V		= 0x00, +	PCF50633_MBCC2_VMAX_4V20	= 0x28, +	PCF50633_MBCC2_VRESDEBTIME_64S	= 0x80,	/* debounce time (32/64sec) */ +}; + +enum pcf50633_reg_mbcc7 { +	PCF50633_MBCC7_USB_100mA	= 0x00, +	PCF50633_MBCC7_USB_500mA	= 0x01, +	PCF50633_MBCC7_USB_1000mA	= 0x02, +	PCF50633_MBCC7_USB_SUSPEND	= 0x03, +	PCF50633_MBCC7_BATTEMP_EN	= 0x04, +	PCF50633_MBCC7_BATSYSIMAX_1A6	= 0x00, +	PCF50633_MBCC7_BATSYSIMAX_1A8	= 0x40, +	PCF50633_MBCC7_BATSYSIMAX_2A0	= 0x80, +	PCF50633_MBCC7_BATSYSIMAX_2A2	= 0xc0, +}; +#define PCF50633_MBCC7_USB_MASK 0x03 + +enum pcf50633_reg_mbcc8 { +	PCF50633_MBCC8_USBENASUS	= 0x10, +}; + +enum pcf50633_reg_mbcs1 { +	PCF50633_MBCS1_USBPRES		= 0x01, +	PCF50633_MBCS1_USBOK		= 0x02, +	PCF50633_MBCS1_ADAPTPRES	= 0x04, +	PCF50633_MBCS1_ADAPTOK		= 0x08, +	PCF50633_MBCS1_TBAT_OK		= 0x00, +	PCF50633_MBCS1_TBAT_ABOVE	= 0x10, +	PCF50633_MBCS1_TBAT_BELOW	= 0x20, +	PCF50633_MBCS1_TBAT_UNDEF	= 0x30, +	PCF50633_MBCS1_PREWDTEXP	= 0x40, +	PCF50633_MBCS1_WDTEXP		= 0x80, +}; + +enum pcf50633_reg_mbcs2_mbcmod { +	PCF50633_MBCS2_MBC_PLAY		= 0x00, +	PCF50633_MBCS2_MBC_USB_PRE	= 0x01, +	PCF50633_MBCS2_MBC_USB_PRE_WAIT	= 0x02, +	PCF50633_MBCS2_MBC_USB_FAST	= 0x03, +	PCF50633_MBCS2_MBC_USB_FAST_WAIT = 0x04, +	PCF50633_MBCS2_MBC_USB_SUSPEND	= 0x05, +	PCF50633_MBCS2_MBC_ADP_PRE	= 0x06, +	PCF50633_MBCS2_MBC_ADP_PRE_WAIT	= 0x07, +	PCF50633_MBCS2_MBC_ADP_FAST	= 0x08, +	PCF50633_MBCS2_MBC_ADP_FAST_WAIT = 0x09, +	PCF50633_MBCS2_MBC_BAT_FULL	= 0x0a, +	PCF50633_MBCS2_MBC_HALT		= 0x0b, +}; +#define PCF50633_MBCS2_MBC_MASK		0x0f +enum pcf50633_reg_mbcs2_chgstat { +	PCF50633_MBCS2_CHGS_NONE	= 0x00, +	PCF50633_MBCS2_CHGS_ADAPTER	= 0x10, +	PCF50633_MBCS2_CHGS_USB		= 0x20, +	PCF50633_MBCS2_CHGS_BOTH	= 0x30, +}; +#define PCF50633_MBCS2_RESSTAT_AUTO	0x40 + +enum pcf50633_reg_mbcs3 { +	PCF50633_MBCS3_USBLIM_PLAY	= 0x01, +	PCF50633_MBCS3_USBLIM_CGH	= 0x02, +	PCF50633_MBCS3_TLIM_PLAY	= 0x04, +	PCF50633_MBCS3_TLIM_CHG		= 0x08, +	PCF50633_MBCS3_ILIM		= 0x10,	/* 1: Ibat > Icutoff */ +	PCF50633_MBCS3_VLIM		= 0x20,	/* 1: Vbat == Vmax */ +	PCF50633_MBCS3_VBATSTAT		= 0x40,	/* 1: Vbat > Vbatcond */ +	PCF50633_MBCS3_VRES		= 0x80, /* 1: Vbat > Vth(RES) */ +}; + +#define PCF50633_MBCC2_VBATCOND_MASK	  0x03 +#define PCF50633_MBCC2_VMAX_MASK	  0x3c + +/* Charger status */ +#define PCF50633_MBC_USB_ONLINE		0x01 +#define PCF50633_MBC_USB_ACTIVE		0x02 +#define PCF50633_MBC_ADAPTER_ONLINE	0x04 +#define PCF50633_MBC_ADAPTER_ACTIVE	0x08 + +int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma); + +int pcf50633_mbc_get_status(struct pcf50633 *); +void pcf50633_mbc_set_status(struct pcf50633 *, int what, int status); + +#endif + diff --git a/include/linux/mfd/pcf50633/pmic.h b/include/linux/mfd/pcf50633/pmic.h new file mode 100644 index 000000000000..2d3dbe53b235 --- /dev/null +++ b/include/linux/mfd/pcf50633/pmic.h @@ -0,0 +1,67 @@ +#ifndef __LINUX_MFD_PCF50633_PMIC_H +#define __LINUX_MFD_PCF50633_PMIC_H + +#include <linux/mfd/pcf50633/core.h> +#include <linux/platform_device.h> + +#define PCF50633_REG_AUTOOUT	0x1a +#define PCF50633_REG_AUTOENA	0x1b +#define PCF50633_REG_AUTOCTL	0x1c +#define PCF50633_REG_AUTOMXC	0x1d +#define PCF50633_REG_DOWN1OUT	0x1e +#define PCF50633_REG_DOWN1ENA	0x1f +#define PCF50633_REG_DOWN1CTL	0x20 +#define PCF50633_REG_DOWN1MXC	0x21 +#define PCF50633_REG_DOWN2OUT	0x22 +#define PCF50633_REG_DOWN2ENA	0x23 +#define PCF50633_REG_DOWN2CTL	0x24 +#define PCF50633_REG_DOWN2MXC	0x25 +#define PCF50633_REG_MEMLDOOUT	0x26 +#define PCF50633_REG_MEMLDOENA	0x27 +#define PCF50633_REG_LDO1OUT	0x2d +#define PCF50633_REG_LDO1ENA	0x2e +#define PCF50633_REG_LDO2OUT	0x2f +#define PCF50633_REG_LDO2ENA	0x30 +#define PCF50633_REG_LDO3OUT	0x31 +#define PCF50633_REG_LDO3ENA	0x32 +#define PCF50633_REG_LDO4OUT	0x33 +#define PCF50633_REG_LDO4ENA	0x34 +#define PCF50633_REG_LDO5OUT	0x35 +#define PCF50633_REG_LDO5ENA	0x36 +#define PCF50633_REG_LDO6OUT	0x37 +#define PCF50633_REG_LDO6ENA	0x38 +#define PCF50633_REG_HCLDOOUT	0x39 +#define PCF50633_REG_HCLDOENA	0x3a +#define PCF50633_REG_HCLDOOVL	0x40 + +enum pcf50633_regulator_enable { +	PCF50633_REGULATOR_ON		= 0x01, +	PCF50633_REGULATOR_ON_GPIO1	= 0x02, +	PCF50633_REGULATOR_ON_GPIO2	= 0x04, +	PCF50633_REGULATOR_ON_GPIO3	= 0x08, +}; +#define PCF50633_REGULATOR_ON_MASK	0x0f + +enum pcf50633_regulator_phase { +	PCF50633_REGULATOR_ACTPH1	= 0x00, +	PCF50633_REGULATOR_ACTPH2	= 0x10, +	PCF50633_REGULATOR_ACTPH3	= 0x20, +	PCF50633_REGULATOR_ACTPH4	= 0x30, +}; +#define PCF50633_REGULATOR_ACTPH_MASK	0x30 + +enum pcf50633_regulator_id { +	PCF50633_REGULATOR_AUTO, +	PCF50633_REGULATOR_DOWN1, +	PCF50633_REGULATOR_DOWN2, +	PCF50633_REGULATOR_LDO1, +	PCF50633_REGULATOR_LDO2, +	PCF50633_REGULATOR_LDO3, +	PCF50633_REGULATOR_LDO4, +	PCF50633_REGULATOR_LDO5, +	PCF50633_REGULATOR_LDO6, +	PCF50633_REGULATOR_HCLDO, +	PCF50633_REGULATOR_MEMLDO, +}; +#endif + diff --git a/include/linux/mm.h b/include/linux/mm.h index b91a73fd1bcc..e8ddc98b8405 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -260,7 +260,6 @@ static inline int put_page_testzero(struct page *page)   */  static inline int get_page_unless_zero(struct page *page)  { -	VM_BUG_ON(PageTail(page));  	return atomic_inc_not_zero(&page->_count);  } diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index f24556813375..ec54785d34f9 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -467,7 +467,7 @@ struct netdev_queue {   *     This function is called when network device transistions to the down   *     state.   * - * int (*ndo_hard_start_xmit)(struct sk_buff *skb, struct net_device *dev); + * int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev);   *	Called when a packet needs to be transmitted.   *	Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED,   *	Required can not be NULL. @@ -795,6 +795,7 @@ struct net_device  	       NETREG_UNREGISTERING,	/* called unregister_netdevice */  	       NETREG_UNREGISTERED,	/* completed unregister todo */  	       NETREG_RELEASED,		/* called free_netdev */ +	       NETREG_DUMMY,		/* dummy device for NAPI poll */  	} reg_state;  	/* Called from unregister, can be used to call free_netdev */ @@ -1077,6 +1078,8 @@ extern void		free_netdev(struct net_device *dev);  extern void		synchronize_net(void);  extern int 		register_netdevice_notifier(struct notifier_block *nb);  extern int		unregister_netdevice_notifier(struct notifier_block *nb); +extern int		init_dummy_netdev(struct net_device *dev); +  extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev);  extern struct net_device	*dev_get_by_index(struct net *net, int ifindex);  extern struct net_device	*__dev_get_by_index(struct net *net, int ifindex); diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index e52ce475d19f..c7ee8744d26b 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h @@ -270,6 +270,7 @@ struct xt_match  	struct list_head list;  	const char name[XT_FUNCTION_MAXNAMELEN-1]; +	u_int8_t revision;  	/* Return true or false: return FALSE and set *hotdrop = 1 to             force immediate packet drop. */ @@ -302,7 +303,6 @@ struct xt_match  	unsigned short proto;  	unsigned short family; -	u_int8_t revision;  };  /* Registration hooks for targets. */ diff --git a/include/linux/of_i2c.h b/include/linux/of_i2c.h index bd2a870ec296..34974b5a76f7 100644 --- a/include/linux/of_i2c.h +++ b/include/linux/of_i2c.h @@ -17,4 +17,7 @@  void of_register_i2c_devices(struct i2c_adapter *adap,  			     struct device_node *adap_node); +/* must call put_device() when done with returned i2c_client device */ +struct i2c_client *of_find_i2c_device_by_node(struct device_node *node); +  #endif /* __LINUX_OF_I2C_H */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index d543365518ab..d56ad9c21c09 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2174,6 +2174,7 @@  #define PCI_DEVICE_ID_RDC_R6040		0x6040  #define PCI_DEVICE_ID_RDC_R6060		0x6060  #define PCI_DEVICE_ID_RDC_R6061		0x6061 +#define PCI_DEVICE_ID_RDC_D1010		0x1010  #define PCI_VENDOR_ID_LENOVO		0x17aa diff --git a/include/linux/phantom.h b/include/linux/phantom.h index 02268c54c250..94dd6645c60a 100644 --- a/include/linux/phantom.h +++ b/include/linux/phantom.h @@ -10,7 +10,7 @@  #ifndef __PHANTOM_H  #define __PHANTOM_H -#include <asm/types.h> +#include <linux/types.h>  /* PHN_(G/S)ET_REG param */  struct phm_reg { diff --git a/include/linux/radeonfb.h b/include/linux/radeonfb.h index 5bd8975ed78e..8c4bbdecc44f 100644 --- a/include/linux/radeonfb.h +++ b/include/linux/radeonfb.h @@ -2,7 +2,7 @@  #define __LINUX_RADEONFB_H__  #include <asm/ioctl.h> -#include <asm/types.h> +#include <linux/types.h>  #define ATY_RADEON_LCD_ON	0x00000001  #define ATY_RADEON_CRT_ON	0x00000002 diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index dede0a2cfc45..4c5bcf6ca7e8 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h @@ -9,7 +9,7 @@   *   * Author: Pavel Emelianov <xemul@openvz.org>   * - * See Documentation/controllers/resource_counter.txt for more + * See Documentation/cgroups/resource_counter.txt for more   * info about what this counter is.   */ diff --git a/include/linux/smp.h b/include/linux/smp.h index b82466968101..715196b09d67 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -24,6 +24,9 @@ struct call_single_data {  /* total number of cpus in this system (may exceed NR_CPUS) */  extern unsigned int total_cpus; +int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, +				int wait); +  #ifdef CONFIG_SMP  #include <linux/preempt.h> @@ -79,8 +82,6 @@ smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info,  	return 0;  } -int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, -				int wait);  void __smp_call_function_single(int cpuid, struct call_single_data *data);  /* @@ -140,14 +141,6 @@ static inline int up_smp_call_function(void (*func)(void *), void *info)  static inline void smp_send_reschedule(int cpu) { }  #define num_booting_cpus()			1  #define smp_prepare_boot_cpu()			do {} while (0) -#define smp_call_function_single(cpuid, func, info, wait) \ -({ \ -	WARN_ON(cpuid != 0);	\ -	local_irq_disable();	\ -	(func)(info);		\ -	local_irq_enable();	\ -	0;			\ -})  #define smp_call_function_mask(mask, func, info, wait) \  			(up_smp_call_function(func, info))  #define smp_call_function_many(mask, func, info, wait) \ diff --git a/include/linux/swab.h b/include/linux/swab.h index be5284d4a053..ea0c02fd5163 100644 --- a/include/linux/swab.h +++ b/include/linux/swab.h @@ -3,7 +3,7 @@  #include <linux/types.h>  #include <linux/compiler.h> -#include <asm/byteorder.h> +#include <asm/swab.h>  /*   * casts are necessary for constants, because we never know how for sure diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 18d0a243a7b3..16875f89e6a7 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -54,6 +54,7 @@ struct compat_stat;  struct compat_timeval;  struct robust_list_head;  struct getcpu_cache; +struct old_linux_dirent;  #include <linux/types.h>  #include <linux/aio_abi.h> @@ -65,6 +66,74 @@ struct getcpu_cache;  #include <linux/quota.h>  #include <linux/key.h> +#define __SC_DECL1(t1, a1)	t1 a1 +#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__) +#define __SC_DECL3(t3, a3, ...) t3 a3, __SC_DECL2(__VA_ARGS__) +#define __SC_DECL4(t4, a4, ...) t4 a4, __SC_DECL3(__VA_ARGS__) +#define __SC_DECL5(t5, a5, ...) t5 a5, __SC_DECL4(__VA_ARGS__) +#define __SC_DECL6(t6, a6, ...) t6 a6, __SC_DECL5(__VA_ARGS__) + +#define __SC_LONG1(t1, a1) 	long a1 +#define __SC_LONG2(t2, a2, ...) long a2, __SC_LONG1(__VA_ARGS__) +#define __SC_LONG3(t3, a3, ...) long a3, __SC_LONG2(__VA_ARGS__) +#define __SC_LONG4(t4, a4, ...) long a4, __SC_LONG3(__VA_ARGS__) +#define __SC_LONG5(t5, a5, ...) long a5, __SC_LONG4(__VA_ARGS__) +#define __SC_LONG6(t6, a6, ...) long a6, __SC_LONG5(__VA_ARGS__) + +#define __SC_CAST1(t1, a1)	(t1) a1 +#define __SC_CAST2(t2, a2, ...) (t2) a2, __SC_CAST1(__VA_ARGS__) +#define __SC_CAST3(t3, a3, ...) (t3) a3, __SC_CAST2(__VA_ARGS__) +#define __SC_CAST4(t4, a4, ...) (t4) a4, __SC_CAST3(__VA_ARGS__) +#define __SC_CAST5(t5, a5, ...) (t5) a5, __SC_CAST4(__VA_ARGS__) +#define __SC_CAST6(t6, a6, ...) (t6) a6, __SC_CAST5(__VA_ARGS__) + +#define __SC_TEST(type)		BUILD_BUG_ON(sizeof(type) > sizeof(long)) +#define __SC_TEST1(t1, a1)	__SC_TEST(t1) +#define __SC_TEST2(t2, a2, ...)	__SC_TEST(t2); __SC_TEST1(__VA_ARGS__) +#define __SC_TEST3(t3, a3, ...)	__SC_TEST(t3); __SC_TEST2(__VA_ARGS__) +#define __SC_TEST4(t4, a4, ...)	__SC_TEST(t4); __SC_TEST3(__VA_ARGS__) +#define __SC_TEST5(t5, a5, ...)	__SC_TEST(t5); __SC_TEST4(__VA_ARGS__) +#define __SC_TEST6(t6, a6, ...)	__SC_TEST(t6); __SC_TEST5(__VA_ARGS__) + +#define SYSCALL_DEFINE0(name)   asmlinkage long sys_##name(void) +#define SYSCALL_DEFINE1(...)    SYSCALL_DEFINEx(1, __VA_ARGS__) +#define SYSCALL_DEFINE2(...)    SYSCALL_DEFINEx(2, __VA_ARGS__) +#define SYSCALL_DEFINE3(...)    SYSCALL_DEFINEx(3, __VA_ARGS__) +#define SYSCALL_DEFINE4(...)    SYSCALL_DEFINEx(4, __VA_ARGS__) +#define SYSCALL_DEFINE5(...)    SYSCALL_DEFINEx(5, __VA_ARGS__) +#define SYSCALL_DEFINE6(...)    SYSCALL_DEFINEx(6, __VA_ARGS__) + +#ifdef CONFIG_PPC64 +#define SYSCALL_ALIAS(alias, name)					\ +	asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n"	\ +	     "\t.globl ." #alias "\n\t.set ." #alias ", ." #name) +#else +#define SYSCALL_ALIAS(alias, name)					\ +	asm ("\t.globl " #alias "\n\t.set " #alias ", " #name) +#endif + +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS + +#define SYSCALL_DEFINE(name) static inline long SYSC_##name +#define SYSCALL_DEFINEx(x, name, ...)					\ +	asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__));		\ +	static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__));	\ +	asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__))		\ +	{								\ +		__SC_TEST##x(__VA_ARGS__);				\ +		return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__));	\ +	}								\ +	SYSCALL_ALIAS(sys_##name, SyS_##name);				\ +	static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)) + +#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ + +#define SYSCALL_DEFINE(name) asmlinkage long sys_##name +#define SYSCALL_DEFINEx(x, name, ...)					\ +	asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)) + +#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ +  asmlinkage long sys_time(time_t __user *tloc);  asmlinkage long sys_stime(time_t __user *tptr);  asmlinkage long sys_gettimeofday(struct timeval __user *tv, @@ -77,7 +146,7 @@ asmlinkage long sys_times(struct tms __user *tbuf);  asmlinkage long sys_gettid(void);  asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp); -asmlinkage unsigned long sys_alarm(unsigned int seconds); +asmlinkage long sys_alarm(unsigned int seconds);  asmlinkage long sys_getpid(void);  asmlinkage long sys_getppid(void);  asmlinkage long sys_getuid(void); @@ -166,7 +235,7 @@ asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,  				unsigned long flags);  asmlinkage long sys_exit(int error_code); -asmlinkage void sys_exit_group(int error_code); +asmlinkage long sys_exit_group(int error_code);  asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,  				int options, struct rusage __user *ru);  asmlinkage long sys_waitid(int which, pid_t pid, @@ -196,7 +265,7 @@ asmlinkage long sys_tkill(int pid, int sig);  asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo);  asmlinkage long sys_sgetmask(void);  asmlinkage long sys_ssetmask(int newmask); -asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler); +asmlinkage long sys_signal(int sig, __sighandler_t handler);  asmlinkage long sys_pause(void);  asmlinkage long sys_sync(void); @@ -246,29 +315,29 @@ asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name,  			      const void __user *value, size_t size, int flags);  asmlinkage long sys_fsetxattr(int fd, const char __user *name,  			      const void __user *value, size_t size, int flags); -asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name, -				void __user *value, size_t size); -asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list, -				size_t size); -asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list, -				size_t size); -asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); +asmlinkage long sys_getxattr(const char __user *path, const char __user *name, +			     void __user *value, size_t size); +asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name, +			      void __user *value, size_t size); +asmlinkage long sys_fgetxattr(int fd, const char __user *name, +			      void __user *value, size_t size); +asmlinkage long sys_listxattr(const char __user *path, char __user *list, +			      size_t size); +asmlinkage long sys_llistxattr(const char __user *path, char __user *list, +			       size_t size); +asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size);  asmlinkage long sys_removexattr(const char __user *path,  				const char __user *name);  asmlinkage long sys_lremovexattr(const char __user *path,  				 const char __user *name);  asmlinkage long sys_fremovexattr(int fd, const char __user *name); -asmlinkage unsigned long sys_brk(unsigned long brk); +asmlinkage long sys_brk(unsigned long brk);  asmlinkage long sys_mprotect(unsigned long start, size_t len,  				unsigned long prot); -asmlinkage unsigned long sys_mremap(unsigned long addr, -				unsigned long old_len, unsigned long new_len, -				unsigned long flags, unsigned long new_addr); +asmlinkage long sys_mremap(unsigned long addr, +			   unsigned long old_len, unsigned long new_len, +			   unsigned long flags, unsigned long new_addr);  asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,  			unsigned long prot, unsigned long pgoff,  			unsigned long flags); @@ -321,10 +390,10 @@ asmlinkage long sys_io_submit(aio_context_t, long,  				struct iocb __user * __user *);  asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,  			      struct io_event __user *result); -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, -				off_t __user *offset, size_t count); -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, -				loff_t __user *offset, size_t count); +asmlinkage long sys_sendfile(int out_fd, int in_fd, +			     off_t __user *offset, size_t count); +asmlinkage long sys_sendfile64(int out_fd, int in_fd, +			       loff_t __user *offset, size_t count);  asmlinkage long sys_readlink(const char __user *path,  				char __user *buf, int bufsiz);  asmlinkage long sys_creat(const char __user *pathname, int mode); @@ -368,26 +437,25 @@ asmlinkage long sys_utime(char __user *filename,  				struct utimbuf __user *times);  asmlinkage long sys_utimes(char __user *filename,  				struct timeval __user *utimes); -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, -				unsigned int origin); +asmlinkage long sys_lseek(unsigned int fd, off_t offset, +			  unsigned int origin);  asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,  			unsigned long offset_low, loff_t __user *result,  			unsigned int origin); -asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf, -				size_t count); -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count); -asmlinkage ssize_t sys_readv(unsigned long fd, -				const struct iovec __user *vec, -				unsigned long vlen); -asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf, -				size_t count); -asmlinkage ssize_t sys_writev(unsigned long fd, -				const struct iovec __user *vec, -				unsigned long vlen); -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, -				size_t count, loff_t pos); -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, -				size_t count, loff_t pos); +asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count); +asmlinkage long sys_readahead(int fd, loff_t offset, size_t count); +asmlinkage long sys_readv(unsigned long fd, +			  const struct iovec __user *vec, +			  unsigned long vlen); +asmlinkage long sys_write(unsigned int fd, const char __user *buf, +			  size_t count); +asmlinkage long sys_writev(unsigned long fd, +			   const struct iovec __user *vec, +			   unsigned long vlen); +asmlinkage long sys_pread64(unsigned int fd, char __user *buf, +			    size_t count, loff_t pos); +asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf, +			     size_t count, loff_t pos);  asmlinkage long sys_getcwd(char __user *buf, unsigned long size);  asmlinkage long sys_mkdir(const char __user *pathname, int mode);  asmlinkage long sys_chdir(const char __user *filename); @@ -476,7 +544,7 @@ asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);  asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);  asmlinkage long sys_mq_unlink(const char __user *name);  asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout); -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); +asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout);  asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);  asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); @@ -530,11 +598,6 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,  				const int __user *nodes,  				int __user *status,  				int flags); -asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, -				__u32 __user *pages, -				const int __user *nodes, -				int __user *status, -				int flags);  asmlinkage long sys_mbind(unsigned long start, unsigned long len,  				unsigned long mode,  				unsigned long __user *nmask, @@ -583,13 +646,6 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *bu  			       int bufsiz);  asmlinkage long sys_utimensat(int dfd, char __user *filename,  				struct timespec __user *utimes, int flags); -asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, -				     struct compat_timeval __user *t); -asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, -				      struct compat_stat __user *statbuf, -				      int flag); -asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, -				   int flags, int mode);  asmlinkage long sys_unshare(unsigned long unshare_flags);  asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, @@ -621,6 +677,15 @@ asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr);  asmlinkage long sys_eventfd(unsigned int count);  asmlinkage long sys_eventfd2(unsigned int count, int flags);  asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len); +asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int); +asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, +			     fd_set __user *, struct timespec __user *, +			     void __user *); +asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int, +			  struct timespec __user *, const sigset_t __user *, +			  size_t); +asmlinkage long sys_pipe2(int __user *, int); +asmlinkage long sys_pipe(int __user *);  int kernel_execve(const char *filename, char *const argv[], char *const envp[]); diff --git a/include/net/wimax.h b/include/net/wimax.h index 073809ce94f8..6b3824edb39e 100644 --- a/include/net/wimax.h +++ b/include/net/wimax.h @@ -323,8 +323,8 @@ struct input_dev;   *   * @rf_hw: [private] State of the hardware radio switch (OFF/ON)   * - * @debufs_dentry: [private] Used to hook up a debugfs entry. This - *     shows up in the debugfs root as wimax:DEVICENAME. + * @debugfs_dentry: [private] Used to hook up a debugfs entry. This + *     shows up in the debugfs root as wimax\:DEVICENAME.   *   * Description:   * This structure defines a common interface to access all WiMAX diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index 4af1083e3287..93a4edb148b5 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h @@ -178,7 +178,7 @@    	.private_value = (unsigned long)&xenum }  #define SOC_DAPM_VALUE_ENUM(xname, xenum) \  {	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ -	.info = snd_soc_info_value_enum_double, \ +	.info = snd_soc_info_enum_double, \  	.get = snd_soc_dapm_get_value_enum_double, \  	.put = snd_soc_dapm_put_value_enum_double, \  	.private_value = (unsigned long)&xenum } diff --git a/include/sound/soc.h b/include/sound/soc.h index 9b930d342116..24593ac3ea19 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -106,7 +106,7 @@  	.private_value = (unsigned long)&xenum }  #define SOC_VALUE_ENUM(xname, xenum) \  {	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\ -	.info = snd_soc_info_value_enum_double, \ +	.info = snd_soc_info_enum_double, \  	.get = snd_soc_get_value_enum_double, \  	.put = snd_soc_put_value_enum_double, \  	.private_value = (unsigned long)&xenum } @@ -211,8 +211,6 @@ int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,  	struct snd_ctl_elem_value *ucontrol);  int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,  	struct snd_ctl_elem_value *ucontrol); -int snd_soc_info_value_enum_double(struct snd_kcontrol *kcontrol, -	struct snd_ctl_elem_info *uinfo);  int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol,  	struct snd_ctl_elem_value *ucontrol);  int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, @@ -419,17 +417,6 @@ struct soc_enum {  	unsigned char shift_l;  	unsigned char shift_r;  	unsigned int max; -	const char **texts; -	void *dapm; -}; - -/* semi enumerated kcontrol */ -struct soc_value_enum { -	unsigned short reg; -	unsigned short reg2; -	unsigned char shift_l; -	unsigned char shift_r; -	unsigned int max;  	unsigned int mask;  	const char **texts;  	const unsigned int *values;  | 
