diff options
Diffstat (limited to 'packages/linux/linux-rp-2.6.23')
17 files changed, 832 insertions, 4034 deletions
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-akita b/packages/linux/linux-rp-2.6.23/defconfig-akita index 78ede10b56..9587fb2a23 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-akita +++ b/packages/linux/linux-rp-2.6.23/defconfig-akita @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set @@ -288,7 +288,7 @@ CONFIG_NET=y # # Networking options # -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y diff --git a/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86 index 23ae307b14..e8852205e5 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86 +++ b/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86 @@ -314,7 +314,7 @@ CONFIG_NET=y # Networking options # # CONFIG_NETDEBUG is not set -CONFIG_PACKET=y +CONFIG_PACKET=m # CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set diff --git a/packages/linux/linux-rp-2.6.23/defconfig-c7x0 b/packages/linux/linux-rp-2.6.23/defconfig-c7x0 index e937b3b13c..4f6b8d202d 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-c7x0 +++ b/packages/linux/linux-rp-2.6.23/defconfig-c7x0 @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set @@ -302,7 +302,7 @@ CONFIG_NET=y # # Networking options # -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y @@ -1167,7 +1167,7 @@ CONFIG_SND_SOC_WM8731=m # CONFIG_SOUND_PRIME is not set CONFIG_AC97_BUS=m CONFIG_HID_SUPPORT=y -CONFIG_HID=y +CONFIG_HID=m # CONFIG_HID_DEBUG is not set # diff --git a/packages/linux/linux-rp-2.6.23/defconfig-collie b/packages/linux/linux-rp-2.6.23/defconfig-collie index fb3fbbcdbd..fd10d3df85 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-collie +++ b/packages/linux/linux-rp-2.6.23/defconfig-collie @@ -37,7 +37,7 @@ CONFIG_SYSVIPC=y # CONFIG_IPC_NS is not set # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_UTS_NS is not set # CONFIG_AUDIT is not set diff --git a/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal index 90147e15f7..ead49c2c8a 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal +++ b/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal @@ -294,7 +294,7 @@ CONFIG_NET=y # # Networking options # -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y # CONFIG_NET_KEY is not set diff --git a/packages/linux/linux-rp-2.6.23/defconfig-hx2000 b/packages/linux/linux-rp-2.6.23/defconfig-hx2000 index bb4bbaf145..09ce9e5740 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-hx2000 +++ b/packages/linux/linux-rp-2.6.23/defconfig-hx2000 @@ -255,7 +255,7 @@ CONFIG_NET=y # Networking options # # CONFIG_NETDEBUG is not set -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y diff --git a/packages/linux/linux-rp-2.6.23/defconfig-poodle b/packages/linux/linux-rp-2.6.23/defconfig-poodle index 7c2480f1ac..210997df4a 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-poodle +++ b/packages/linux/linux-rp-2.6.23/defconfig-poodle @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set @@ -531,7 +531,8 @@ CONFIG_IEEE80211=m CONFIG_IEEE80211_CRYPT_WEP=m CONFIG_IEEE80211_CRYPT_CCMP=m CONFIG_IEEE80211_CRYPT_TKIP=m -# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set # CONFIG_RFKILL is not set # CONFIG_NET_9P is not set @@ -748,10 +749,12 @@ CONFIG_PCMCIA_SPECTRUM=m # CONFIG_AIRO_CS is not set # CONFIG_PCMCIA_WL3501 is not set # CONFIG_USB_ZD1201 is not set +# CONFIG_RTL8187 is not set CONFIG_HOSTAP=m CONFIG_HOSTAP_FIRMWARE=y # CONFIG_HOSTAP_FIRMWARE_NVRAM is not set CONFIG_HOSTAP_CS=m +# CONFIG_ZD1211RW is not set # # USB Network Adapters diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemuarm b/packages/linux/linux-rp-2.6.23/defconfig-qemuarm index d4970059aa..c369657596 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-qemuarm +++ b/packages/linux/linux-rp-2.6.23/defconfig-qemuarm @@ -1,40 +1,58 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.17 -# Sat Aug 26 22:45:02 2006 +# Linux kernel version: 2.6.23 +# Fri Jan 11 00:23:17 2008 # CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +# CONFIG_GENERIC_GPIO is not set +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # -# Code maturity level options +# General setup # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set # CONFIG_AUDIT is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y # CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" -CONFIG_UID16=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y -# CONFIG_EMBEDDED is not set +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set @@ -44,28 +62,29 @@ CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y +CONFIG_ANON_INODES=y CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y # CONFIG_TINY_SHMEM is not set CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set -CONFIG_OBSOLETE_INTERMODULE=y - -# -# Loadable module support -# CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set CONFIG_KMOD=y - -# -# Block layer -# +CONFIG_BLOCK=y +# CONFIG_LBD is not set # CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set # # IO Schedulers @@ -83,31 +102,47 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" # # System Type # +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +CONFIG_ARCH_VERSATILE=y +# CONFIG_ARCH_AT91 is not set # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_EP93XX is not set # CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP3XX is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set # CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set # CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set # CONFIG_ARCH_PXA is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C2410 is not set # CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_VERSATILE=y -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_AT91RM9200 is not set + +# +# Boot options +# + +# +# Power management +# # # Versatile platform type @@ -125,6 +160,8 @@ CONFIG_CPU_ABRT_EV5TJ=y CONFIG_CPU_CACHE_VIVT=y CONFIG_CPU_COPY_V4WB=y CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y # # Processor Features @@ -134,8 +171,7 @@ CONFIG_ARM_THUMB=y # CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_DCACHE_WRITETHROUGH is not set # CONFIG_CPU_CACHE_ROUND_ROBIN is not set -CONFIG_KEXEC=y -CONFIG_ATAGS_PROC=y +# CONFIG_OUTER_CACHE is not set CONFIG_ARM_VIC=y CONFIG_ICST307=y @@ -144,6 +180,8 @@ CONFIG_ICST307=y # CONFIG_ARM_AMBA=y CONFIG_PCI=y +CONFIG_PCI_SYSCALL=y +# CONFIG_ARCH_SUPPORTS_MSI is not set # CONFIG_PCI_DEBUG is not set # @@ -154,10 +192,13 @@ CONFIG_PCI=y # # Kernel Features # +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set # CONFIG_PREEMPT is not set -# CONFIG_NO_IDLE_HZ is not set CONFIG_HZ=100 -# CONFIG_AEABI is not set +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y @@ -167,8 +208,11 @@ CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_SPARSEMEM_STATIC is not set CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y CONFIG_ALIGNMENT_TRAP=y @@ -177,8 +221,10 @@ CONFIG_ALIGNMENT_TRAP=y # CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" +CONFIG_CMDLINE="console=ttyAMA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" # CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y # # Floating point emulation @@ -198,7 +244,6 @@ CONFIG_VFP=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_AOUT is not set # CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set # # Power management options @@ -206,7 +251,10 @@ CONFIG_BINFMT_ELF=y CONFIG_PM=y # CONFIG_PM_LEGACY is not set # CONFIG_PM_DEBUG is not set -# CONFIG_APM is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +# CONFIG_APM_EMULATION is not set # # Networking @@ -216,10 +264,13 @@ CONFIG_NET=y # # Networking options # -# CONFIG_NETDEBUG is not set -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set # CONFIG_NET_KEY is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y @@ -239,13 +290,20 @@ CONFIG_IP_PNP_BOOTP=y # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set # CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y # CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_BIC=y +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set # CONFIG_IPV6 is not set # CONFIG_INET6_XFRM_TUNNEL is not set # CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -308,21 +366,8 @@ CONFIG_IP_NF_RAW=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m CONFIG_IP_NF_ARP_MANGLE=m - - -# -# DCCP Configuration (EXPERIMENTAL) -# # CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# # CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_BRIDGE is not set @@ -333,7 +378,6 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set @@ -349,7 +393,17 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_HAMRADIO is not set # CONFIG_IRDA is not set # CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set # CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set # # Device Drivers @@ -362,15 +416,9 @@ CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y # CONFIG_FW_LOADER is not set # CONFIG_DEBUG_DRIVER is not set - -# -# Connector - unified userspace <-> kernelspace linker -# +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set # CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set # CONFIG_MTD_CONCAT is not set @@ -383,11 +431,13 @@ CONFIG_MTD_AFS_PARTS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y CONFIG_MTD_BLOCK=y # CONFIG_FTL is not set # CONFIG_NFTL is not set # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set # # RAM/ROM/Flash chip drivers @@ -418,7 +468,6 @@ CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set # CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set # # Mapping drivers for chip access @@ -443,29 +492,15 @@ CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# # CONFIG_MTD_NAND is not set - -# -# OneNAND Flash Device Drivers -# # CONFIG_MTD_ONENAND is not set # -# Parallel port support +# UBI - Unsorted block images # +# CONFIG_MTD_UBI is not set # CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# +CONFIG_BLK_DEV=y # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set @@ -479,7 +514,7 @@ CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=51200 -CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -488,6 +523,9 @@ CONFIG_BLK_DEV_INITRD=y # # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set CONFIG_SCSI_PROC_FS=y # @@ -506,18 +544,17 @@ CONFIG_BLK_DEV_SD=y # CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m # -# SCSI Transport Attributes +# SCSI Transports # CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set - -# -# SCSI low-level drivers -# +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y # CONFIG_ISCSI_TCP is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_SCSI_3W_9XXX is not set @@ -526,41 +563,46 @@ CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set # CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set # CONFIG_MEGARAID_NEWGEN is not set # CONFIG_MEGARAID_LEGACY is not set # CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_HPTIOP is not set # CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set CONFIG_SCSI_SYM53C8XX_2=y CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 CONFIG_SCSI_SYM53C8XX_MMIO=y -# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set # CONFIG_SCSI_LPFC is not set # CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set - -# -# Multi-device support (RAID and LVM) -# +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m CONFIG_DM_MIRROR=m CONFIG_DM_ZERO=m CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_DELAY is not set # # Fusion MPT device support @@ -573,54 +615,31 @@ CONFIG_DM_MULTIPATH_EMC=m # # IEEE 1394 (FireWire) support # +# CONFIG_FIREWIRE is not set # CONFIG_IEEE1394 is not set - -# -# I2O device support -# # CONFIG_I2O is not set - -# -# Network device support -# CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set CONFIG_TUN=m - -# -# ARCnet devices -# # CONFIG_ARCNET is not set - -# -# PHY device support -# # CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# CONFIG_NET_ETHERNET=y CONFIG_MII=y +# CONFIG_AX88796 is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set # CONFIG_CASSINI is not set # CONFIG_NET_VENDOR_3COM is not set CONFIG_SMC91X=y # CONFIG_DM9000 is not set - -# -# Tulip family network device support -# # CONFIG_NET_TULIP is not set # CONFIG_HP100 is not set # CONFIG_NET_PCI is not set - -# -# Ethernet (1000 Mbit) -# +CONFIG_NETDEV_1000=y # CONFIG_ACENIC is not set # CONFIG_DL2K is not set # CONFIG_E1000 is not set @@ -632,29 +651,36 @@ CONFIG_SMC91X=y # CONFIG_SKGE is not set # CONFIG_SKY2 is not set # CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set # CONFIG_TIGON3 is not set # CONFIG_BNX2 is not set - -# -# Ethernet (10000 Mbit) -# +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y # CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set # CONFIG_IXGB is not set # CONFIG_S2IO is not set - -# -# Token Ring devices -# +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_MLX4_CORE is not set # CONFIG_TR is not set # -# Wireless LAN (non-hamradio) +# Wireless LAN # -# CONFIG_NET_RADIO is not set +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set # -# Wan interfaces +# USB Network Adapters # +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set # CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -665,16 +691,14 @@ CONFIG_SMC91X=y # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set - -# -# ISDN subsystem -# # CONFIG_ISDN is not set # # Input device support # CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set # # Userland interfaces @@ -695,13 +719,22 @@ CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +# CONFIG_TABLET_USB_ACECAD is not set +# CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set +# CONFIG_TABLET_USB_KBTAB is not set +CONFIG_TABLET_USB_WACOM=y # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set # CONFIG_INPUT_UINPUT is not set # @@ -721,6 +754,7 @@ CONFIG_SERIO_LIBPS2=y CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -738,36 +772,16 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# # CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# # CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=m # CONFIG_NVRAM is not set -# CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# # CONFIG_DRM is not set # CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# # CONFIG_TCG_TPM is not set -# CONFIG_TELCLOCK is not set - -# -# I2C support -# +CONFIG_DEVPORT=y # CONFIG_I2C is not set # @@ -775,31 +789,41 @@ CONFIG_UNIX98_PTYS=y # # CONFIG_SPI is not set # CONFIG_SPI_MASTER is not set - -# -# Dallas's 1-wire bus -# # CONFIG_W1 is not set - -# -# Hardware Monitoring support -# +# CONFIG_POWER_SUPPLY is not set CONFIG_HWMON=y # CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set # CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set # CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set # -# Misc devices +# Multifunction device drivers # +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set # # Multi-Function Devices # - -# -# LED devices -# CONFIG_NEW_LEDS=y # CONFIG_LEDS_CLASS is not set @@ -819,24 +843,66 @@ CONFIG_VIDEO_DEV=m CONFIG_VIDEO_V4L1=y CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_STRADIS is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_STV680 is not set +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_USB_DSBR is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set # -# Digital Video Broadcasting Devices +# Graphics support # -# CONFIG_DVB is not set -# CONFIG_USB_DABUSB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # -# Graphics support +# Display device support # +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set -CONFIG_FB_FIRMWARE_EDID=y +# CONFIG_FB_BACKLIGHT is not set CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# # CONFIG_FB_CIRRUS is not set # CONFIG_FB_PM2 is not set CONFIG_FB_ARMCLCD=y @@ -850,13 +916,17 @@ CONFIG_FB_ARMCLCD=y # CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set # CONFIG_FB_SAVAGE is not set # CONFIG_FB_SIS is not set # CONFIG_FB_NEOMAGIC is not set # CONFIG_FB_KYRO is not set # CONFIG_FB_3DFX is not set # CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set # CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set # CONFIG_FB_VIRTUAL is not set # @@ -864,14 +934,11 @@ CONFIG_FB_ARMCLCD=y # CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set # CONFIG_FONTS is not set CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y - -# -# Logo configuration -# CONFIG_LOGO=y CONFIG_LOGO_LINUX_MONO=y CONFIG_LOGO_LINUX_VGA16=y @@ -880,16 +947,23 @@ CONFIG_LOGO_OHAND_CLUT224=y # CONFIG_LOGO_OZ240_CLUT224 is not set # CONFIG_LOGO_OZ480_CLUT224 is not set # CONFIG_LOGO_OZ640_CLUT224 is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # # Sound # # CONFIG_SOUND is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set # -# USB support +# USB Input Devices # +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y @@ -900,9 +974,10 @@ CONFIG_USB=y # Miscellaneous USB options # # CONFIG_USB_DEVICEFS is not set -# CONFIG_USB_BANDWIDTH is not set +CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set # CONFIG_USB_OTG is not set # @@ -911,10 +986,12 @@ CONFIG_USB=y # CONFIG_USB_EHCI_HCD is not set # CONFIG_USB_ISP116X_HCD is not set CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_BIG_ENDIAN is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set # # USB Device Class drivers @@ -933,42 +1010,10 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_LIBUSUAL is not set # -# USB Input Devices -# -CONFIG_USB_HID=y - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -CONFIG_USB_WACOM=y -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -# CONFIG_USB_YEALINK is not set -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# # USB Imaging devices # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET is not set CONFIG_USB_MON=y # @@ -985,16 +1030,22 @@ CONFIG_USB_MON=y # # CONFIG_USB_EMI62 is not set # CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set # CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set # CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGETKIT is not set -# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_PHIDGET is not set # CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set # CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set # # USB DSL modem support @@ -1004,19 +1055,12 @@ CONFIG_USB_MON=y # USB Gadget Support # # CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# # CONFIG_MMC is not set - -# -# Real Time Clock -# CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set # # RTC interfaces @@ -1024,12 +1068,41 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0" CONFIG_RTC_INTF_SYSFS=y CONFIG_RTC_INTF_PROC=y CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set # -# RTC drivers +# SPI RTC drivers # + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_PL031 is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# # # File systems @@ -1038,14 +1111,23 @@ CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XATTR is not set # CONFIG_EXT2_FS_XIP is not set CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set # CONFIG_FS_POSIX_ACL is not set # CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set # CONFIG_OCFS2_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set CONFIG_DNOTIFY=y # CONFIG_AUTOFS_FS is not set @@ -1069,8 +1151,10 @@ CONFIG_DNOTIFY=y # Pseudo filesystems # CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y CONFIG_SYSFS=y CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y # CONFIG_CONFIGFS_FS is not set @@ -1085,13 +1169,15 @@ CONFIG_RAMFS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y # CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set CONFIG_CRAMFS=y @@ -1121,6 +1207,7 @@ CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set # CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_RPCSEC_GSS_SPKM3 is not set CONFIG_SMB_FS=y @@ -1129,7 +1216,6 @@ CONFIG_SMB_FS=y # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set # # Partition Types @@ -1151,6 +1237,7 @@ CONFIG_MSDOS_PARTITION=y # CONFIG_SUN_PARTITION is not set # CONFIG_KARMA_PARTITION is not set # CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set # # Native Language Support @@ -1197,6 +1284,11 @@ CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_UTF8 is not set # +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# # Profiling support # CONFIG_PROFILING=y @@ -1206,27 +1298,37 @@ CONFIG_OPROFILE=m # Kernel hacking # # CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y -CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DEBUG_SHIRQ is not set CONFIG_DETECT_SOFTLOCKUP=y -CONFIG_TIMER_STATS=y +CONFIG_SCHED_DEBUG=y # CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set -# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_FS is not set # CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set CONFIG_FRAME_POINTER=y -# CONFIG_UNWIND_INFO is not set CONFIG_FORCED_INLINING=y # CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set # CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_WAITQ is not set CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_LL is not set @@ -1235,23 +1337,61 @@ CONFIG_DEBUG_ERRORS=y # # CONFIG_KEYS is not set # CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Hardware crypto devices -# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_MANAGER=m +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y # # Library routines # +CONFIG_BITREVERSE=y # CONFIG_CRC_CCITT is not set # CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set CONFIG_CRC32=y +# CONFIG_CRC7 is not set # CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y -# CONFIG_SHARPSL_RC is not set +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 index bc3f9cce0d..5bc9a9ec26 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 +++ b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 @@ -1,45 +1,58 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.17 -# Mon Oct 16 19:42:42 2006 +# Linux kernel version: 2.6.23 +# Thu Jan 10 23:22:30 2008 # CONFIG_X86_32=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y CONFIG_SEMAPHORE_SLEEPERS=y CONFIG_X86=y CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_QUICKLIST=y CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y CONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_DMI=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # -# Code maturity level options +# General setup # CONFIG_EXPERIMENTAL=y CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y # CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=15 # CONFIG_CPUSETS is not set +CONFIG_SYSFS_DEPRECATED=y # CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" -CONFIG_UID16=y -CONFIG_VM86=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_EXTRA_PASS is not set CONFIG_HOTPLUG=y @@ -48,28 +61,29 @@ CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y +CONFIG_ANON_INODES=y CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y # CONFIG_TINY_SHMEM is not set CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# CONFIG_MODULES=y # CONFIG_MODULE_UNLOAD is not set # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set CONFIG_KMOD=y - -# -# Block layer -# +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y CONFIG_LBD=y # CONFIG_BLK_DEV_IO_TRACE is not set # CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set # # IO Schedulers @@ -87,6 +101,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" # # Processor type and features # +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set CONFIG_SMP=y CONFIG_X86_PC=y # CONFIG_X86_ELAN is not set @@ -97,6 +114,7 @@ CONFIG_X86_PC=y # CONFIG_X86_VISWS is not set # CONFIG_X86_GENERICARCH is not set # CONFIG_X86_ES7000 is not set +# CONFIG_PARAVIRT is not set CONFIG_M386=y # CONFIG_M486 is not set # CONFIG_M586 is not set @@ -106,6 +124,7 @@ CONFIG_M386=y # CONFIG_MPENTIUMII is not set # CONFIG_MPENTIUMIII is not set # CONFIG_MPENTIUMM is not set +# CONFIG_MCORE2 is not set # CONFIG_MPENTIUM4 is not set # CONFIG_MK6 is not set # CONFIG_MK7 is not set @@ -119,13 +138,17 @@ CONFIG_M386=y # CONFIG_MGEODE_LX is not set # CONFIG_MCYRIXIII is not set # CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set CONFIG_X86_GENERIC=y CONFIG_X86_L1_CACHE_SHIFT=7 CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_X86_PPRO_FENCE=y CONFIG_X86_F00F_BUG=y CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_MINIMUM_CPU_FAMILY=3 # CONFIG_HPET_TIMER is not set CONFIG_NR_CPUS=8 CONFIG_SCHED_SMT=y @@ -139,6 +162,7 @@ CONFIG_X86_IO_APIC=y CONFIG_X86_MCE=y CONFIG_X86_MCE_NONFATAL=y CONFIG_X86_MCE_P4THERMAL=y +CONFIG_VM86=y # CONFIG_TOSHIBA is not set # CONFIG_I8K is not set # CONFIG_X86_REBOOTFIXUPS is not set @@ -152,13 +176,21 @@ CONFIG_X86_MCE_P4THERMAL=y # CONFIG_EDD is not set # CONFIG_DELL_RBU is not set # CONFIG_DCDBAS is not set +CONFIG_DMIID=y CONFIG_NOHIGHMEM=y # CONFIG_HIGHMEM4G is not set # CONFIG_HIGHMEM64G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y # CONFIG_DISCONTIGMEM_MANUAL is not set @@ -167,20 +199,27 @@ CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_SPARSEMEM_STATIC=y CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_NR_QUICK=1 +CONFIG_VIRT_TO_BUS=y # CONFIG_MATH_EMULATION is not set CONFIG_MTRR=y # CONFIG_EFI is not set CONFIG_IRQBALANCE=y -# CONFIG_REGPARM is not set CONFIG_SECCOMP=y # CONFIG_HZ_100 is not set CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 CONFIG_KEXEC=y -CONFIG_ATAGS_PROC=y CONFIG_PHYSICAL_START=0x100000 -# CONFIG_HOTPLUG_CPU is not set +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_HOTPLUG_CPU=y +CONFIG_COMPAT_VDSO=y # # Power management options (ACPI, APM) @@ -188,22 +227,25 @@ CONFIG_PHYSICAL_START=0x100000 CONFIG_PM=y CONFIG_PM_LEGACY=y # CONFIG_PM_DEBUG is not set - -# -# ACPI (Advanced Configuration and Power Interface) Support -# +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_SMP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_HIBERNATION_SMP_POSSIBLE=y +# CONFIG_HIBERNATION is not set CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +# CONFIG_ACPI_PROCFS is not set +CONFIG_ACPI_PROC_EVENT=y CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y -CONFIG_ACPI_VIDEO=m -# CONFIG_ACPI_HOTKEY is not set CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_HOTPLUG_CPU=y CONFIG_ACPI_THERMAL=y # CONFIG_ACPI_ASUS is not set -CONFIG_ACPI_IBM=m -# CONFIG_ACPI_IBM_DOCK is not set # CONFIG_ACPI_TOSHIBA is not set CONFIG_ACPI_BLACKLIST_YEAR=0 # CONFIG_ACPI_DEBUG is not set @@ -211,11 +253,8 @@ CONFIG_ACPI_EC=y CONFIG_ACPI_POWER=y CONFIG_ACPI_SYSTEM=y CONFIG_X86_PM_TIMER=y -# CONFIG_ACPI_CONTAINER is not set - -# -# APM (Advanced Power Management) BIOS Support -# +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_SBS is not set # CONFIG_APM is not set # @@ -235,7 +274,9 @@ CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y CONFIG_PCI_MMCONFIG=y # CONFIG_PCIEPORTBUS is not set +CONFIG_ARCH_SUPPORTS_MSI=y # CONFIG_PCI_MSI is not set +CONFIG_HT_IRQ=y CONFIG_ISA_DMA_API=y CONFIG_ISA=y # CONFIG_EISA is not set @@ -246,10 +287,6 @@ CONFIG_ISA=y # PCCARD (PCMCIA/CardBus) support # # CONFIG_PCCARD is not set - -# -# PCI Hotplug Support -# # CONFIG_HOTPLUG_PCI is not set # @@ -267,10 +304,13 @@ CONFIG_NET=y # # Networking options # -# CONFIG_NETDEBUG is not set -CONFIG_PACKET=y +CONFIG_PACKET=m # CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set # CONFIG_NET_KEY is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y @@ -290,18 +330,20 @@ CONFIG_IP_PNP_BOOTP=y # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set # CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y # CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_BIC=y - -# -# IP: Virtual Server Configuration -# +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set # CONFIG_INET6_XFRM_TUNNEL is not set # CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -364,20 +406,8 @@ CONFIG_IP_NF_RAW=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m CONFIG_IP_NF_ARP_MANGLE=m - -# -# DCCP Configuration (EXPERIMENTAL) -# # CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# # CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_BRIDGE is not set @@ -388,7 +418,6 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set @@ -404,7 +433,17 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_HAMRADIO is not set # CONFIG_IRDA is not set # CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set # CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set # # Device Drivers @@ -416,31 +455,18 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=m - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y # CONFIG_MTD is not set - -# -# Parallel port support -# CONFIG_PARPORT=y CONFIG_PARPORT_PC=y # CONFIG_PARPORT_SERIAL is not set # CONFIG_PARPORT_PC_FIFO is not set # CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set # CONFIG_PARPORT_1284 is not set - -# -# Plug and Play support -# CONFIG_PNP=y # CONFIG_PNP_DEBUG is not set @@ -450,10 +476,7 @@ CONFIG_PNP=y # CONFIG_ISAPNP is not set # CONFIG_PNPBIOS is not set CONFIG_PNPACPI=y - -# -# Block devices -# +CONFIG_BLK_DEV=y CONFIG_BLK_DEV_FD=y # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set @@ -469,14 +492,19 @@ CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=51200 -CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set - -# -# ATA/ATAPI/MFM/RLL support -# +CONFIG_MISC_DEVICES=y +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_SONY_LAPTOP is not set +# CONFIG_THINKPAD_ACPI is not set CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 CONFIG_BLK_DEV_IDE=y # @@ -490,7 +518,9 @@ CONFIG_BLK_DEV_IDECD=y # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_IDEACPI is not set # CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y # # IDE chipset support/bugfixes @@ -501,13 +531,13 @@ CONFIG_BLK_DEV_CMD640=y # CONFIG_BLK_DEV_IDEPNP is not set CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_IDEPCI_PCIBUS_ORDER=y # CONFIG_BLK_DEV_OFFBOARD is not set CONFIG_BLK_DEV_GENERIC=y # CONFIG_BLK_DEV_OPTI621 is not set CONFIG_BLK_DEV_RZ1000=y CONFIG_BLK_DEV_IDEDMA_PCI=y # CONFIG_BLK_DEV_IDEDMA_FORCED is not set -CONFIG_IDEDMA_PCI_AUTO=y # CONFIG_IDEDMA_ONLYDISK is not set # CONFIG_BLK_DEV_AEC62XX is not set # CONFIG_BLK_DEV_ALI15X3 is not set @@ -521,8 +551,10 @@ CONFIG_IDEDMA_PCI_AUTO=y # CONFIG_BLK_DEV_CS5535 is not set # CONFIG_BLK_DEV_HPT34X is not set # CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_JMICRON is not set # CONFIG_BLK_DEV_SC1200 is not set CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_IT8213 is not set # CONFIG_BLK_DEV_IT821X is not set # CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_PDC202XX_OLD is not set @@ -533,11 +565,11 @@ CONFIG_BLK_DEV_PIIX=y # CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_TC86C001 is not set # CONFIG_IDE_ARM is not set # CONFIG_IDE_CHIPSETS is not set CONFIG_BLK_DEV_IDEDMA=y # CONFIG_IDEDMA_IVB is not set -CONFIG_IDEDMA_AUTO=y # CONFIG_BLK_DEV_HD is not set # @@ -545,6 +577,9 @@ CONFIG_IDEDMA_AUTO=y # # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set CONFIG_SCSI_PROC_FS=y # @@ -563,18 +598,17 @@ CONFIG_CHR_DEV_SG=y # CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m # -# SCSI Transport Attributes +# SCSI Transports # # CONFIG_SCSI_SPI_ATTRS is not set # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set - -# -# SCSI low-level drivers -# +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y # CONFIG_ISCSI_TCP is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_SCSI_3W_9XXX is not set @@ -586,29 +620,15 @@ CONFIG_CHR_DEV_SG=y # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set CONFIG_SCSI_DPT_I2O=m # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_ARCMSR is not set # CONFIG_MEGARAID_NEWGEN is not set # CONFIG_MEGARAID_LEGACY is not set # CONFIG_MEGARAID_SAS is not set -CONFIG_SCSI_SATA=y -# CONFIG_SCSI_SATA_AHCI is not set -# CONFIG_SCSI_SATA_SVW is not set -CONFIG_SCSI_ATA_PIIX=y -# CONFIG_SCSI_SATA_MV is not set -# CONFIG_SCSI_SATA_NV is not set -# CONFIG_SCSI_PDC_ADMA is not set -# CONFIG_SCSI_SATA_QSTOR is not set -# CONFIG_SCSI_SATA_PROMISE is not set -CONFIG_SCSI_SATA_SX4=m -# CONFIG_SCSI_SATA_SIL is not set -# CONFIG_SCSI_SATA_SIL24 is not set -CONFIG_SCSI_SATA_SIS=m -# CONFIG_SCSI_SATA_ULI is not set -# CONFIG_SCSI_SATA_VIA is not set -# CONFIG_SCSI_SATA_VITESSE is not set -CONFIG_SCSI_SATA_INTEL_COMBINED=y +# CONFIG_SCSI_HPTIOP is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DTC3280 is not set @@ -623,16 +643,16 @@ CONFIG_SCSI_SATA_INTEL_COMBINED=y # CONFIG_SCSI_PPA is not set # CONFIG_SCSI_IMM is not set # CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_STEX is not set # CONFIG_SCSI_SYM53C8XX_2 is not set -CONFIG_SCSI_IPR=m -# CONFIG_SCSI_IPR_TRACE is not set -# CONFIG_SCSI_IPR_DUMP is not set # CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set # CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_SEAGATE is not set # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC390T is not set @@ -641,23 +661,20 @@ CONFIG_SCSI_IPR=m # CONFIG_SCSI_ULTRASTOR is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set - -# -# Old CD-ROM drivers (not SCSI, not IDE) -# -# CONFIG_CD_NO_IDESCSI is not set - -# -# Multi-device support (RAID and LVM) -# +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m CONFIG_DM_MIRROR=m CONFIG_DM_ZERO=m CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_DELAY is not set # # Fusion MPT device support @@ -670,18 +687,16 @@ CONFIG_DM_MULTIPATH_EMC=m # # IEEE 1394 (FireWire) support # +# CONFIG_FIREWIRE is not set CONFIG_IEEE1394=y # # Subsystem Options # # CONFIG_IEEE1394_VERBOSEDEBUG is not set -# CONFIG_IEEE1394_OUI_DB is not set -# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set -# CONFIG_IEEE1394_EXPORT_FULL_API is not set # -# Device Drivers +# Controllers # # @@ -690,42 +705,26 @@ CONFIG_IEEE1394=y CONFIG_IEEE1394_OHCI1394=y # -# Protocol Drivers +# Protocols # # CONFIG_IEEE1394_VIDEO1394 is not set # CONFIG_IEEE1394_SBP2 is not set +# CONFIG_IEEE1394_ETH1394_ROM_ENTRY is not set # CONFIG_IEEE1394_ETH1394 is not set # CONFIG_IEEE1394_DV1394 is not set CONFIG_IEEE1394_RAWIO=y - -# -# I2O device support -# # CONFIG_I2O is not set - -# -# Network device support -# +# CONFIG_MACINTOSH_DRIVERS is not set CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set CONFIG_DUMMY=m # CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set # CONFIG_NET_SB1000 is not set - -# -# ARCnet devices -# # CONFIG_ARCNET is not set - -# -# PHY device support -# # CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# CONFIG_NET_ETHERNET=y CONFIG_MII=y # CONFIG_HAPPYMEAL is not set @@ -735,10 +734,6 @@ CONFIG_MII=y # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set - -# -# Tulip family network device support -# # CONFIG_NET_TULIP is not set # CONFIG_AT1700 is not set # CONFIG_DEPCA is not set @@ -781,11 +776,9 @@ CONFIG_8139TOO_PIO=y # CONFIG_SUNDANCE is not set # CONFIG_TLAN is not set # CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set # CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# +CONFIG_NETDEV_1000=y # CONFIG_ACENIC is not set # CONFIG_DL2K is not set # CONFIG_E1000 is not set @@ -800,28 +793,34 @@ CONFIG_8139TOO_PIO=y # CONFIG_VIA_VELOCITY is not set # CONFIG_TIGON3 is not set # CONFIG_BNX2 is not set - -# -# Ethernet (10000 Mbit) -# +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y # CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set # CONFIG_IXGB is not set CONFIG_S2IO=m # CONFIG_S2IO_NAPI is not set - -# -# Token Ring devices -# +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_MLX4_CORE is not set # CONFIG_TR is not set # -# Wireless LAN (non-hamradio) +# Wireless LAN # -# CONFIG_NET_RADIO is not set +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set # -# Wan interfaces +# USB Network Adapters # +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set # CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -833,21 +832,15 @@ CONFIG_S2IO=m # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set - -# -# ISDN subsystem -# # CONFIG_ISDN is not set - -# -# Telephony Support -# # CONFIG_PHONE is not set # # Input device support # CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set # # Userland interfaces @@ -868,14 +861,15 @@ CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_INPUT_MOUSE is not set -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_INPORT is not set -# CONFIG_MOUSE_LOGIBM is not set -# CONFIG_MOUSE_PC110PAD is not set -# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +# CONFIG_TABLET_USB_ACECAD is not set +# CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set +# CONFIG_TABLET_USB_KBTAB is not set +CONFIG_TABLET_USB_WACOM=y # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set @@ -898,6 +892,7 @@ CONFIG_SERIO_LIBPS2=y CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -905,6 +900,7 @@ CONFIG_HW_CONSOLE=y # CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_PNP=y CONFIG_SERIAL_8250_NR_UARTS=4 @@ -922,15 +918,7 @@ CONFIG_PRINTER=y # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set # CONFIG_TIPAR is not set - -# -# IPMI -# # CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# # CONFIG_WATCHDOG is not set # CONFIG_HW_RANDOM is not set # CONFIG_NVRAM is not set @@ -940,10 +928,6 @@ CONFIG_PRINTER=y # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set # CONFIG_SONYPI is not set - -# -# Ftape, the floppy tape device driver -# CONFIG_AGP=y # CONFIG_AGP_ALI is not set # CONFIG_AGP_ATI is not set @@ -967,20 +951,15 @@ CONFIG_DRM=y # CONFIG_DRM_VIA is not set # CONFIG_DRM_SAVAGE is not set # CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set # CONFIG_CS5535_GPIO is not set # CONFIG_RAW_DRIVER is not set # CONFIG_HPET is not set # CONFIG_HANGCHECK_TIMER is not set - -# -# TPM devices -# # CONFIG_TCG_TPM is not set # CONFIG_TELCLOCK is not set - -# -# I2C support -# +CONFIG_DEVPORT=y # CONFIG_I2C is not set # @@ -988,25 +967,36 @@ CONFIG_DRM=y # # CONFIG_SPI is not set # CONFIG_SPI_MASTER is not set - -# -# Dallas's 1-wire bus -# # CONFIG_W1 is not set - -# -# Hardware Monitoring support -# +# CONFIG_POWER_SUPPLY is not set CONFIG_HWMON=y # CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_K8TEMP is not set # CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_CORETEMP is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set # CONFIG_SENSORS_HDAPS is not set +# CONFIG_SENSORS_APPLESMC is not set # CONFIG_HWMON_DEBUG_CHIP is not set # -# Misc devices +# Multifunction device drivers # -# CONFIG_IBM_ASM is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set # # Multi-Function Devices @@ -1019,54 +1009,113 @@ CONFIG_VIDEO_DEV=m CONFIG_VIDEO_V4L1=y CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_STRADIS is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_STV680 is not set +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set +# CONFIG_USB_DSBR is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set # -# Digital Video Broadcasting Devices +# Graphics support # -# CONFIG_DVB is not set -# CONFIG_USB_DABUSB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # -# Graphics support +# Display device support # +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_FB=y -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=m +CONFIG_FB_CFB_COPYAREA=m +CONFIG_FB_CFB_IMAGEBLIT=m +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set -CONFIG_FB_FIRMWARE_EDID=y +# CONFIG_FB_BACKLIGHT is not set CONFIG_FB_MODE_HELPERS=y # CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# # CONFIG_FB_CIRRUS is not set # CONFIG_FB_PM2 is not set # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_ARC is not set # CONFIG_FB_ASILIANT is not set # CONFIG_FB_IMSTT is not set -CONFIG_FB_VGA16=y -CONFIG_FB_VESA=y -# CONFIG_FB_VESA_STD is not set -CONFIG_FB_VESA_TNG=y -CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60" -CONFIG_VIDEO_SELECT=y +# CONFIG_FB_VGA16 is not set +CONFIG_FB_UVESA=m +# CONFIG_FB_VESA is not set +# CONFIG_FB_HECUBA is not set # CONFIG_FB_HGA is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_NVIDIA is not set # CONFIG_FB_RIVA is not set # CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set # CONFIG_FB_INTEL is not set # CONFIG_FB_MATROX is not set # CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set # CONFIG_FB_SAVAGE is not set # CONFIG_FB_SIS is not set # CONFIG_FB_NEOMAGIC is not set # CONFIG_FB_KYRO is not set # CONFIG_FB_3DFX is not set # CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set # CONFIG_FB_CYBLA is not set # CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set # CONFIG_FB_GEODE is not set # CONFIG_FB_VIRTUAL is not set @@ -1075,9 +1124,11 @@ CONFIG_VIDEO_SELECT=y # CONFIG_VGA_CONSOLE=y # CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=y # CONFIG_MDA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set CONFIG_FONTS=y CONFIG_FONT_8x8=y @@ -1090,10 +1141,6 @@ CONFIG_FONT_8x16=y # CONFIG_FONT_SUN8x16 is not set # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set - -# -# Logo configuration -# CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set @@ -1102,7 +1149,6 @@ CONFIG_LOGO_OHAND_CLUT224=y # CONFIG_LOGO_OZ240_CLUT224 is not set # CONFIG_LOGO_OZ480_CLUT224 is not set # CONFIG_LOGO_OZ640_CLUT224 is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # # Sound @@ -1132,12 +1178,13 @@ CONFIG_SND_VERBOSE_PROCFS=y # Generic devices # CONFIG_SND_AC97_CODEC=y -CONFIG_SND_AC97_BUS=y # CONFIG_SND_DUMMY is not set # CONFIG_SND_VIRMIDI is not set # CONFIG_SND_MTPAV is not set +# CONFIG_SND_MTS64 is not set # CONFIG_SND_SERIAL_U16550 is not set # CONFIG_SND_MPU401 is not set +# CONFIG_SND_PORTMAN2X4 is not set # # ISA devices @@ -1190,7 +1237,20 @@ CONFIG_SND_AC97_BUS=y # CONFIG_SND_CMIPCI is not set # CONFIG_SND_CS4281 is not set # CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set # CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set # CONFIG_SND_EMU10K1 is not set # CONFIG_SND_EMU10K1X is not set # CONFIG_SND_ENS1370 is not set @@ -1220,26 +1280,41 @@ CONFIG_SND_INTEL8X0=y # CONFIG_SND_VIA82XX_MODEM is not set # CONFIG_SND_VX222 is not set # CONFIG_SND_YMFPCI is not set +# CONFIG_SND_AC97_POWER_SAVE is not set # # USB devices # # CONFIG_SND_USB_AUDIO is not set # CONFIG_SND_USB_USX2Y is not set +# CONFIG_SND_USB_CAIAQ is not set # -# SoC audio support +# System on Chip audio support # # CONFIG_SND_SOC is not set # +# SoC Audio support for SuperH +# + +# # Open Sound System # # CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=y +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set # -# USB support +# USB Input Devices # +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y @@ -1250,9 +1325,10 @@ CONFIG_USB=y # Miscellaneous USB options # CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set +CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set # CONFIG_USB_OTG is not set # @@ -1261,10 +1337,15 @@ CONFIG_USB_DEVICEFS=y CONFIG_USB_EHCI_HCD=y # CONFIG_USB_EHCI_SPLIT_ISO is not set # CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_EHCI_TT_NEWSCHED is not set # CONFIG_USB_ISP116X_HCD is not set CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=y # CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set # # USB Device Class drivers @@ -1290,43 +1371,14 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_LIBUSUAL is not set # -# USB Input Devices -# -CONFIG_USB_HID=y -CONFIG_USB_HIDINPUT=y -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set -# CONFIG_USB_AIPTEK is not set -CONFIG_USB_WACOM=y -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -# CONFIG_USB_YEALINK is not set -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# # USB Imaging devices # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET is not set CONFIG_USB_MON=y # @@ -1344,17 +1396,23 @@ CONFIG_USB_MON=y # # CONFIG_USB_EMI62 is not set # CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set # CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set # CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set CONFIG_USB_CYTHERM=m -# CONFIG_USB_PHIDGETKIT is not set -CONFIG_USB_PHIDGETSERVO=m +# CONFIG_USB_PHIDGET is not set # CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set # CONFIG_USB_SISUSBVGA is not set # CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # @@ -1365,39 +1423,32 @@ CONFIG_USB_PHIDGETSERVO=m # USB Gadget Support # # CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# # CONFIG_MMC is not set - -# -# LED devices -# # CONFIG_NEW_LEDS is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +# CONFIG_RTC_CLASS is not set # -# LED drivers +# DMA Engine support # +# CONFIG_DMA_ENGINE is not set # -# LED Triggers +# DMA Clients # # -# InfiniBand support +# DMA Devices # -# CONFIG_INFINIBAND is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_VIRTUALIZATION=y +# CONFIG_KVM is not set # -# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# Userspace I/O # -# CONFIG_EDAC is not set - -# -# Real Time Clock -# -# CONFIG_RTC_CLASS is not set +# CONFIG_UIO is not set # # File systems @@ -1409,6 +1460,7 @@ CONFIG_EXT3_FS=y CONFIG_EXT3_FS_XATTR=y # CONFIG_EXT3_FS_POSIX_ACL is not set # CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set CONFIG_FS_MBCACHE=y @@ -1416,10 +1468,12 @@ CONFIG_FS_MBCACHE=y # CONFIG_JFS_FS is not set # CONFIG_FS_POSIX_ACL is not set # CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set # CONFIG_OCFS2_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y # CONFIG_QUOTA is not set CONFIG_DNOTIFY=y # CONFIG_AUTOFS_FS is not set @@ -1450,8 +1504,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y CONFIG_SYSFS=y CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLBFS is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y @@ -1490,6 +1546,7 @@ CONFIG_LOCKD=y CONFIG_EXPORTFS=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set # CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_RPCSEC_GSS_SPKM3 is not set # CONFIG_SMB_FS is not set @@ -1497,7 +1554,6 @@ CONFIG_SUNRPC=y # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set # # Partition Types @@ -1550,8 +1606,10 @@ CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_UTF8 is not set # -# Instrumentation Support +# Distributed Lock Manager # +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y CONFIG_PROFILING=y CONFIG_OPROFILE=y # CONFIG_KPROBES is not set @@ -1559,16 +1617,16 @@ CONFIG_OPROFILE=y # # Kernel hacking # +CONFIG_TRACE_IRQFLAGS_SUPPORT=y # CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y # CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_KERNEL is not set -CONFIG_LOG_BUF_SHIFT=15 -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_TIMER_STATS=y +CONFIG_UNUSED_SYMBOLS=y # CONFIG_DEBUG_FS is not set -# CONFIG_UNWIND_INFO is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set CONFIG_EARLY_PRINTK=y -CONFIG_STACK_BACKTRACE_COLS=2 CONFIG_X86_FIND_SMP_CONFIG=y CONFIG_X86_MPPARSE=y CONFIG_DOUBLEFAULT=y @@ -1578,23 +1636,67 @@ CONFIG_DOUBLEFAULT=y # # CONFIG_KEYS is not set # CONFIG_SECURITY is not set - -# -# Cryptographic options -# -# CONFIG_CRYPTO is not set - -# -# Hardware crypto devices -# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_MANAGER=m +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_TWOFISH_586 is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_AES_586 is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_GEODE=m # # Library routines # +CONFIG_BITREVERSE=y # CONFIG_CRC_CCITT is not set # CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set CONFIG_CRC32=y +# CONFIG_CRC7 is not set CONFIG_LIBCRC32C=m +CONFIG_AUDIT_GENERIC=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=y @@ -1603,4 +1705,3 @@ CONFIG_X86_HT=y CONFIG_X86_BIOS_REBOOT=y CONFIG_X86_TRAMPOLINE=y CONFIG_KTIME_SCALAR=y -# CONFIG_SHARPSL_RC is not set diff --git a/packages/linux/linux-rp-2.6.23/defconfig-spitz b/packages/linux/linux-rp-2.6.23/defconfig-spitz index 74d7f828a0..a18218f2d1 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-spitz +++ b/packages/linux/linux-rp-2.6.23/defconfig-spitz @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set @@ -288,7 +288,7 @@ CONFIG_NET=y # # Networking options # -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y diff --git a/packages/linux/linux-rp-2.6.23/defconfig-tosa b/packages/linux/linux-rp-2.6.23/defconfig-tosa index f80caf7d16..5173e242a8 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-tosa +++ b/packages/linux/linux-rp-2.6.23/defconfig-tosa @@ -26,7 +26,7 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_SYSCTL=y # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set @@ -244,7 +244,7 @@ CONFIG_NET=y # Networking options # # CONFIG_NETDEBUG is not set -CONFIG_PACKET=y +CONFIG_PACKET=m CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y diff --git a/packages/linux/linux-rp-2.6.23/defconfig-zylonite b/packages/linux/linux-rp-2.6.23/defconfig-zylonite index 13fd6e3886..8be4a3bd47 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-zylonite +++ b/packages/linux/linux-rp-2.6.23/defconfig-zylonite @@ -271,7 +271,7 @@ CONFIG_NET=y # # Networking options # -# CONFIG_PACKET is not set +CONFIG_PACKET=m CONFIG_UNIX=y CONFIG_XFRM=y # CONFIG_XFRM_USER is not set diff --git a/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch b/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch deleted file mode 100644 index ac2245f088..0000000000 --- a/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- - drivers/mmc/core/sd.c | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) - -Index: linux-2.6.23/drivers/mmc/core/sd.c -=================================================================== ---- linux-2.6.23.orig/drivers/mmc/core/sd.c 2007-10-17 11:33:26.000000000 +0200 -+++ linux-2.6.23/drivers/mmc/core/sd.c 2007-10-17 11:33:49.000000000 +0200 -@@ -173,14 +173,15 @@ - - scr_struct = UNSTUFF_BITS(resp, 60, 4); - if (scr_struct != 0) { -- printk(KERN_ERR "%s: unrecognised SCR structure version %d\n", -+ printk(KERN_WARNING "%s: unrecognised SCR structure version %d\n", - mmc_hostname(card->host), scr_struct); -- return -EINVAL; -+ scr->sda_vsn = 0; -+ scr->bus_widths = 0; -+ } else { -+ scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4); -+ scr->bus_widths = UNSTUFF_BITS(resp, 48, 4); - } - -- scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4); -- scr->bus_widths = UNSTUFF_BITS(resp, 48, 4); -- - return 0; - } - diff --git a/packages/linux/linux-rp-2.6.23/pda-power.patch b/packages/linux/linux-rp-2.6.23/pda-power.patch deleted file mode 100644 index face2f4ef2..0000000000 --- a/packages/linux/linux-rp-2.6.23/pda-power.patch +++ /dev/null @@ -1,3373 +0,0 @@ ---- - arch/arm/Kconfig | 2 - drivers/Kconfig | 2 - drivers/Makefile | 1 - drivers/power/Kconfig | 70 +++++ - drivers/power/Makefile | 28 ++ - drivers/power/adc_battery.c | 278 +++++++++++++++++++++ - drivers/power/apm_power.c | 247 +++++++++++++++++++ - drivers/power/ds2760_battery.c | 475 +++++++++++++++++++++++++++++++++++++ - drivers/power/micro_battery.c | 257 ++++++++++++++++++++ - drivers/power/olpc_battery.c | 302 +++++++++++++++++++++++ - drivers/power/pda_power.c | 263 ++++++++++++++++++++ - drivers/power/pmu_battery.c | 215 ++++++++++++++++ - drivers/power/power_supply.h | 42 +++ - drivers/power/power_supply_core.c | 168 +++++++++++++ - drivers/power/power_supply_leds.c | 188 ++++++++++++++ - drivers/power/power_supply_sysfs.c | 289 ++++++++++++++++++++++ - drivers/power/simpad-battery.c | 242 ++++++++++++++++++ - include/linux/power_supply.h | 175 +++++++++++++ - 18 files changed, 3244 insertions(+) - -Index: linux-2.6.22/drivers/power/adc_battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/adc_battery.c 2007-08-23 12:26:28.000000000 +0200 -@@ -0,0 +1,278 @@ -+/* -+ * Copyright (c) 2007 Paul Sokolovsky -+ * -+ * 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. -+ * -+ */ -+ -+//#define DEBUG -+ -+#include <linux/module.h> -+#include <linux/interrupt.h> -+#include <linux/pm.h> -+#include <linux/delay.h> -+#include <linux/workqueue.h> -+#include <linux/platform_device.h> -+#include <linux/power_supply.h> -+#include <linux/adc.h> -+#include <linux/adc_battery.h> -+ -+#include <asm/irq.h> -+ -+#define PIN_NO_VOLT 0 -+#define PIN_NO_CURR 1 -+#define PIN_NO_TEMP 2 -+ -+struct battery_adc_priv { -+ struct power_supply batt_cdev; -+ -+ struct battery_adc_platform_data *pdata; -+ -+ struct adc_request req; -+ struct adc_sense pins[3]; -+ struct adc_sense last_good_pins[3]; -+ -+ struct workqueue_struct *wq; -+ struct delayed_work work; -+}; -+ -+/* -+ * Battery properties -+ */ -+ -+static int adc_battery_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ struct battery_adc_priv* drvdata = (struct battery_adc_priv*)psy; -+ int voltage; -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_STATUS: -+ val->intval = drvdata->pdata->charge_status; -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: -+ val->intval = drvdata->pdata->battery_info.voltage_max_design; -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: -+ val->intval = drvdata->pdata->battery_info.voltage_min_design; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: -+ val->intval = drvdata->pdata->battery_info.charge_full_design; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN: -+ val->intval = drvdata->pdata->battery_info.charge_empty_design; -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_NOW: -+ val->intval = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult; -+ break; -+ case POWER_SUPPLY_PROP_CURRENT_NOW: -+ val->intval = drvdata->last_good_pins[PIN_NO_CURR].value * drvdata->pdata->current_mult; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_NOW: -+ /* We do calculations in mX, not uX, because todo it in uX we should use "long long"s, -+ * which is a mess (need to use do_div) when you need divide operation). */ -+ voltage = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult; -+ val->intval = ((voltage/1000 - drvdata->pdata->battery_info.voltage_min_design/1000) * -+ (drvdata->pdata->battery_info.charge_full_design/1000 - -+ drvdata->pdata->battery_info.charge_empty_design/1000)) / -+ (drvdata->pdata->battery_info.voltage_max_design/1000 - -+ drvdata->pdata->battery_info.voltage_min_design/1000); -+ val->intval *= 1000; /* convert final result to uX */ -+ break; -+ case POWER_SUPPLY_PROP_TEMP: -+ val->intval = drvdata->last_good_pins[PIN_NO_TEMP].value * drvdata->pdata->temperature_mult / 1000; -+ break; -+ default: -+ return -EINVAL; -+ }; -+ return 0; -+} -+ -+/* -+ * Driver body -+ */ -+ -+static void adc_battery_query(struct battery_adc_priv *drvdata) -+{ -+ struct battery_adc_platform_data *pdata = drvdata->pdata; -+ int powered, charging; -+ -+ adc_request_sample(&drvdata->req); -+ -+ powered = power_supply_am_i_supplied(&drvdata->batt_cdev); -+ charging = pdata->is_charging ? pdata->is_charging() : -1; -+ -+ if (powered && charging) -+ pdata->charge_status = POWER_SUPPLY_STATUS_CHARGING; -+ else if (powered && !charging && charging != -1) -+ pdata->charge_status = POWER_SUPPLY_STATUS_FULL; -+ else -+ pdata->charge_status = POWER_SUPPLY_STATUS_DISCHARGING; -+ -+ /* Throw away invalid samples, this may happen soon after resume for example. */ -+ if (drvdata->pins[PIN_NO_VOLT].value > 0) { -+ memcpy(drvdata->last_good_pins, drvdata->pins, sizeof(drvdata->pins)); -+#ifdef DEBUG -+ printk("%d %d %d\n", drvdata->pins[PIN_NO_VOLT].value, -+ drvdata->pins[PIN_NO_CURR].value, -+ drvdata->pins[PIN_NO_TEMP].value); -+#endif -+ } -+} -+ -+static void adc_battery_charge_power_changed(struct power_supply *bat) -+{ -+ struct battery_adc_priv *drvdata = (struct battery_adc_priv*)bat; -+ cancel_delayed_work(&drvdata->work); -+ queue_delayed_work(drvdata->wq, &drvdata->work, 0); -+} -+ -+static void adc_battery_work_func(struct work_struct *work) -+{ -+ struct delayed_work *delayed_work = container_of(work, struct delayed_work, work); -+ struct battery_adc_priv *drvdata = container_of(delayed_work, struct battery_adc_priv, work); -+ -+ adc_battery_query(drvdata); -+ power_supply_changed(&drvdata->batt_cdev); -+ -+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000); -+} -+ -+static int adc_battery_probe(struct platform_device *pdev) -+{ -+ int retval; -+ struct battery_adc_platform_data *pdata = pdev->dev.platform_data; -+ struct battery_adc_priv *drvdata; -+ int i, j; -+ enum power_supply_property props[] = { -+ POWER_SUPPLY_PROP_STATUS, -+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, -+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, -+ POWER_SUPPLY_PROP_VOLTAGE_NOW, -+ POWER_SUPPLY_PROP_CURRENT_NOW, -+ POWER_SUPPLY_PROP_CHARGE_NOW, -+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, -+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN, -+ POWER_SUPPLY_PROP_TEMP, -+ }; -+ -+ // Initialize ts data structure. -+ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); -+ if (!drvdata) -+ return -ENOMEM; -+ -+ drvdata->batt_cdev.name = pdata->battery_info.name; -+ drvdata->batt_cdev.use_for_apm = pdata->battery_info.use_for_apm; -+ drvdata->batt_cdev.num_properties = ARRAY_SIZE(props); -+ drvdata->batt_cdev.get_property = adc_battery_get_property; -+ drvdata->batt_cdev.external_power_changed = -+ adc_battery_charge_power_changed; -+ -+ if (!pdata->voltage_pin) { -+ drvdata->batt_cdev.num_properties--; -+ props[3] = -1; -+ } -+ if (!pdata->current_pin) { -+ drvdata->batt_cdev.num_properties--; -+ props[4] = -1; -+ } -+ if (!pdata->temperature_pin) { -+ drvdata->batt_cdev.num_properties--; -+ props[8] = -1; -+ } -+ -+ drvdata->batt_cdev.properties = kmalloc( -+ sizeof(*drvdata->batt_cdev.properties) * -+ drvdata->batt_cdev.num_properties, GFP_KERNEL); -+ if (!drvdata->batt_cdev.properties) -+ return -ENOMEM; -+ -+ j = 0; -+ for (i = 0; i < ARRAY_SIZE(props); i++) { -+ if (props[i] == -1) -+ continue; -+ drvdata->batt_cdev.properties[j++] = props[i]; -+ } -+ -+ retval = power_supply_register(&pdev->dev, &drvdata->batt_cdev); -+ if (retval) { -+ printk("adc-battery: Error registering battery classdev"); -+ return retval; -+ } -+ -+ drvdata->req.senses = drvdata->pins; -+ drvdata->req.num_senses = ARRAY_SIZE(drvdata->pins); -+ drvdata->pins[PIN_NO_VOLT].name = pdata->voltage_pin; -+ drvdata->pins[PIN_NO_CURR].name = pdata->current_pin; -+ drvdata->pins[PIN_NO_TEMP].name = pdata->temperature_pin; -+ -+ adc_request_register(&drvdata->req); -+ -+ /* Here we assume raw values in mV */ -+ if (!pdata->voltage_mult) -+ pdata->voltage_mult = 1000; -+ /* Here we assume raw values in mA */ -+ if (!pdata->current_mult) -+ pdata->current_mult = 1000; -+ /* Here we assume raw values in 1/10 C */ -+ if (!pdata->temperature_mult) -+ pdata->temperature_mult = 1000; -+ -+ drvdata->pdata = pdata; -+ pdata->drvdata = drvdata; /* Seems ugly, we need better solution */ -+ -+ platform_set_drvdata(pdev, drvdata); -+ -+ // Load initial values ASAP -+ adc_battery_query(drvdata); -+ -+ // Still schedule next sampling soon -+ INIT_DELAYED_WORK(&drvdata->work, adc_battery_work_func); -+ drvdata->wq = create_workqueue(pdev->dev.bus_id); -+ if (!drvdata->wq) -+ return -ESRCH; -+ -+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000); -+ -+ return retval; -+} -+ -+static int adc_battery_remove(struct platform_device *pdev) -+{ -+ struct battery_adc_priv *drvdata = platform_get_drvdata(pdev); -+ cancel_delayed_work(&drvdata->work); -+ destroy_workqueue(drvdata->wq); -+ power_supply_unregister(&drvdata->batt_cdev); -+ adc_request_unregister(&drvdata->req); -+ kfree(drvdata->batt_cdev.properties); -+ return 0; -+} -+ -+static struct platform_driver adc_battery_driver = { -+ .driver = { -+ .name = "adc-battery", -+ }, -+ .probe = adc_battery_probe, -+ .remove = adc_battery_remove, -+}; -+ -+static int __init adc_battery_init(void) -+{ -+ return platform_driver_register(&adc_battery_driver); -+} -+ -+static void __exit adc_battery_exit(void) -+{ -+ platform_driver_unregister(&adc_battery_driver); -+} -+ -+module_init(adc_battery_init) -+module_exit(adc_battery_exit) -+ -+MODULE_AUTHOR("Paul Sokolovsky"); -+MODULE_DESCRIPTION("Battery driver for ADC device"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.22/drivers/power/apm_power.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/apm_power.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,247 @@ -+/* -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2007 Eugeny Boger <eugenyboger@dgap.mipt.ru> -+ * -+ * Author: Eugeny Boger <eugenyboger@dgap.mipt.ru> -+ * -+ * Use consistent with the GNU GPL is permitted, -+ * provided that this copyright notice is -+ * preserved in its entirety in all copies and derived works. -+ */ -+ -+#include <linux/module.h> -+#include <linux/power_supply.h> -+#include <linux/apm-emulation.h> -+ -+#define PSY_PROP(psy, prop, val) psy->get_property(psy, \ -+ POWER_SUPPLY_PROP_##prop, val) -+ -+#define _MPSY_PROP(prop, val) main_battery->get_property(main_battery, \ -+ prop, val) -+ -+#define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val) -+ -+static struct power_supply *main_battery; -+ -+static void find_main_battery(void) -+{ -+ struct device *dev; -+ struct power_supply *bat, *batm; -+ union power_supply_propval full; -+ int max_charge = 0; -+ -+ main_battery = NULL; -+ batm = NULL; -+ list_for_each_entry(dev, &power_supply_class->devices, node) { -+ bat = dev_get_drvdata(dev); -+ /* If none of battery devices cantains 'use_for_apm' flag, -+ choice one with maximum design charge */ -+ if (!PSY_PROP(bat, CHARGE_FULL_DESIGN, &full)) { -+ if (full.intval > max_charge) { -+ batm = bat; -+ max_charge = full.intval; -+ } -+ } -+ -+ if (bat->use_for_apm) -+ main_battery = bat; -+ } -+ if (!main_battery) -+ main_battery = batm; -+ -+ return; -+} -+ -+static int calculate_time(int status) -+{ -+ union power_supply_propval charge_full, charge_empty; -+ union power_supply_propval charge, I; -+ -+ if (MPSY_PROP(CHARGE_FULL, &charge_full)) { -+ /* if battery can't report this property, use design value */ -+ if (MPSY_PROP(CHARGE_FULL_DESIGN, &charge_full)) -+ return -1; -+ } -+ -+ if (MPSY_PROP(CHARGE_EMPTY, &charge_empty)) { -+ /* if battery can't report this property, use design value */ -+ if (MPSY_PROP(CHARGE_EMPTY_DESIGN, &charge_empty)) -+ charge_empty.intval = 0; -+ } -+ -+ if (MPSY_PROP(CHARGE_AVG, &charge)) { -+ /* if battery can't report average value, use momentary */ -+ if (MPSY_PROP(CHARGE_NOW, &charge)) -+ return -1; -+ } -+ -+ if (MPSY_PROP(CURRENT_AVG, &I)) { -+ /* if battery can't report average value, use momentary */ -+ if (MPSY_PROP(CURRENT_NOW, &I)) -+ return -1; -+ } -+ -+ if (I.intval == 0) -+ return 0; -+ else if (status == POWER_SUPPLY_STATUS_CHARGING) -+ return ((charge.intval - charge_full.intval) * 60L) / -+ I.intval; -+ else -+ return -((charge.intval - charge_empty.intval) * 60L) / -+ I.intval; -+} -+ -+static int calculate_capacity(int using_charge) -+{ -+ enum power_supply_property full_prop, empty_prop; -+ enum power_supply_property full_design_prop, empty_design_prop; -+ enum power_supply_property now_prop, avg_prop; -+ union power_supply_propval empty, full, cur; -+ int ret; -+ -+ if (using_charge) { -+ full_prop = POWER_SUPPLY_PROP_CHARGE_FULL; -+ empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; -+ full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; -+ empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN; -+ now_prop = POWER_SUPPLY_PROP_CHARGE_NOW; -+ avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG; -+ } -+ else { -+ full_prop = POWER_SUPPLY_PROP_ENERGY_FULL; -+ empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY; -+ full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN; -+ empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN; -+ now_prop = POWER_SUPPLY_PROP_ENERGY_NOW; -+ avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG; -+ } -+ -+ if (_MPSY_PROP(full_prop, &full)) { -+ /* if battery can't report this property, use design value */ -+ if (_MPSY_PROP(full_design_prop, &full)) -+ return -1; -+ } -+ -+ if (_MPSY_PROP(avg_prop, &cur)) { -+ /* if battery can't report average value, use momentary */ -+ if (_MPSY_PROP(now_prop, &cur)) -+ return -1; -+ } -+ -+ if (_MPSY_PROP(empty_prop, &empty)) { -+ /* if battery can't report this property, use design value */ -+ if (_MPSY_PROP(empty_design_prop, &empty)) -+ empty.intval = 0; -+ } -+ -+ if (full.intval - empty.intval) -+ ret = ((cur.intval - empty.intval) * 100L) / -+ (full.intval - empty.intval); -+ else -+ return -1; -+ -+ if (ret > 100) -+ return 100; -+ else if (ret < 0) -+ return 0; -+ -+ return ret; -+} -+ -+static void apm_battery_apm_get_power_status(struct apm_power_info *info) -+{ -+ union power_supply_propval status; -+ union power_supply_propval capacity, time_to_full, time_to_empty; -+ -+ down(&power_supply_class->sem); -+ find_main_battery(); -+ if (!main_battery) { -+ up(&power_supply_class->sem); -+ return; -+ } -+ -+ /* status */ -+ -+ if (MPSY_PROP(STATUS, &status)) -+ status.intval = POWER_SUPPLY_STATUS_UNKNOWN; -+ -+ /* ac line status */ -+ -+ if ((status.intval == POWER_SUPPLY_STATUS_CHARGING) || -+ (status.intval == POWER_SUPPLY_STATUS_NOT_CHARGING) || -+ (status.intval == POWER_SUPPLY_STATUS_FULL)) -+ info->ac_line_status = APM_AC_ONLINE; -+ else -+ info->ac_line_status = APM_AC_OFFLINE; -+ -+ /* battery life (i.e. capacity, in percents) */ -+ -+ if (MPSY_PROP(CAPACITY, &capacity) == 0) -+ info->battery_life = capacity.intval; -+ else { -+ /* try calculate using energy */ -+ info->battery_life = calculate_capacity(0); -+ /* if failed try calculate using charge instead */ -+ if (info->battery_life == -1) -+ info->battery_life = calculate_capacity(1); -+ } -+ -+ /* charging status */ -+ -+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING) -+ info->battery_status = APM_BATTERY_STATUS_CHARGING; -+ else { -+ if (info->battery_life > 50) -+ info->battery_status = APM_BATTERY_STATUS_HIGH; -+ else if (info->battery_life > 5) -+ info->battery_status = APM_BATTERY_STATUS_LOW; -+ else -+ info->battery_status = APM_BATTERY_STATUS_CRITICAL; -+ } -+ info->battery_flag = info->battery_status; -+ -+ /* time */ -+ -+ info->units = APM_UNITS_MINS; -+ -+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING) { -+ if (MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full)) { -+ if (MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full)) -+ info->time = calculate_time(status.intval); -+ else -+ info->time = time_to_full.intval / 60; -+ } -+ } -+ else { -+ if (MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty)) { -+ if (MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty)) -+ info->time = calculate_time(status.intval); -+ else -+ info->time = time_to_empty.intval / 60; -+ } -+ } -+ -+ up(&power_supply_class->sem); -+ return; -+} -+ -+static int __init apm_battery_init(void) -+{ -+ printk(KERN_INFO "APM Battery Driver\n"); -+ -+ apm_get_power_status = apm_battery_apm_get_power_status; -+ return 0; -+} -+ -+static void __exit apm_battery_exit(void) -+{ -+ apm_get_power_status = NULL; -+ return; -+} -+ -+module_init(apm_battery_init); -+module_exit(apm_battery_exit); -+ -+MODULE_AUTHOR("Eugeny Boger <eugenyboger@dgap.mipt.ru>"); -+MODULE_DESCRIPTION("APM emulation driver for battery monitoring class"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.22/drivers/power/ds2760_battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/ds2760_battery.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,475 @@ -+/* -+ * Driver for batteries with DS2760 chips inside. -+ * -+ * Copyright (c) 2007 Anton Vorontsov -+ * 2004-2007 Matt Reimer -+ * 2004 Szabolcs Gyurko -+ * -+ * Use consistent with the GNU GPL is permitted, -+ * provided that this copyright notice is -+ * preserved in its entirety in all copies and derived works. -+ * -+ * Author: Anton Vorontsov <cbou@mail.ru> -+ * February 2007 -+ * -+ * Matt Reimer <mreimer@vpop.net> -+ * April 2004, 2005, 2007 -+ * -+ * Szabolcs Gyurko <szabolcs.gyurko@tlt.hu> -+ * September 2004 -+ */ -+ -+#include <linux/module.h> -+#include <linux/param.h> -+#include <linux/jiffies.h> -+#include <linux/workqueue.h> -+#include <linux/pm.h> -+#include <linux/platform_device.h> -+#include <linux/power_supply.h> -+ -+#include "../w1/w1.h" -+#include "../w1/slaves/w1_ds2760.h" -+ -+struct ds2760_device_info { -+ struct device *dev; -+ -+ /* DS2760 data, valid after calling ds2760_battery_read_status() */ -+ unsigned long update_time; /* jiffies when data read */ -+ char raw[DS2760_DATA_SIZE]; /* raw DS2760 data */ -+ int voltage_raw; /* units of 4.88 mV */ -+ int voltage_uV; /* units of uV */ -+ int current_raw; /* units of 0.625 mA */ -+ int current_uA; /* units of uA */ -+ int accum_current_raw; /* units of 0.25 mAh */ -+ int accum_current_uAh; /* units of uAh */ -+ int temp_raw; /* units of 0.125 C */ -+ int temp_C; /* units of 0.1 C */ -+ int rated_capacity; /* units of uAh */ -+ int rem_capacity; /* percentage */ -+ int full_active_uAh; /* units of uAh */ -+ int empty_uAh; /* units of uAh */ -+ int life_sec; /* units of seconds */ -+ int charge_status; /* POWER_SUPPLY_STATUS_* */ -+ -+ int full_counter; -+ struct power_supply bat; -+ struct device *w1_dev; -+ struct workqueue_struct *monitor_wqueue; -+ struct delayed_work monitor_work; -+}; -+ -+static unsigned int cache_time = 1000; -+module_param(cache_time, uint, 0644); -+MODULE_PARM_DESC(cache_time, "cache time in milliseconds"); -+ -+/* Some batteries have their rated capacity stored a N * 10 mAh, while -+ * others use an index into this table. */ -+static int rated_capacities[] = { -+ 0, -+ 920, /* Samsung */ -+ 920, /* BYD */ -+ 920, /* Lishen */ -+ 920, /* NEC */ -+ 1440, /* Samsung */ -+ 1440, /* BYD */ -+ 1440, /* Lishen */ -+ 1440, /* NEC */ -+ 2880, /* Samsung */ -+ 2880, /* BYD */ -+ 2880, /* Lishen */ -+ 2880 /* NEC */ -+}; -+ -+/* array is level at temps 0C, 10C, 20C, 30C, 40C -+ * temp is in Celsius */ -+static int battery_interpolate(int array[], int temp) -+{ -+ int index, dt; -+ -+ if (temp <= 0) -+ return array[0]; -+ if (temp >= 40) -+ return array[4]; -+ -+ index = temp / 10; -+ dt = temp % 10; -+ -+ return array[index] + (((array[index + 1] - array[index]) * dt) / 10); -+} -+ -+static int ds2760_battery_read_status(struct ds2760_device_info *di) -+{ -+ int ret, i, start, count, scale[5]; -+ -+ if (di->update_time && time_before(jiffies, di->update_time + -+ msecs_to_jiffies(cache_time))) -+ return 0; -+ -+ /* The first time we read the entire contents of SRAM/EEPROM, -+ * but after that we just read the interesting bits that change. */ -+ if (di->update_time == 0) { -+ start = 0; -+ count = DS2760_DATA_SIZE; -+ } -+ else { -+ start = DS2760_VOLTAGE_MSB; -+ count = DS2760_TEMP_LSB - start + 1; -+ } -+ -+ ret = w1_ds2760_read(di->w1_dev, di->raw + start, start, count); -+ if (ret != count) { -+ dev_warn(di->dev, "call to w1_ds2760_read failed (0x%p)\n", -+ di->w1_dev); -+ return 1; -+ } -+ -+ di->update_time = jiffies; -+ -+ /* DS2760 reports voltage in units of 4.88mV, but the battery class -+ * reports in units of uV, so convert by multiplying by 4880. */ -+ di->voltage_raw = (di->raw[DS2760_VOLTAGE_MSB] << 3) | -+ (di->raw[DS2760_VOLTAGE_LSB] >> 5); -+ di->voltage_uV = di->voltage_raw * 4880; -+ -+ /* DS2760 reports current in signed units of 0.625mA, but the battery -+ * class reports in units of uA, so convert by multiplying by 625. */ -+ di->current_raw = -+ (((signed char)di->raw[DS2760_CURRENT_MSB]) << 5) | -+ (di->raw[DS2760_CURRENT_LSB] >> 3); -+ di->current_uA = di->current_raw * 625; -+ -+ /* DS2760 reports accumulated current in signed units of 0.25mAh. */ -+ di->accum_current_raw = -+ (((signed char)di->raw[DS2760_CURRENT_ACCUM_MSB]) << 8) | -+ di->raw[DS2760_CURRENT_ACCUM_LSB]; -+ di->accum_current_uAh = di->accum_current_raw * 250; -+ -+ /* DS2760 reports temperature in signed units of 0.125C, but the -+ * battery class reports in units of 1/10 C, so we convert by -+ * multiplying by .125 * 10 = 1.25. */ -+ di->temp_raw = (((signed char)di->raw[DS2760_TEMP_MSB]) << 3) | -+ (di->raw[DS2760_TEMP_LSB] >> 5); -+ di->temp_C = di->temp_raw + (di->temp_raw / 4); -+ -+ /* At least some battery monitors (e.g. HP iPAQ) store the battery's -+ * maximum rated capacity. */ -+ if (di->raw[DS2760_RATED_CAPACITY] < ARRAY_SIZE(rated_capacities)) -+ di->rated_capacity = rated_capacities[ -+ (unsigned int)di->raw[DS2760_RATED_CAPACITY]]; -+ else -+ di->rated_capacity = di->raw[DS2760_RATED_CAPACITY] * 10; -+ -+ di->rated_capacity *= 1000; /* convert to uAh */ -+ -+ /* Calculate the full level at the present temperature. */ -+ di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 | -+ di->raw[DS2760_ACTIVE_FULL + 1]; -+ -+ scale[0] = di->raw[DS2760_ACTIVE_FULL] << 8 | -+ di->raw[DS2760_ACTIVE_FULL + 1]; -+ for (i = 1; i < 5; i++) -+ scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 2 + i]; -+ -+ di->full_active_uAh = battery_interpolate(scale, di->temp_C / 10); -+ di->full_active_uAh *= 1000; /* convert to uAh */ -+ -+ /* Calculate the empty level at the present temperature. */ -+ scale[4] = di->raw[DS2760_ACTIVE_EMPTY + 4]; -+ for (i = 3; i >= 0; i--) -+ scale[i] = scale[i + 1] + di->raw[DS2760_ACTIVE_EMPTY + i]; -+ -+ di->empty_uAh = battery_interpolate(scale, di->temp_C / 10); -+ di->empty_uAh *= 1000; /* convert to uAh */ -+ -+ /* From Maxim Application Note 131: remaining capacity = -+ * ((ICA - Empty Value) / (Full Value - Empty Value)) x 100% */ -+ di->rem_capacity = ((di->accum_current_uAh - di->empty_uAh) * 100L) / -+ (di->full_active_uAh - di->empty_uAh); -+ -+ if (di->rem_capacity < 0) -+ di->rem_capacity = 0; -+ if (di->rem_capacity > 100) -+ di->rem_capacity = 100; -+ -+ if (di->current_uA) -+ di->life_sec = -((di->accum_current_uAh - di->empty_uAh) * -+ 3600L) / di->current_uA; -+ else -+ di->life_sec = 0; -+ -+ return 0; -+} -+ -+static void ds2760_battery_update_status(struct ds2760_device_info *di) -+{ -+ int old_charge_status = di->charge_status; -+ -+ ds2760_battery_read_status(di); -+ -+ if (di->charge_status == POWER_SUPPLY_STATUS_UNKNOWN) -+ di->full_counter = 0; -+ -+ if (power_supply_am_i_supplied(&di->bat)) { -+ if (di->current_uA > 10000) { -+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING; -+ di->full_counter = 0; -+ } -+ else if (di->current_uA < -5000) { -+ if (di->charge_status != POWER_SUPPLY_STATUS_NOT_CHARGING) -+ dev_notice(di->dev, "not enough power to " -+ "charge\n"); -+ di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING; -+ di->full_counter = 0; -+ } -+ else if (di->current_uA < 10000 && -+ di->charge_status != POWER_SUPPLY_STATUS_FULL) { -+ -+ /* Don't consider the battery to be full unless -+ * we've seen the current < 10 mA at least two -+ * consecutive times. */ -+ -+ di->full_counter++; -+ -+ if (di->full_counter < 2) -+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING; -+ else { -+ unsigned char acr[2]; -+ int acr_val; -+ -+ /* acr is in units of 0.25 mAh */ -+ acr_val = di->full_active_uAh * 4L / 1000; -+ -+ acr[0] = acr_val >> 8; -+ acr[1] = acr_val & 0xff; -+ -+ if (w1_ds2760_write(di->w1_dev, acr, -+ DS2760_CURRENT_ACCUM_MSB, 2) < 2) -+ dev_warn(di->dev, -+ "ACR reset failed\n"); -+ -+ di->charge_status = POWER_SUPPLY_STATUS_FULL; -+ } -+ } -+ } -+ else { -+ di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING; -+ di->full_counter = 0; -+ } -+ -+ if (di->charge_status != old_charge_status) -+ power_supply_changed(&di->bat); -+ -+ return; -+} -+ -+static void ds2760_battery_work(struct work_struct *work) -+{ -+ struct ds2760_device_info *di = container_of(work, -+ struct ds2760_device_info, monitor_work.work); -+ const int interval = HZ * 60; -+ -+ dev_dbg(di->dev, "%s\n", __FUNCTION__); -+ -+ ds2760_battery_update_status(di); -+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, interval); -+ -+ return; -+} -+ -+#define to_ds2760_device_info(x) container_of((x), struct ds2760_device_info, \ -+ bat); -+ -+static void ds2760_battery_external_power_changed(struct power_supply *psy) -+{ -+ struct ds2760_device_info *di = to_ds2760_device_info(psy); -+ -+ dev_dbg(di->dev, "%s\n", __FUNCTION__); -+ -+ cancel_delayed_work(&di->monitor_work); -+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ/10); -+ -+ return; -+} -+ -+static int ds2760_battery_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ struct ds2760_device_info *di = to_ds2760_device_info(psy); -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_STATUS: -+ val->intval = di->charge_status; -+ return 0; -+ default: -+ break; -+ } -+ -+ ds2760_battery_read_status(di); -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_VOLTAGE_NOW: -+ val->intval = di->voltage_uV; -+ break; -+ case POWER_SUPPLY_PROP_CURRENT_NOW: -+ val->intval = di->current_uA; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: -+ val->intval = di->rated_capacity; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_FULL: -+ val->intval = di->full_active_uAh; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_EMPTY: -+ val->intval = di->empty_uAh; -+ break; -+ case POWER_SUPPLY_PROP_CHARGE_NOW: -+ val->intval = di->accum_current_uAh; -+ break; -+ case POWER_SUPPLY_PROP_TEMP: -+ val->intval = di->temp_C; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+static enum power_supply_property ds2760_battery_props[] = { -+ POWER_SUPPLY_PROP_STATUS, -+ POWER_SUPPLY_PROP_VOLTAGE_NOW, -+ POWER_SUPPLY_PROP_CURRENT_NOW, -+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, -+ POWER_SUPPLY_PROP_CHARGE_FULL, -+ POWER_SUPPLY_PROP_CHARGE_EMPTY, -+ POWER_SUPPLY_PROP_CHARGE_NOW, -+ POWER_SUPPLY_PROP_TEMP, -+}; -+ -+static int ds2760_battery_probe(struct platform_device *pdev) -+{ -+ int retval = 0; -+ struct ds2760_device_info *di; -+ struct ds2760_platform_data *pdata; -+ -+ di = kzalloc(sizeof(*di), GFP_KERNEL); -+ if (!di) { -+ retval = -ENOMEM; -+ goto di_alloc_failed; -+ } -+ -+ platform_set_drvdata(pdev, di); -+ -+ pdata = pdev->dev.platform_data; -+ di->dev = &pdev->dev; -+ di->w1_dev = pdev->dev.parent; -+ di->bat.name = pdev->dev.bus_id; -+ di->bat.type = POWER_SUPPLY_TYPE_BATTERY; -+ di->bat.properties = ds2760_battery_props; -+ di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props); -+ di->bat.get_property = ds2760_battery_get_property; -+ di->bat.external_power_changed = -+ ds2760_battery_external_power_changed; -+ di->bat.use_for_apm = 1; -+ -+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; -+ -+ retval = power_supply_register(&pdev->dev, &di->bat); -+ if (retval) { -+ dev_err(di->dev, "failed to register battery"); -+ goto batt_failed; -+ } -+ -+ INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work); -+ di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id); -+ if (!di->monitor_wqueue) { -+ retval = -ESRCH; -+ goto workqueue_failed; -+ } -+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 1); -+ -+ goto success; -+ -+workqueue_failed: -+ power_supply_unregister(&di->bat); -+batt_failed: -+ kfree(di); -+di_alloc_failed: -+success: -+ return retval; -+} -+ -+static int ds2760_battery_remove(struct platform_device *pdev) -+{ -+ struct ds2760_device_info *di = platform_get_drvdata(pdev); -+ -+ cancel_rearming_delayed_workqueue(di->monitor_wqueue, -+ &di->monitor_work); -+ destroy_workqueue(di->monitor_wqueue); -+ power_supply_unregister(&di->bat); -+ -+ return 0; -+} -+ -+#ifdef CONFIG_PM -+ -+static int ds2760_battery_suspend(struct platform_device *pdev, -+ pm_message_t state) -+{ -+ struct ds2760_device_info *di = platform_get_drvdata(pdev); -+ -+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; -+ -+ return 0; -+} -+ -+static int ds2760_battery_resume(struct platform_device *pdev) -+{ -+ struct ds2760_device_info *di = platform_get_drvdata(pdev); -+ -+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; -+ power_supply_changed(&di->bat); -+ -+ cancel_delayed_work(&di->monitor_work); -+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ); -+ -+ return 0; -+} -+ -+#else -+ -+#define ds2760_battery_suspend NULL -+#define ds2760_battery_resume NULL -+ -+#endif /* CONFIG_PM */ -+ -+static struct platform_driver ds2760_battery_driver = { -+ .driver = { -+ .name = "ds2760-battery", -+ }, -+ .probe = ds2760_battery_probe, -+ .remove = ds2760_battery_remove, -+ .suspend = ds2760_battery_suspend, -+ .resume = ds2760_battery_resume, -+}; -+ -+static int __init ds2760_battery_init(void) -+{ -+ return platform_driver_register(&ds2760_battery_driver); -+} -+ -+static void __exit ds2760_battery_exit(void) -+{ -+ platform_driver_unregister(&ds2760_battery_driver); -+ return; -+} -+ -+module_init(ds2760_battery_init); -+module_exit(ds2760_battery_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>, " -+ "Matt Reimer <mreimer@vpop.net>, " -+ "Anton Vorontsov <cbou@mail.ru>"); -+MODULE_DESCRIPTION("ds2760 battery driver"); -Index: linux-2.6.22/drivers/power/Kconfig -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/Kconfig 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,70 @@ -+menuconfig POWER_SUPPLY -+ tristate "Power supply class support" -+ help -+ Say Y here to enable power supply class support. This allows -+ power supply (batteries, AC, USB) monitoring by userspace -+ via sysfs and uevent (if available) and/or APM kernel interface -+ (if selected below). -+ -+if POWER_SUPPLY -+ -+config POWER_SUPPLY_DEBUG -+ bool "Power supply debug" -+ help -+ Say Y here to enable debugging messages for power supply class -+ and drivers. -+ -+config PDA_POWER -+ tristate "Generic PDA/phone power driver" -+ help -+ Say Y here to enable generic power driver for PDAs and phones with -+ one or two external power supplies (AC/USB) connected to main and -+ backup batteries, and optional builtin charger. -+ -+config APM_POWER -+ tristate "APM emulation for class batteries" -+ depends on APM_EMULATION -+ help -+ Say Y here to enable support APM status emulation using -+ battery class devices. -+ -+config BATTERY_DS2760 -+ tristate "DS2760 battery driver (HP iPAQ & others)" -+ select W1 -+ select W1_SLAVE_DS2760 -+ help -+ Say Y here to enable support for batteries with ds2760 chip. -+ -+config BATTERY_PMU -+ tristate "Apple PMU battery" -+ depends on ADB_PMU -+ help -+ Say Y here to expose battery information on Apple machines -+ through the generic battery class. -+ -+config BATTERY_OLPC -+ tristate "One Laptop Per Child battery" -+ depends on X86_32 -+ help -+ Say Y to enable support for the battery on the OLPC laptop. -+ -+# drivers below are not in battery2-2.6 tree -+ -+config ADC_BATTERY -+ tristate "Generic ADC battery driver" -+ depends on ADC && POWER_SUPPLY -+ help -+ Say Y here to enable support for battery monitoring using generic ADC device. -+ -+config IPAQ_MICRO_BATTERY -+ tristate "HP iPAQ Micro ASIC battery driver" -+ depends on IPAQ_MICRO && POWER_SUPPLY -+ help -+ Choose this option if you want to monitor battery status on -+ Compaq/HP iPAQ h3100 h3600 -+ -+config MCP_UCB1x00_SIMPAD_BATTERY -+ tristate "SIMpad Battery Reading Support" -+ depends on MCP_UCB1x00 && POWER_SUPPLY -+ -+endif # POWER_SUPPLY -Index: linux-2.6.22/drivers/power/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/Makefile 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,28 @@ -+power_supply-objs := power_supply_core.o -+ -+ifeq ($(CONFIG_SYSFS),y) -+power_supply-objs += power_supply_sysfs.o -+endif -+ -+ifeq ($(CONFIG_LEDS_TRIGGERS),y) -+power_supply-objs += power_supply_leds.o -+endif -+ -+ifeq ($(CONFIG_POWER_SUPPLY_DEBUG),y) -+EXTRA_CFLAGS += -DDEBUG -+endif -+ -+obj-$(CONFIG_POWER_SUPPLY) += power_supply.o -+ -+obj-$(CONFIG_PDA_POWER) += pda_power.o -+obj-$(CONFIG_APM_POWER) += apm_power.o -+ -+obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o -+obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o -+obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o -+ -+# drivers below are not in battery2-2.6 tree -+ -+obj-$(CONFIG_ADC_BATTERY) += adc_battery.o -+obj-$(CONFIG_IPAQ_MICRO_BATTERY) += micro_battery.o -+obj-$(CONFIG_MCP_UCB1x00_SIMPAD_BATTERY) += simpad-battery.o -Index: linux-2.6.22/drivers/power/micro_battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/micro_battery.c 2007-08-23 12:25:20.000000000 +0200 -@@ -0,0 +1,257 @@ -+/* -+ * 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. -+ * -+ * h3600 atmel micro companion support, battery subdevice -+ * based on previous kernel 2.4 version -+ * Author : Alessandro Gardich <gremlin@gremlin.it> -+ * -+ */ -+ -+ -+#include <linux/module.h> -+#include <linux/version.h> -+ -+#include <linux/init.h> -+#include <linux/fs.h> -+#include <linux/interrupt.h> -+#include <linux/sched.h> -+#include <linux/pm.h> -+#include <linux/sysctl.h> -+#include <linux/proc_fs.h> -+#include <linux/delay.h> -+#include <linux/device.h> -+#include <linux/power_supply.h> -+#include <linux/platform_device.h> -+#include <linux/timer.h> -+ -+#include <asm/arch/hardware.h> -+ -+#include <asm/arch/h3600.h> -+#include <asm/arch/SA-1100.h> -+ -+#include <asm/hardware/micro.h> -+ -+#define BATT_PERIOD 10*HZ -+ -+#define H3600_BATT_STATUS_HIGH 0x01 -+#define H3600_BATT_STATUS_LOW 0x02 -+#define H3600_BATT_STATUS_CRITICAL 0x04 -+#define H3600_BATT_STATUS_CHARGING 0x08 -+#define H3600_BATT_STATUS_CHARGEMAIN 0x10 -+#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */ -+#define H3600_BATT_STATUS_NOTINSTALLED 0x20 /* For expansion pack batteries */ -+#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */ -+#define H3600_BATT_STATUS_NOBATTERY 0x80 -+#define H3600_BATT_STATUS_UNKNOWN 0xff -+ -+ -+//static struct power_supply_dev *micro_battery; -+ -+static micro_private_t *p_micro; -+ -+struct timer_list batt_timer; -+ -+struct { -+ int ac; -+ int update_time; -+ int chemistry; -+ int voltage; -+ int temperature; -+ int flag; -+} micro_battery; -+ -+static void micro_battery_receive (int len, unsigned char *data) { -+ if (0) { -+ printk(KERN_ERR "h3600_battery - AC = %02x\n", data[0]); -+ printk(KERN_ERR "h3600_battery - BAT1 chemistry = %02x\n", data[1]); -+ printk(KERN_ERR "h3600_battery - BAT1 voltage = %d %02x%02x\n", (data[3]<<8)+data[2], data[2], data[3]); -+ printk(KERN_ERR "h3600_battery - BAT1 status = %02x\n", data[4]); -+ } -+ -+ micro_battery.ac = data[0]; -+ micro_battery.chemistry = data[1]; -+ micro_battery.voltage = ((((unsigned short)data[3]<<8)+data[2]) * 5000L ) * 1000 / 1024; -+ micro_battery.flag = data[4]; -+ -+ if (len == 9) { -+ if (0) { -+ printk(KERN_ERR "h3600_battery - BAT2 chemistry = %02x\n", data[5]); -+ printk(KERN_ERR "h3600_battery - BAT2 voltage = %d %02x%02x\n", (data[7]<<8)+data[6], data[6], data[7]); -+ printk(KERN_ERR "h3600_battery - BAT2 status = %02x\n", data[8]); -+ } -+ } -+} -+ -+static void micro_temperature_receive (int len, unsigned char *data) { -+ micro_battery.temperature = ((unsigned short)data[1]<<8)+data[0]; -+} -+ -+void h3600_battery_read_status(unsigned long data) { -+ -+ if (++data % 2) -+ h3600_micro_tx_msg(0x09,0,NULL); -+ else -+ h3600_micro_tx_msg(0x06,0,NULL); -+ -+ batt_timer.expires += BATT_PERIOD; -+ batt_timer.data = data; -+ -+ add_timer(&batt_timer); -+} -+ -+int get_capacity(struct power_supply *b) { -+ switch (micro_battery.flag) { -+ case H3600_BATT_STATUS_HIGH : return 100; break; -+ case H3600_BATT_STATUS_LOW : return 50; break; -+ case H3600_BATT_STATUS_CRITICAL : return 5; break; -+ default: break; -+ } -+ return 0; -+} -+ -+int get_status(struct power_supply *b) { -+ -+ if (micro_battery.flag == H3600_BATT_STATUS_UNKNOWN) -+ return POWER_SUPPLY_STATUS_UNKNOWN; -+ -+ if (micro_battery.flag & H3600_BATT_STATUS_FULL) -+ return POWER_SUPPLY_STATUS_FULL; -+ -+ if ((micro_battery.flag & H3600_BATT_STATUS_CHARGING) || -+ (micro_battery.flag & H3600_BATT_STATUS_CHARGEMAIN)) -+ return POWER_SUPPLY_STATUS_CHARGING; -+ -+ return POWER_SUPPLY_STATUS_DISCHARGING; -+} -+ -+static int micro_batt_get_property(struct power_supply *b, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_STATUS: -+ val->intval = get_status(b); -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: -+ val->intval = 4700000; -+ break; -+ case POWER_SUPPLY_PROP_CAPACITY: -+ val->intval = get_capacity(b); -+ break; -+ case POWER_SUPPLY_PROP_TEMP: -+ val->intval = micro_battery.temperature; -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_NOW: -+ val->intval = micro_battery.voltage; -+ break; -+ default: -+ return -EINVAL; -+ }; -+ -+ return 0; -+} -+ -+static enum power_supply_property micro_batt_props[] = { -+ POWER_SUPPLY_PROP_STATUS, -+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, -+ POWER_SUPPLY_PROP_CAPACITY, -+ POWER_SUPPLY_PROP_TEMP, -+ POWER_SUPPLY_PROP_VOLTAGE_NOW, -+}; -+ -+static struct power_supply h3600_battery = { -+ .name = "main-battery", -+ .properties = micro_batt_props, -+ .num_properties = ARRAY_SIZE(micro_batt_props), -+ .get_property = micro_batt_get_property, -+ .use_for_apm = 1, -+}; -+ -+static int micro_batt_probe (struct platform_device *pdev) -+{ -+ if (1) printk(KERN_ERR "micro battery probe : begin\n"); -+ -+ power_supply_register(&pdev->dev, &h3600_battery); -+ -+ { /*--- callback ---*/ -+ p_micro = platform_get_drvdata(pdev); -+ spin_lock(p_micro->lock); -+ p_micro->h_batt = micro_battery_receive; -+ p_micro->h_temp = micro_temperature_receive; -+ spin_unlock(p_micro->lock); -+ } -+ -+ { /*--- timer ---*/ -+ init_timer(&batt_timer); -+ batt_timer.expires = jiffies + BATT_PERIOD; -+ batt_timer.data = 0; -+ batt_timer.function = h3600_battery_read_status; -+ -+ add_timer(&batt_timer); -+ } -+ -+ if (1) printk(KERN_ERR "micro battery probe : end\n"); -+ return 0; -+} -+ -+static int micro_batt_remove (struct platform_device *pdev) -+{ -+ power_supply_unregister(&h3600_battery); -+ { /*--- callback ---*/ -+ init_timer(&batt_timer); -+ p_micro->h_batt = NULL; -+ p_micro->h_temp = NULL; -+ spin_unlock(p_micro->lock); -+ } -+ { /*--- timer ---*/ -+ del_timer_sync(&batt_timer); -+ } -+ return 0; -+} -+ -+static int micro_batt_suspend ( struct platform_device *pdev, pm_message_t state) -+{ -+ { /*--- timer ---*/ -+ del_timer(&batt_timer); -+ } -+ return 0; -+} -+ -+static int micro_batt_resume ( struct platform_device *pdev) -+{ -+ { /*--- timer ---*/ -+ add_timer(&batt_timer); -+ } -+ return 0; -+} -+ -+struct platform_driver micro_batt_device_driver = { -+ .driver = { -+ .name = "h3600-micro-battery", -+ }, -+ .probe = micro_batt_probe, -+ .remove = micro_batt_remove, -+ .suspend = micro_batt_suspend, -+ .resume = micro_batt_resume, -+}; -+ -+static int micro_batt_init (void) -+{ -+ return platform_driver_register(µ_batt_device_driver); -+} -+ -+static void micro_batt_cleanup (void) -+{ -+ platform_driver_unregister (µ_batt_device_driver); -+} -+ -+module_init (micro_batt_init); -+module_exit (micro_batt_cleanup); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("gremlin.it"); -+MODULE_DESCRIPTION("driver for iPAQ Atmel micro battery"); -+ -+ -Index: linux-2.6.22/drivers/power/olpc_battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/olpc_battery.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,302 @@ -+/* -+ * Battery driver for One Laptop Per Child board. -+ * -+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/module.h> -+#include <linux/err.h> -+#include <linux/platform_device.h> -+#include <linux/power_supply.h> -+#include <linux/jiffies.h> -+#include <linux/sched.h> -+#include <asm/io.h> -+ -+#define wBAT_VOLTAGE 0xf900 /* *9.76/32, mV */ -+#define wBAT_CURRENT 0xf902 /* *15.625/120, mA */ -+#define wBAT_TEMP 0xf906 /* *256/1000, °C */ -+#define wAMB_TEMP 0xf908 /* *256/1000, °C */ -+#define SOC 0xf910 /* percentage */ -+#define sMBAT_STATUS 0xfaa4 -+#define sBAT_PRESENT 1 -+#define sBAT_FULL 2 -+#define sBAT_DESTROY 4 /* what is this exactly? */ -+#define sBAT_LOW 32 -+#define sBAT_DISCHG 64 -+#define sMCHARGE_STATUS 0xfaa5 -+#define sBAT_CHARGE 1 -+#define sBAT_OVERTEMP 4 -+#define sBAT_NiMH 8 -+#define sPOWER_FLAG 0xfa40 -+#define ADAPTER_IN 1 -+ -+/********************************************************************* -+ * EC locking and access -+ *********************************************************************/ -+ -+static int lock_ec(void) -+{ -+ unsigned long timeo = jiffies + HZ / 20; -+ -+ while (1) { -+ unsigned char lock = inb(0x6c) & 0x80; -+ if (!lock) -+ return 0; -+ if (time_after(jiffies, timeo)) { -+ printk(KERN_ERR "olpc_battery: failed to lock EC for " -+ "battery access\n"); -+ return 1; -+ } -+ yield(); -+ } -+} -+ -+static void unlock_ec(void) -+{ -+ outb(0xff, 0x6c); -+ return; -+} -+ -+static unsigned char read_ec_byte(unsigned short adr) -+{ -+ outb(adr >> 8, 0x381); -+ outb(adr, 0x382); -+ return inb(0x383); -+} -+ -+static unsigned short read_ec_word(unsigned short adr) -+{ -+ return (read_ec_byte(adr) << 8) | read_ec_byte(adr + 1); -+} -+ -+/********************************************************************* -+ * Power -+ *********************************************************************/ -+ -+static int olpc_ac_get_prop(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ int ret = 0; -+ -+ if (lock_ec()) -+ return -EIO; -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_ONLINE: -+ if (!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT)) { -+ ret = -ENODEV; -+ goto out; -+ } -+ val->intval = !!(read_ec_byte(sPOWER_FLAG) & ADAPTER_IN); -+ break; -+ default: -+ ret = -EINVAL; -+ break; -+ } -+out: -+ unlock_ec(); -+ return ret; -+} -+ -+static enum power_supply_property olpc_ac_props[] = { -+ POWER_SUPPLY_PROP_ONLINE, -+}; -+ -+static struct power_supply olpc_ac = { -+ .name = "olpc-ac", -+ .type = POWER_SUPPLY_TYPE_MAINS, -+ .properties = olpc_ac_props, -+ .num_properties = ARRAY_SIZE(olpc_ac_props), -+ .get_property = olpc_ac_get_prop, -+}; -+ -+/********************************************************************* -+ * Battery properties -+ *********************************************************************/ -+ -+static int olpc_bat_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ int ret = 0; -+ -+ if (lock_ec()) -+ return -EIO; -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_STATUS: -+ { -+ int status = POWER_SUPPLY_STATUS_UNKNOWN; -+ -+ val->intval = read_ec_byte(sMBAT_STATUS); -+ -+ if (!(val->intval & sBAT_PRESENT)) { -+ ret = -ENODEV; -+ goto out; -+ } -+ -+ if (val->intval & sBAT_DISCHG) -+ status = POWER_SUPPLY_STATUS_DISCHARGING; -+ else if (val->intval & sBAT_FULL) -+ status = POWER_SUPPLY_STATUS_FULL; -+ -+ val->intval = read_ec_byte(sMCHARGE_STATUS); -+ if (val->intval & sBAT_CHARGE) -+ status = POWER_SUPPLY_STATUS_CHARGING; -+ -+ val->intval = status; -+ break; -+ } -+ case POWER_SUPPLY_PROP_PRESENT: -+ val->intval = !!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT); -+ break; -+ case POWER_SUPPLY_PROP_HEALTH: -+ val->intval = read_ec_byte(sMCHARGE_STATUS); -+ if (val->intval & sBAT_OVERTEMP) -+ val->intval = POWER_SUPPLY_HEALTH_OVERHEAT; -+ else -+ val->intval = POWER_SUPPLY_HEALTH_GOOD; -+ break; -+ case POWER_SUPPLY_PROP_TECHNOLOGY: -+ val->intval = read_ec_byte(sMCHARGE_STATUS); -+ if (val->intval & sBAT_NiMH) -+ val->intval = POWER_SUPPLY_TECHNOLOGY_NIMH; -+ else -+ val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN; -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_AVG: -+ val->intval = read_ec_byte(wBAT_VOLTAGE) * 9760L / 32; -+ break; -+ case POWER_SUPPLY_PROP_CURRENT_AVG: -+ val->intval = read_ec_byte(wBAT_CURRENT) * 15625L / 120; -+ break; -+ case POWER_SUPPLY_PROP_CAPACITY: -+ val->intval = read_ec_byte(SOC); -+ break; -+ case POWER_SUPPLY_PROP_CAPACITY_LEVEL: -+ val->intval = read_ec_byte(sMBAT_STATUS); -+ if (val->intval & sBAT_FULL) -+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL; -+ else if (val->intval & sBAT_LOW) -+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW; -+ else -+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; -+ break; -+ case POWER_SUPPLY_PROP_TEMP: -+ val->intval = read_ec_byte(wBAT_TEMP) * 256 / 100; -+ break; -+ case POWER_SUPPLY_PROP_TEMP_AMBIENT: -+ val->intval = read_ec_byte(wAMB_TEMP) * 256 / 100; -+ break; -+ default: -+ ret = -EINVAL; -+ break; -+ } -+ -+out: -+ unlock_ec(); -+ return ret; -+} -+ -+static enum power_supply_property olpc_bat_props[] = { -+ POWER_SUPPLY_PROP_STATUS, -+ POWER_SUPPLY_PROP_PRESENT, -+ POWER_SUPPLY_PROP_HEALTH, -+ POWER_SUPPLY_PROP_TECHNOLOGY, -+ POWER_SUPPLY_PROP_VOLTAGE_AVG, -+ POWER_SUPPLY_PROP_CURRENT_AVG, -+ POWER_SUPPLY_PROP_CAPACITY, -+ POWER_SUPPLY_PROP_CAPACITY_LEVEL, -+ POWER_SUPPLY_PROP_TEMP, -+ POWER_SUPPLY_PROP_TEMP_AMBIENT, -+}; -+ -+/********************************************************************* -+ * Initialisation -+ *********************************************************************/ -+ -+static struct platform_device *bat_pdev; -+ -+static struct power_supply olpc_bat = { -+ .properties = olpc_bat_props, -+ .num_properties = ARRAY_SIZE(olpc_bat_props), -+ .get_property = olpc_bat_get_property, -+ .use_for_apm = 1, -+}; -+ -+static int __init olpc_bat_init(void) -+{ -+ int ret = 0; -+ unsigned short tmp; -+ -+ if (!request_region(0x380, 4, "olpc-battery")) { -+ ret = -EIO; -+ goto region_failed; -+ } -+ -+ if (lock_ec()) { -+ ret = -EIO; -+ goto lock_failed; -+ } -+ -+ tmp = read_ec_word(0xfe92); -+ unlock_ec(); -+ -+ if (tmp != 0x380) { -+ /* Doesn't look like OLPC EC */ -+ ret = -ENODEV; -+ goto not_olpc_ec; -+ } -+ -+ bat_pdev = platform_device_register_simple("olpc-battery", 0, NULL, 0); -+ if (IS_ERR(bat_pdev)) { -+ ret = PTR_ERR(bat_pdev); -+ goto pdev_failed; -+ } -+ -+ ret = power_supply_register(&bat_pdev->dev, &olpc_ac); -+ if (ret) -+ goto ac_failed; -+ -+ olpc_bat.name = bat_pdev->name; -+ -+ ret = power_supply_register(&bat_pdev->dev, &olpc_bat); -+ if (ret) -+ goto battery_failed; -+ -+ goto success; -+ -+battery_failed: -+ power_supply_unregister(&olpc_ac); -+ac_failed: -+ platform_device_unregister(bat_pdev); -+pdev_failed: -+not_olpc_ec: -+lock_failed: -+ release_region(0x380, 4); -+region_failed: -+success: -+ return ret; -+} -+ -+static void __exit olpc_bat_exit(void) -+{ -+ power_supply_unregister(&olpc_bat); -+ power_supply_unregister(&olpc_ac); -+ platform_device_unregister(bat_pdev); -+ release_region(0x380, 4); -+ return; -+} -+ -+module_init(olpc_bat_init); -+module_exit(olpc_bat_exit); -+ -+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); -+MODULE_LICENSE("GPL"); -+MODULE_DESCRIPTION("Battery driver for One Laptop Per Child " -+ "($100 laptop) board."); -Index: linux-2.6.22/drivers/power/pda_power.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/pda_power.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,263 @@ -+/* -+ * Common power driver for PDAs and phones with one or two external -+ * power supplies (AC/USB) connected to main and backup batteries, -+ * and optional builtin charger. -+ * -+ * Copyright 2007 Anton Vorontsov <cbou@mail.ru> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/module.h> -+#include <linux/platform_device.h> -+#include <linux/interrupt.h> -+#include <linux/power_supply.h> -+#include <linux/pda_power.h> -+#include <linux/timer.h> -+#include <linux/jiffies.h> -+ -+static inline unsigned int get_irq_flags(struct resource *res) -+{ -+ unsigned int flags = IRQF_DISABLED | IRQF_SHARED; -+ -+ flags |= res->flags & IRQF_TRIGGER_MASK; -+ -+ return flags; -+} -+ -+static struct device *dev; -+static struct pda_power_pdata *pdata; -+static struct resource *ac_irq, *usb_irq; -+static struct timer_list charger_timer; -+static struct timer_list supply_timer; -+ -+static int pda_power_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_ONLINE: -+ if (psy->type == POWER_SUPPLY_TYPE_MAINS) -+ val->intval = pdata->is_ac_online ? -+ pdata->is_ac_online() : 0; -+ else -+ val->intval = pdata->is_usb_online ? -+ pdata->is_usb_online() : 0; -+ break; -+ default: -+ return -EINVAL; -+ } -+ return 0; -+} -+ -+static enum power_supply_property pda_power_props[] = { -+ POWER_SUPPLY_PROP_ONLINE, -+}; -+ -+static char *pda_power_supplied_to[] = { -+ "main-battery", -+ "backup-battery", -+}; -+ -+static struct power_supply pda_power_supplies[] = { -+ { -+ .name = "ac", -+ .type = POWER_SUPPLY_TYPE_MAINS, -+ .supplied_to = pda_power_supplied_to, -+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to), -+ .properties = pda_power_props, -+ .num_properties = ARRAY_SIZE(pda_power_props), -+ .get_property = pda_power_get_property, -+ }, -+ { -+ .name = "usb", -+ .type = POWER_SUPPLY_TYPE_USB, -+ .supplied_to = pda_power_supplied_to, -+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to), -+ .properties = pda_power_props, -+ .num_properties = ARRAY_SIZE(pda_power_props), -+ .get_property = pda_power_get_property, -+ }, -+}; -+ -+static void update_charger(void) -+{ -+ if (!pdata->set_charge) -+ return; -+ -+ if (pdata->is_ac_online && pdata->is_ac_online()) { -+ dev_dbg(dev, "charger on (AC)\n"); -+ pdata->set_charge(PDA_POWER_CHARGE_AC); -+ } -+ else if (pdata->is_usb_online && pdata->is_usb_online()) { -+ dev_dbg(dev, "charger on (USB)\n"); -+ pdata->set_charge(PDA_POWER_CHARGE_USB); -+ } -+ else { -+ dev_dbg(dev, "charger off\n"); -+ pdata->set_charge(0); -+ } -+ -+ return; -+} -+ -+static void supply_timer_func(unsigned long irq) -+{ -+ if (ac_irq && irq == ac_irq->start) -+ power_supply_changed(&pda_power_supplies[0]); -+ else if (usb_irq && irq == usb_irq->start) -+ power_supply_changed(&pda_power_supplies[1]); -+ return; -+} -+ -+static void charger_timer_func(unsigned long irq) -+{ -+ update_charger(); -+ -+ /* Okay, charger set. Now wait a bit before notifying supplicants, -+ * charge power should stabilize. */ -+ supply_timer.data = irq; -+ mod_timer(&supply_timer, -+ jiffies + msecs_to_jiffies(pdata->wait_for_charger)); -+ return; -+} -+ -+static irqreturn_t power_changed_isr(int irq, void *unused) -+{ -+ /* Wait a bit before reading ac/usb line status and setting charger, -+ * because ac/usb status readings may lag from irq. */ -+ charger_timer.data = irq; -+ mod_timer(&charger_timer, -+ jiffies + msecs_to_jiffies(pdata->wait_for_status)); -+ return IRQ_HANDLED; -+} -+ -+static int pda_power_probe(struct platform_device *pdev) -+{ -+ int ret = 0; -+ -+ dev = &pdev->dev; -+ -+ if (pdev->id != -1) { -+ dev_err(dev, "it's meaningless to register several " -+ "pda_powers, use id = -1\n"); -+ ret = -EINVAL; -+ goto wrongid; -+ } -+ -+ pdata = pdev->dev.platform_data; -+ -+ update_charger(); -+ -+ if (!pdata->wait_for_status) -+ pdata->wait_for_status = 500; -+ -+ if (!pdata->wait_for_charger) -+ pdata->wait_for_charger = 500; -+ -+ setup_timer(&charger_timer, charger_timer_func, 0); -+ setup_timer(&supply_timer, supply_timer_func, 0); -+ -+ ac_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ac"); -+ usb_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "usb"); -+ if (!ac_irq && !usb_irq) { -+ dev_err(dev, "no ac/usb irq specified\n"); -+ ret = -ENODEV; -+ goto noirqs; -+ } -+ -+ if (pdata->supplied_to) { -+ pda_power_supplies[0].supplied_to = pdata->supplied_to; -+ pda_power_supplies[1].supplied_to = pdata->supplied_to; -+ pda_power_supplies[0].num_supplicants = pdata->num_supplicants; -+ pda_power_supplies[1].num_supplicants = pdata->num_supplicants; -+ } -+ -+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]); -+ if (ret) { -+ dev_err(dev, "failed to register %s power supply\n", -+ pda_power_supplies[0].name); -+ goto supply0_failed; -+ } -+ -+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]); -+ if (ret) { -+ dev_err(dev, "failed to register %s power supply\n", -+ pda_power_supplies[1].name); -+ goto supply1_failed; -+ } -+ -+ if (ac_irq) { -+ ret = request_irq(ac_irq->start, power_changed_isr, -+ get_irq_flags(ac_irq), ac_irq->name, -+ &pda_power_supplies[0]); -+ if (ret) { -+ dev_err(dev, "request ac irq failed\n"); -+ goto ac_irq_failed; -+ } -+ } -+ -+ if (usb_irq) { -+ ret = request_irq(usb_irq->start, power_changed_isr, -+ get_irq_flags(usb_irq), usb_irq->name, -+ &pda_power_supplies[1]); -+ if (ret) { -+ dev_err(dev, "request usb irq failed\n"); -+ goto usb_irq_failed; -+ } -+ } -+ -+ goto success; -+ -+usb_irq_failed: -+ if (ac_irq) -+ free_irq(ac_irq->start, &pda_power_supplies[0]); -+ac_irq_failed: -+ power_supply_unregister(&pda_power_supplies[1]); -+supply1_failed: -+ power_supply_unregister(&pda_power_supplies[0]); -+supply0_failed: -+noirqs: -+wrongid: -+success: -+ return ret; -+} -+ -+static int pda_power_remove(struct platform_device *pdev) -+{ -+ if (usb_irq) -+ free_irq(usb_irq->start, &pda_power_supplies[1]); -+ if (ac_irq) -+ free_irq(ac_irq->start, &pda_power_supplies[0]); -+ del_timer_sync(&charger_timer); -+ del_timer_sync(&supply_timer); -+ power_supply_unregister(&pda_power_supplies[1]); -+ power_supply_unregister(&pda_power_supplies[0]); -+ return 0; -+} -+ -+static struct platform_driver pda_power_pdrv = { -+ .driver = { -+ .name = "pda-power", -+ }, -+ .probe = pda_power_probe, -+ .remove = pda_power_remove, -+}; -+ -+static int __init pda_power_init(void) -+{ -+ return platform_driver_register(&pda_power_pdrv); -+} -+ -+static void __exit pda_power_exit(void) -+{ -+ platform_driver_unregister(&pda_power_pdrv); -+ return; -+} -+ -+module_init(pda_power_init); -+module_exit(pda_power_exit); -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>"); -Index: linux-2.6.22/drivers/power/pmu_battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/pmu_battery.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,215 @@ -+/* -+ * Battery class driver for Apple PMU -+ * -+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/module.h> -+#include <linux/platform_device.h> -+#include <linux/err.h> -+#include <linux/power_supply.h> -+#include <linux/adb.h> -+#include <linux/pmu.h> -+ -+static struct pmu_battery_dev { -+ struct power_supply bat; -+ struct pmu_battery_info *pbi; -+ char name[16]; -+ int propval; -+} *pbats[PMU_MAX_BATTERIES]; -+ -+#define to_pmu_battery_dev(x) container_of(x, struct pmu_battery_dev, bat) -+ -+/********************************************************************* -+ * Power -+ *********************************************************************/ -+ -+static int pmu_get_ac_prop(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_ONLINE: -+ val->intval = (!!(pmu_power_flags & PMU_PWR_AC_PRESENT)) || -+ (pmu_battery_count == 0); -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+static enum power_supply_property pmu_ac_props[] = { -+ POWER_SUPPLY_PROP_ONLINE, -+}; -+ -+static struct power_supply pmu_ac = { -+ .name = "pmu-ac", -+ .type = POWER_SUPPLY_TYPE_MAINS, -+ .properties = pmu_ac_props, -+ .num_properties = ARRAY_SIZE(pmu_ac_props), -+ .get_property = pmu_get_ac_prop, -+}; -+ -+/********************************************************************* -+ * Battery properties -+ *********************************************************************/ -+ -+static char *pmu_batt_types[] = { -+ "Smart", "Comet", "Hooper", "Unknown" -+}; -+ -+static char *pmu_bat_get_model_name(struct pmu_battery_info *pbi) -+{ -+ switch (pbi->flags & PMU_BATT_TYPE_MASK) { -+ case PMU_BATT_TYPE_SMART: -+ return pmu_batt_types[0]; -+ case PMU_BATT_TYPE_COMET: -+ return pmu_batt_types[1]; -+ case PMU_BATT_TYPE_HOOPER: -+ return pmu_batt_types[2]; -+ default: break; -+ } -+ return pmu_batt_types[3]; -+} -+ -+static int pmu_bat_get_property(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val) -+{ -+ struct pmu_battery_dev *pbat = to_pmu_battery_dev(psy); -+ struct pmu_battery_info *pbi = pbat->pbi; -+ -+ switch (psp) { -+ case POWER_SUPPLY_PROP_STATUS: -+ if (pbi->flags & PMU_BATT_CHARGING) -+ val->intval = POWER_SUPPLY_STATUS_CHARGING; -+ else -+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING; -+ break; -+ case POWER_SUPPLY_PROP_PRESENT: -+ val->intval = !!(pbi->flags & PMU_BATT_PRESENT); -+ break; -+ case POWER_SUPPLY_PROP_MODEL_NAME: -+ val->strval = pmu_bat_get_model_name(pbi); -+ break; -+ case POWER_SUPPLY_PROP_ENERGY_AVG: -+ val->intval = pbi->charge * 1000; /* mWh -> µWh */ -+ break; -+ case POWER_SUPPLY_PROP_ENERGY_FULL: -+ val->intval = pbi->max_charge * 1000; /* mWh -> µWh */ -+ break; -+ case POWER_SUPPLY_PROP_CURRENT_AVG: -+ val->intval = pbi->amperage * 1000; /* mA -> µA */ -+ break; -+ case POWER_SUPPLY_PROP_VOLTAGE_AVG: -+ val->intval = pbi->voltage * 1000; /* mV -> µV */ -+ break; -+ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG: -+ val->intval = pbi->time_remaining; -+ break; -+ default: -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+static enum power_supply_property pmu_bat_props[] = { -+ POWER_SUPPLY_PROP_STATUS, -+ POWER_SUPPLY_PROP_PRESENT, -+ POWER_SUPPLY_PROP_MODEL_NAME, -+ POWER_SUPPLY_PROP_ENERGY_AVG, -+ POWER_SUPPLY_PROP_ENERGY_FULL, -+ POWER_SUPPLY_PROP_CURRENT_AVG, -+ POWER_SUPPLY_PROP_VOLTAGE_AVG, -+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, -+}; -+ -+/********************************************************************* -+ * Initialisation -+ *********************************************************************/ -+ -+static struct platform_device *bat_pdev; -+ -+static int __init pmu_bat_init(void) -+{ -+ int ret; -+ int i; -+ -+ bat_pdev = platform_device_register_simple("pmu-battery", -+ 0, NULL, 0); -+ if (IS_ERR(bat_pdev)) { -+ ret = PTR_ERR(bat_pdev); -+ goto pdev_register_failed; -+ } -+ -+ ret = power_supply_register(&bat_pdev->dev, &pmu_ac); -+ if (ret) -+ goto ac_register_failed; -+ -+ for (i = 0; i < pmu_battery_count; i++) { -+ struct pmu_battery_dev *pbat = kzalloc(sizeof(*pbat), -+ GFP_KERNEL); -+ if (!pbat) -+ break; -+ -+ sprintf(pbat->name, "PMU battery %d", i); -+ pbat->bat.name = pbat->name; -+ pbat->bat.properties = pmu_bat_props; -+ pbat->bat.num_properties = ARRAY_SIZE(pmu_bat_props); -+ pbat->bat.get_property = pmu_bat_get_property; -+ pbat->pbi = &pmu_batteries[i]; -+ -+ ret = power_supply_register(&bat_pdev->dev, &pbat->bat); -+ if (ret) { -+ kfree(pbat); -+ goto battery_register_failed; -+ } -+ pbats[i] = pbat; -+ } -+ -+ goto success; -+ -+battery_register_failed: -+ while (i--) { -+ if (!pbats[i]) -+ continue; -+ power_supply_unregister(&pbats[i]->bat); -+ kfree(pbats[i]); -+ } -+ power_supply_unregister(&pmu_ac); -+ac_register_failed: -+ platform_device_unregister(bat_pdev); -+pdev_register_failed: -+success: -+ return ret; -+} -+ -+static void __exit pmu_bat_exit(void) -+{ -+ int i; -+ -+ for (i = 0; i < PMU_MAX_BATTERIES; i++) { -+ if (!pbats[i]) -+ continue; -+ power_supply_unregister(&pbats[i]->bat); -+ kfree(pbats[i]); -+ } -+ power_supply_unregister(&pmu_ac); -+ platform_device_unregister(bat_pdev); -+ -+ return; -+} -+ -+module_init(pmu_bat_init); -+module_exit(pmu_bat_exit); -+ -+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); -+MODULE_LICENSE("GPL"); -+MODULE_DESCRIPTION("PMU battery driver"); -Index: linux-2.6.22/drivers/power/power_supply_core.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/power_supply_core.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,168 @@ -+/* -+ * Universal power supply monitor class -+ * -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2004 Szabolcs Gyurko -+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com> -+ * -+ * Modified: 2004, Oct Szabolcs Gyurko -+ * -+ * You may use this code as per GPL version 2 -+ */ -+ -+#include <linux/module.h> -+#include <linux/types.h> -+#include <linux/init.h> -+#include <linux/device.h> -+#include <linux/err.h> -+#include <linux/power_supply.h> -+#include "power_supply.h" -+ -+struct class *power_supply_class; -+ -+static void power_supply_changed_work(struct work_struct *work) -+{ -+ struct power_supply *psy = container_of(work, struct power_supply, -+ changed_work); -+ int i; -+ -+ dev_dbg(psy->dev, "%s\n", __FUNCTION__); -+ -+ for (i = 0; i < psy->num_supplicants; i++) { -+ struct device *dev; -+ -+ down(&power_supply_class->sem); -+ list_for_each_entry(dev, &power_supply_class->devices, node) { -+ struct power_supply *pst = dev_get_drvdata(dev); -+ -+ if (!strcmp(psy->supplied_to[i], pst->name)) { -+ if (pst->external_power_changed) -+ pst->external_power_changed(pst); -+ } -+ } -+ up(&power_supply_class->sem); -+ } -+ -+ power_supply_update_leds(psy); -+ -+ kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE); -+ -+ return; -+} -+ -+void power_supply_changed(struct power_supply *psy) -+{ -+ dev_dbg(psy->dev, "%s\n", __FUNCTION__); -+ -+ schedule_work(&psy->changed_work); -+ -+ return; -+} -+ -+int power_supply_am_i_supplied(struct power_supply *psy) -+{ -+ union power_supply_propval ret = {0,}; -+ struct device *dev; -+ -+ down(&power_supply_class->sem); -+ list_for_each_entry(dev, &power_supply_class->devices, node) { -+ struct power_supply *epsy = dev_get_drvdata(dev); -+ int i; -+ -+ for (i = 0; i < epsy->num_supplicants; i++) { -+ if (!strcmp(epsy->supplied_to[i], psy->name)) { -+ if (epsy->get_property(epsy, -+ POWER_SUPPLY_PROP_ONLINE, &ret)) -+ continue; -+ if (ret.intval) -+ goto out; -+ } -+ } -+ } -+out: -+ up(&power_supply_class->sem); -+ -+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, ret.intval); -+ -+ return ret.intval; -+} -+ -+int power_supply_register(struct device *parent, struct power_supply *psy) -+{ -+ int rc = 0; -+ -+ psy->dev = device_create(power_supply_class, parent, 0, -+ "%s", psy->name); -+ if (IS_ERR(psy->dev)) { -+ rc = PTR_ERR(psy->dev); -+ goto dev_create_failed; -+ } -+ -+ dev_set_drvdata(psy->dev, psy); -+ -+ INIT_WORK(&psy->changed_work, power_supply_changed_work); -+ -+ rc = power_supply_create_attrs(psy); -+ if (rc) -+ goto create_attrs_failed; -+ -+ rc = power_supply_create_triggers(psy); -+ if (rc) -+ goto create_triggers_failed; -+ -+ power_supply_changed(psy); -+ -+ goto success; -+ -+create_triggers_failed: -+ power_supply_remove_attrs(psy); -+create_attrs_failed: -+ device_unregister(psy->dev); -+dev_create_failed: -+success: -+ return rc; -+} -+ -+void power_supply_unregister(struct power_supply *psy) -+{ -+ flush_scheduled_work(); -+ power_supply_remove_triggers(psy); -+ power_supply_remove_attrs(psy); -+ device_unregister(psy->dev); -+ return; -+} -+ -+static int __init power_supply_class_init(void) -+{ -+ power_supply_class = class_create(THIS_MODULE, "power_supply"); -+ -+ if (IS_ERR(power_supply_class)) -+ return PTR_ERR(power_supply_class); -+ -+ power_supply_class->dev_uevent = power_supply_uevent; -+ -+ return 0; -+} -+ -+static void __exit power_supply_class_exit(void) -+{ -+ class_destroy(power_supply_class); -+ return; -+} -+ -+EXPORT_SYMBOL_GPL(power_supply_changed); -+EXPORT_SYMBOL_GPL(power_supply_am_i_supplied); -+EXPORT_SYMBOL_GPL(power_supply_register); -+EXPORT_SYMBOL_GPL(power_supply_unregister); -+ -+/* exported for the APM Power driver, APM emulation */ -+EXPORT_SYMBOL_GPL(power_supply_class); -+ -+subsys_initcall(power_supply_class_init); -+module_exit(power_supply_class_exit); -+ -+MODULE_DESCRIPTION("Universal power supply monitor class"); -+MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, " -+ "Szabolcs Gyurko, " -+ "Anton Vorontsov <cbou@mail.ru>"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.22/drivers/power/power_supply.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/power_supply.h 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,42 @@ -+/* -+ * Functions private to power supply class -+ * -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2004 Szabolcs Gyurko -+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com> -+ * -+ * Modified: 2004, Oct Szabolcs Gyurko -+ * -+ * You may use this code as per GPL version 2 -+ */ -+ -+#ifdef CONFIG_SYSFS -+ -+extern int power_supply_create_attrs(struct power_supply *psy); -+extern void power_supply_remove_attrs(struct power_supply *psy); -+extern int power_supply_uevent(struct device *dev, char **envp, int num_envp, -+ char *buffer, int buffer_size); -+ -+#else -+ -+static inline int power_supply_create_attrs(struct power_supply *psy) -+{ return 0; } -+static inline void power_supply_remove_attrs(struct power_supply *psy) {} -+#define power_supply_uevent NULL -+ -+#endif /* CONFIG_SYSFS */ -+ -+#ifdef CONFIG_LEDS_TRIGGERS -+ -+extern void power_supply_update_leds(struct power_supply *psy); -+extern int power_supply_create_triggers(struct power_supply *psy); -+extern void power_supply_remove_triggers(struct power_supply *psy); -+ -+#else -+ -+static inline void power_supply_update_leds(struct power_supply *psy) {} -+static inline int power_supply_create_triggers(struct power_supply *psy) -+{ return 0; } -+static inline void power_supply_remove_triggers(struct power_supply *psy) {} -+ -+#endif /* CONFIG_LEDS_TRIGGERS */ -Index: linux-2.6.22/drivers/power/power_supply_leds.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/power_supply_leds.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,188 @@ -+/* -+ * LEDs triggers for power supply class -+ * -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2004 Szabolcs Gyurko -+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com> -+ * -+ * Modified: 2004, Oct Szabolcs Gyurko -+ * -+ * You may use this code as per GPL version 2 -+ */ -+ -+#include <linux/power_supply.h> -+ -+/* If we have hwtimer trigger, then use it to blink charging LED */ -+ -+#if defined(CONFIG_LEDS_TRIGGER_HWTIMER) || \ -+ (defined(CONFIG_BATTERY_MODULE) && \ -+ defined(CONFIG_LEDS_TRIGGER_HWTIMER_MODULE)) -+ #define led_trigger_register_charging led_trigger_register_hwtimer -+ #define led_trigger_unregister_charging led_trigger_unregister_hwtimer -+#else -+ #define led_trigger_register_charging led_trigger_register_simple -+ #define led_trigger_unregister_charging led_trigger_unregister_simple -+#endif -+ -+/* Battery specific LEDs triggers. */ -+ -+static void power_supply_update_bat_leds(struct power_supply *psy) -+{ -+ union power_supply_propval status; -+ -+ if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status)) -+ return; -+ -+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, status.intval); -+ -+ switch(status.intval) { -+ case POWER_SUPPLY_STATUS_FULL: -+ led_trigger_event(psy->charging_full_trig, LED_FULL); -+ led_trigger_event(psy->charging_trig, LED_OFF); -+ led_trigger_event(psy->full_trig, LED_FULL); -+ break; -+ case POWER_SUPPLY_STATUS_CHARGING: -+ led_trigger_event(psy->charging_full_trig, LED_FULL); -+ led_trigger_event(psy->charging_trig, LED_FULL); -+ led_trigger_event(psy->full_trig, LED_OFF); -+ break; -+ default: -+ led_trigger_event(psy->charging_full_trig, LED_OFF); -+ led_trigger_event(psy->charging_trig, LED_OFF); -+ led_trigger_event(psy->full_trig, LED_OFF); -+ break; -+ } -+ -+ return; -+} -+ -+static int power_supply_create_bat_triggers(struct power_supply *psy) -+{ -+ int rc = 0; -+ -+ psy->charging_full_trig_name = kmalloc(strlen(psy->name) + -+ sizeof("-charging-or-full"), GFP_KERNEL); -+ if (!psy->charging_full_trig_name) -+ goto charging_full_failed; -+ -+ psy->charging_trig_name = kmalloc(strlen(psy->name) + -+ sizeof("-charging"), GFP_KERNEL); -+ if (!psy->charging_trig_name) -+ goto charging_failed; -+ -+ psy->full_trig_name = kmalloc(strlen(psy->name) + -+ sizeof("-full"), GFP_KERNEL); -+ if (!psy->full_trig_name) -+ goto full_failed; -+ -+ strcpy(psy->charging_full_trig_name, psy->name); -+ strcat(psy->charging_full_trig_name, "-charging-or-full"); -+ strcpy(psy->charging_trig_name, psy->name); -+ strcat(psy->charging_trig_name, "-charging"); -+ strcpy(psy->full_trig_name, psy->name); -+ strcat(psy->full_trig_name, "-full"); -+ -+ led_trigger_register_simple(psy->charging_full_trig_name, -+ &psy->charging_full_trig); -+ led_trigger_register_charging(psy->charging_trig_name, -+ &psy->charging_trig); -+ led_trigger_register_simple(psy->full_trig_name, -+ &psy->full_trig); -+ -+ goto success; -+ -+full_failed: -+ kfree(psy->charging_trig_name); -+charging_failed: -+ kfree(psy->charging_full_trig_name); -+charging_full_failed: -+ rc = -ENOMEM; -+success: -+ return rc; -+} -+ -+static void power_supply_remove_bat_triggers(struct power_supply *psy) -+{ -+ led_trigger_unregister_simple(psy->charging_full_trig); -+ led_trigger_unregister_charging(psy->charging_trig); -+ led_trigger_unregister_simple(psy->full_trig); -+ kfree(psy->full_trig_name); -+ kfree(psy->charging_trig_name); -+ kfree(psy->charging_full_trig_name); -+ return; -+} -+ -+/* Generated power specific LEDs triggers. */ -+ -+static void power_supply_update_gen_leds(struct power_supply *psy) -+{ -+ union power_supply_propval online; -+ -+ if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &online)) -+ return; -+ -+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, online.intval); -+ -+ if (online.intval) -+ led_trigger_event(psy->online_trig, LED_FULL); -+ else -+ led_trigger_event(psy->online_trig, LED_OFF); -+ -+ return; -+} -+ -+static int power_supply_create_gen_triggers(struct power_supply *psy) -+{ -+ int rc = 0; -+ -+ psy->online_trig_name = kmalloc(strlen(psy->name) + sizeof("-online"), -+ GFP_KERNEL); -+ if (!psy->online_trig_name) -+ goto online_failed; -+ -+ strcpy(psy->online_trig_name, psy->name); -+ strcat(psy->online_trig_name, "-online"); -+ -+ led_trigger_register_simple(psy->online_trig_name, &psy->online_trig); -+ -+ goto success; -+ -+online_failed: -+ rc = -ENOMEM; -+success: -+ return rc; -+} -+ -+static void power_supply_remove_gen_triggers(struct power_supply *psy) -+{ -+ led_trigger_unregister_simple(psy->online_trig); -+ kfree(psy->online_trig_name); -+ return; -+} -+ -+/* Choice what triggers to create&update. */ -+ -+void power_supply_update_leds(struct power_supply *psy) -+{ -+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY) -+ power_supply_update_bat_leds(psy); -+ else -+ power_supply_update_gen_leds(psy); -+ return; -+} -+ -+int power_supply_create_triggers(struct power_supply *psy) -+{ -+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY) -+ return power_supply_create_bat_triggers(psy); -+ return power_supply_create_gen_triggers(psy); -+} -+ -+void power_supply_remove_triggers(struct power_supply *psy) -+{ -+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY) -+ power_supply_remove_bat_triggers(psy); -+ else -+ power_supply_remove_gen_triggers(psy); -+ return; -+} -Index: linux-2.6.22/drivers/power/power_supply_sysfs.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/power_supply_sysfs.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,289 @@ -+/* -+ * Sysfs interface for the universal power supply monitor class -+ * -+ * Copyright © 2007 David Woodhouse <dwmw2@infradead.org> -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2004 Szabolcs Gyurko -+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com> -+ * -+ * Modified: 2004, Oct Szabolcs Gyurko -+ * -+ * You may use this code as per GPL version 2 -+ */ -+ -+#include <linux/ctype.h> -+#include <linux/power_supply.h> -+ -+/* -+ * This is because the name "current" breaks the device attr macro. -+ * The "current" word resolvs to "(get_current())" so instead of -+ * "current" "(get_current())" appears in the sysfs. -+ * -+ * The source of this definition is the device.h which calls __ATTR -+ * macro in sysfs.h which calls the __stringify macro. -+ * -+ * Only modification that the name is not tried to be resolved -+ * (as a macro let's say). -+ */ -+ -+#define POWER_SUPPLY_ATTR(_name) \ -+{ \ -+ .attr = { .name = #_name, .mode = 0444, .owner = THIS_MODULE }, \ -+ .show = power_supply_show_property, \ -+ .store = NULL, \ -+} -+ -+static struct device_attribute power_supply_attrs[]; -+ -+static ssize_t power_supply_show_property(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) { -+ static char *status_text[] = { -+ "Unknown", "Charging", "Discharging", "Not charging", "Full" -+ }; -+ static char *health_text[] = { -+ "Unknown", "Good", "Overheat", "Dead" -+ }; -+ static char *technology_text[] = { -+ "Unknown", "NiMH", "Li-ion", "Li-poly" -+ }; -+ static char *capacity_level_text[] = { -+ "Unknown", "Critical", "Low", "Normal", "High", "Full" -+ }; -+ ssize_t ret; -+ struct power_supply *psy = dev_get_drvdata(dev); -+ const ptrdiff_t off = attr - power_supply_attrs; -+ union power_supply_propval value; -+ -+ ret = psy->get_property(psy, off, &value); -+ -+ if (ret < 0) { -+ dev_err(dev, "driver failed to report `%s' property\n", -+ attr->attr.name); -+ return ret; -+ } -+ -+ if (off == POWER_SUPPLY_PROP_STATUS) -+ return sprintf(buf, "%s\n", status_text[value.intval]); -+ else if (off == POWER_SUPPLY_PROP_HEALTH) -+ return sprintf(buf, "%s\n", health_text[value.intval]); -+ else if (off == POWER_SUPPLY_PROP_TECHNOLOGY) -+ return sprintf(buf, "%s\n", technology_text[value.intval]); -+ else if (off == POWER_SUPPLY_PROP_CAPACITY_LEVEL) -+ return sprintf(buf, "%s\n", -+ capacity_level_text[value.intval]); -+ else if (off == POWER_SUPPLY_PROP_MODEL_NAME) -+ return sprintf(buf, "%s\n", value.strval); -+ -+ return sprintf(buf, "%d\n", value.intval); -+} -+ -+/* Must be in the same order as POWER_SUPPLY_PROP_* */ -+static struct device_attribute power_supply_attrs[] = { -+ /* Properties of type `int' */ -+ POWER_SUPPLY_ATTR(status), -+ POWER_SUPPLY_ATTR(health), -+ POWER_SUPPLY_ATTR(present), -+ POWER_SUPPLY_ATTR(online), -+ POWER_SUPPLY_ATTR(technology), -+ POWER_SUPPLY_ATTR(voltage_max_design), -+ POWER_SUPPLY_ATTR(voltage_min_design), -+ POWER_SUPPLY_ATTR(voltage_now), -+ POWER_SUPPLY_ATTR(voltage_avg), -+ POWER_SUPPLY_ATTR(current_now), -+ POWER_SUPPLY_ATTR(current_avg), -+ POWER_SUPPLY_ATTR(charge_full_design), -+ POWER_SUPPLY_ATTR(charge_empty_design), -+ POWER_SUPPLY_ATTR(charge_full), -+ POWER_SUPPLY_ATTR(charge_empty), -+ POWER_SUPPLY_ATTR(charge_now), -+ POWER_SUPPLY_ATTR(charge_avg), -+ POWER_SUPPLY_ATTR(energy_full_design), -+ POWER_SUPPLY_ATTR(energy_empty_design), -+ POWER_SUPPLY_ATTR(energy_full), -+ POWER_SUPPLY_ATTR(energy_empty), -+ POWER_SUPPLY_ATTR(energy_now), -+ POWER_SUPPLY_ATTR(energy_avg), -+ POWER_SUPPLY_ATTR(capacity), -+ POWER_SUPPLY_ATTR(capacity_level), -+ POWER_SUPPLY_ATTR(temp), -+ POWER_SUPPLY_ATTR(temp_ambient), -+ POWER_SUPPLY_ATTR(time_to_empty_now), -+ POWER_SUPPLY_ATTR(time_to_empty_avg), -+ POWER_SUPPLY_ATTR(time_to_full_now), -+ POWER_SUPPLY_ATTR(time_to_full_avg), -+ /* Properties of type `const char *' */ -+ POWER_SUPPLY_ATTR(model_name), -+}; -+ -+static ssize_t power_supply_show_static_attrs(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) { -+ static char *type_text[] = { "Battery", "UPS", "Mains", "USB" }; -+ struct power_supply *psy = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%s\n", type_text[psy->type]); -+} -+ -+static struct device_attribute power_supply_static_attrs[] = { -+ __ATTR(type, 0444, power_supply_show_static_attrs, NULL), -+}; -+ -+int power_supply_create_attrs(struct power_supply *psy) -+{ -+ int rc = 0; -+ int i, j; -+ -+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) { -+ rc = device_create_file(psy->dev, -+ &power_supply_static_attrs[i]); -+ if (rc) -+ goto statics_failed; -+ } -+ -+ for (j = 0; j < psy->num_properties; j++) { -+ rc = device_create_file(psy->dev, -+ &power_supply_attrs[psy->properties[j]]); -+ if (rc) -+ goto dynamics_failed; -+ } -+ -+ goto succeed; -+ -+dynamics_failed: -+ while (j--) -+ device_remove_file(psy->dev, -+ &power_supply_attrs[psy->properties[j]]); -+statics_failed: -+ while (i--) -+ device_remove_file(psy->dev, -+ &power_supply_static_attrs[psy->properties[i]]); -+succeed: -+ return rc; -+} -+ -+void power_supply_remove_attrs(struct power_supply *psy) -+{ -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) -+ device_remove_file(psy->dev, -+ &power_supply_static_attrs[i]); -+ -+ for (i = 0; i < psy->num_properties; i++) -+ device_remove_file(psy->dev, -+ &power_supply_attrs[psy->properties[i]]); -+ -+ return; -+} -+ -+static char *kstruprdup(const char *str, gfp_t gfp) -+{ -+ char *ret, *ustr; -+ -+ ustr = ret = kmalloc(strlen(str) + 1, gfp); -+ -+ if (!ret) -+ return NULL; -+ -+ while (*str) -+ *ustr++ = toupper(*str++); -+ -+ *ustr = 0; -+ -+ return ret; -+} -+ -+int power_supply_uevent(struct device *dev, char **envp, int num_envp, -+ char *buffer, int buffer_size) -+{ -+ struct power_supply *psy = dev_get_drvdata(dev); -+ int i = 0, length = 0, ret = 0, j; -+ char *prop_buf; -+ char *attrname; -+ -+ dev_dbg(dev, "uevent\n"); -+ -+ if (!psy) { -+ dev_dbg(dev, "No power supply yet\n"); -+ return ret; -+ } -+ -+ dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->name); -+ -+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, -+ &length, "POWER_SUPPLY_NAME=%s", psy->name); -+ if (ret) -+ return ret; -+ -+ prop_buf = (char *)get_zeroed_page(GFP_KERNEL); -+ if (!prop_buf) -+ return -ENOMEM; -+ -+ for (j = 0; j < ARRAY_SIZE(power_supply_static_attrs); j++) { -+ struct device_attribute *attr; -+ char *line; -+ -+ attr = &power_supply_static_attrs[j]; -+ -+ ret = power_supply_show_static_attrs(dev, attr, prop_buf); -+ if (ret < 0) -+ goto out; -+ -+ line = strchr(prop_buf, '\n'); -+ if (line) -+ *line = 0; -+ -+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL); -+ if (!attrname) { -+ ret = -ENOMEM; -+ goto out; -+ } -+ -+ dev_dbg(dev, "Static prop %s=%s\n", attrname, prop_buf); -+ -+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, -+ &length, "POWER_SUPPLY_%s=%s", -+ attrname, prop_buf); -+ kfree(attrname); -+ if (ret) -+ goto out; -+ } -+ -+ dev_dbg(dev, "%zd dynamic props\n", psy->num_properties); -+ -+ for (j = 0; j < psy->num_properties; j++) { -+ struct device_attribute *attr; -+ char *line; -+ -+ attr = &power_supply_attrs[psy->properties[j]]; -+ -+ ret = power_supply_show_property(dev, attr, prop_buf); -+ if (ret < 0) -+ goto out; -+ -+ line = strchr(prop_buf, '\n'); -+ if (line) -+ *line = 0; -+ -+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL); -+ if (!attrname) { -+ ret = -ENOMEM; -+ goto out; -+ } -+ -+ dev_dbg(dev, "prop %s=%s\n", attrname, prop_buf); -+ -+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, -+ &length, "POWER_SUPPLY_%s=%s", -+ attrname, prop_buf); -+ kfree(attrname); -+ if (ret) -+ goto out; -+ } -+ -+out: -+ free_page((unsigned long)prop_buf); -+ -+ return ret; -+} -Index: linux-2.6.22/drivers/power/simpad-battery.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/drivers/power/simpad-battery.c 2007-08-23 12:13:52.000000000 +0200 -@@ -0,0 +1,242 @@ -+/* -+ * linux/drivers/misc/simpad-battery.c -+ * -+ * Copyright (C) 2005 Holger Hans Peter Freyther -+ * Copyright (C) 2001 Juergen Messerer -+ * -+ * 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. -+ * -+ * Read the Battery Level through the UCB1x00 chip. T-Sinuspad is -+ * unsupported for now. -+ * -+ */ -+ -+#include <linux/battery.h> -+#include <asm/dma.h> -+#include "ucb1x00.h" -+ -+ -+/* -+ * Conversion from AD -> mV -+ * 7.5V = 1023 7.3313mV/Digit -+ * -+ * 400 Units == 9.7V -+ * a = ADC value -+ * 21 = ADC error -+ * 12600 = Divident to get 2*7.3242 -+ * 860 = Divider to get 2*7.3242 -+ * 170 = Voltagedrop over -+ */ -+#define CALIBRATE_BATTERY(a) ((((a + 21)*12600)/860) + 170) -+ -+/* -+ * We have two types of batteries a small and a large one -+ * To get the right value we to distinguish between those two -+ * 450 Units == 15 V -+ */ -+#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 45) -+#define MIN_SUPPLY 12000 /* Less then 12V means no powersupply */ -+ -+/* -+ * Charging Current -+ * if value is >= 50 then charging is on -+ */ -+#define CALIBRATE_CHARGING(a) (((a)* 1000)/(152/4))) -+ -+struct simpad_battery_t { -+ struct battery battery; -+ struct ucb1x00* ucb; -+ -+ /* -+ * Variables for the values to one time support -+ * T-Sinuspad as well -+ */ -+ int min_voltage; -+ int min_current; -+ int min_charge; -+ -+ int max_voltage; -+ int max_current; -+ int max_charge; -+ -+ int min_supply; -+ int charging_led_label; -+ int charging_max_label; -+ int batt_full; -+ int batt_low; -+ int batt_critical; -+ int batt_empty; -+}; -+ -+static int simpad_get_min_voltage(struct battery* _battery ) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->min_voltage; -+} -+ -+static int simpad_get_min_current(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->min_current; -+} -+ -+static int simpad_get_min_charge(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->min_charge; -+} -+ -+static int simpad_get_max_voltage(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->max_voltage; -+} -+ -+static int simpad_get_max_current(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->max_current; -+} -+ -+static int simpad_get_max_charge(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ return battery->max_charge; -+} -+ -+static int simpad_get_temp(struct battery* _battery) -+{ -+ return 0; -+} -+ -+static int simpad_get_voltage(struct battery* _battery) -+{ -+ int val; -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ -+ -+ ucb1x00_adc_enable(battery->ucb); -+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD1, UCB_NOSYNC); -+ ucb1x00_adc_disable(battery->ucb); -+ -+ return CALIBRATE_BATTERY(val); -+} -+ -+static int simpad_get_current(struct battery* _battery) -+{ -+ int val; -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ -+ ucb1x00_adc_enable(battery->ucb); -+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD3, UCB_NOSYNC); -+ ucb1x00_adc_disable(battery->ucb); -+ -+ return val; -+} -+ -+static int simpad_get_charge(struct battery* _battery) -+{ -+ int val; -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery; -+ -+ ucb1x00_adc_enable(battery->ucb); -+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD2, UCB_NOSYNC); -+ ucb1x00_adc_disable(battery->ucb); -+ -+ return CALIBRATE_SUPPLY(val); -+ -+} -+ -+static int simpad_get_status(struct battery* _battery) -+{ -+ struct simpad_battery_t* battery = (struct simpad_battery_t*)(_battery); -+ int vcharger = simpad_get_voltage(_battery); -+ int icharger = simpad_get_current(_battery); -+ -+ int status = BATTERY_STATUS_UNKNOWN; -+ if(icharger > battery->charging_led_label) -+ status = BATTERY_STATUS_CHARGING; -+ else if(vcharger > battery->min_supply) -+ status = BATTERY_STATUS_NOT_CHARGING; -+ else -+ status = BATTERY_STATUS_DISCHARGING; -+ -+ return status; -+} -+ -+static struct simpad_battery_t simpad_battery = { -+ .battery = { -+ .get_min_voltage = simpad_get_min_voltage, -+ .get_min_current = simpad_get_min_current, -+ .get_min_charge = simpad_get_min_charge, -+ .get_max_voltage = simpad_get_max_voltage, -+ .get_max_current = simpad_get_max_current, -+ .get_max_charge = simpad_get_max_charge, -+ .get_temp = simpad_get_temp, -+ .get_voltage = simpad_get_voltage, -+ .get_current = simpad_get_current, -+ .get_charge = simpad_get_charge, -+ .get_status = simpad_get_status, -+ }, -+ .min_voltage = 0, -+ .min_current = 0, -+ .min_charge = 0, -+ .max_voltage = 0, -+ .max_current = 0, -+ .max_charge = 0, -+ -+ .min_supply = 1200, -+ .charging_led_label = 18, -+ .charging_max_label = 265, -+ .batt_full = 8300, -+ .batt_low = 7300, -+ .batt_critical = 6800, -+ .batt_empty = 6500, -+}; -+ -+ -+ -+/* -+ * UCB glue code -+ */ -+static int ucb1x00_battery_add(struct class_device *dev) -+{ -+ struct ucb1x00 *ucb = classdev_to_ucb1x00(dev); -+ simpad_battery.ucb = ucb; -+ -+ battery_class_register(&simpad_battery.battery); -+ -+ return 0; -+} -+ -+static void ucb1x00_battery_remove(struct class_device *dev) -+{ -+ return battery_class_unregister(&simpad_battery.battery); -+} -+ -+ -+static struct ucb1x00_class_interface ucb1x00_battery_interface = { -+ .interface = { -+ .add = ucb1x00_battery_add, -+ .remove = ucb1x00_battery_remove, -+ }, -+}; -+ -+ -+static int __init battery_register(void) -+{ -+ return ucb1x00_register_interface(&ucb1x00_battery_interface); -+} -+ -+static void __exit battery_unregister(void) -+{ -+ ucb1x00_unregister_interface(&ucb1x00_battery_interface); -+} -+ -+module_init(battery_register); -+module_exit(battery_unregister); -+ -+MODULE_AUTHOR("Holger Hans Peter Freyther"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.22/arch/arm/Kconfig -=================================================================== ---- linux-2.6.22.orig/arch/arm/Kconfig 2007-08-23 12:17:42.000000000 +0200 -+++ linux-2.6.22/arch/arm/Kconfig 2007-08-23 12:22:28.000000000 +0200 -@@ -1016,6 +1016,8 @@ - - source "drivers/w1/Kconfig" - -+source "drivers/power/Kconfig" -+ - source "drivers/hwmon/Kconfig" - - #source "drivers/l3/Kconfig" -Index: linux-2.6.22/drivers/Kconfig -=================================================================== ---- linux-2.6.22.orig/drivers/Kconfig 2007-08-23 12:21:27.000000000 +0200 -+++ linux-2.6.22/drivers/Kconfig 2007-08-23 12:22:03.000000000 +0200 -@@ -54,6 +54,8 @@ - - source "drivers/w1/Kconfig" - -+source "drivers/power/Kconfig" -+ - source "drivers/hwmon/Kconfig" - - source "drivers/mfd/Kconfig" -Index: linux-2.6.22/drivers/Makefile -=================================================================== ---- linux-2.6.22.orig/drivers/Makefile 2007-08-23 12:33:58.000000000 +0200 -+++ linux-2.6.22/drivers/Makefile 2007-08-23 12:34:34.000000000 +0200 -@@ -61,6 +61,7 @@ - obj-$(CONFIG_RTC_LIB) += rtc/ - obj-y += i2c/ - obj-$(CONFIG_W1) += w1/ -+obj-$(CONFIG_POWER_SUPPLY) += power/ - obj-$(CONFIG_HWMON) += hwmon/ - obj-$(CONFIG_PHONE) += telephony/ - obj-$(CONFIG_MD) += md/ -Index: linux-2.6.22/include/linux/power_supply.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.22/include/linux/power_supply.h 2007-08-23 12:37:10.000000000 +0200 -@@ -0,0 +1,175 @@ -+/* -+ * Universal power supply monitor class -+ * -+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru> -+ * Copyright (c) 2004 Szabolcs Gyurko -+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com> -+ * -+ * Modified: 2004, Oct Szabolcs Gyurko -+ * -+ * You may use this code as per GPL version 2 -+ */ -+ -+#ifndef __LINUX_POWER_SUPPLY_H__ -+#define __LINUX_POWER_SUPPLY_H__ -+ -+#include <linux/device.h> -+#include <linux/workqueue.h> -+#include <linux/leds.h> -+ -+/* -+ * All voltages, currents, charges, energies, time and temperatures in uV, -+ * uA, uAh, uWh, seconds and tenths of degree Celsius unless otherwise -+ * stated. It's driver's job to convert its raw values to units in which -+ * this class operates. -+ */ -+ -+/* -+ * For systems where the charger determines the maximum battery capacity -+ * the min and max fields should be used to present these values to user -+ * space. Unused/unknown fields will not appear in sysfs. -+ */ -+ -+enum { -+ POWER_SUPPLY_STATUS_UNKNOWN = 0, -+ POWER_SUPPLY_STATUS_CHARGING, -+ POWER_SUPPLY_STATUS_DISCHARGING, -+ POWER_SUPPLY_STATUS_NOT_CHARGING, -+ POWER_SUPPLY_STATUS_FULL, -+}; -+ -+enum { -+ POWER_SUPPLY_HEALTH_UNKNOWN = 0, -+ POWER_SUPPLY_HEALTH_GOOD, -+ POWER_SUPPLY_HEALTH_OVERHEAT, -+ POWER_SUPPLY_HEALTH_DEAD, -+}; -+ -+enum { -+ POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0, -+ POWER_SUPPLY_TECHNOLOGY_NIMH, -+ POWER_SUPPLY_TECHNOLOGY_LION, -+ POWER_SUPPLY_TECHNOLOGY_LIPO, -+}; -+ -+enum { -+ POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0, -+ POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL, -+ POWER_SUPPLY_CAPACITY_LEVEL_LOW, -+ POWER_SUPPLY_CAPACITY_LEVEL_NORMAL, -+ POWER_SUPPLY_CAPACITY_LEVEL_HIGH, -+ POWER_SUPPLY_CAPACITY_LEVEL_FULL, -+}; -+ -+enum power_supply_property { -+ /* Properties of type `int' */ -+ POWER_SUPPLY_PROP_STATUS = 0, -+ POWER_SUPPLY_PROP_HEALTH, -+ POWER_SUPPLY_PROP_PRESENT, -+ POWER_SUPPLY_PROP_ONLINE, -+ POWER_SUPPLY_PROP_TECHNOLOGY, -+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, -+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, -+ POWER_SUPPLY_PROP_VOLTAGE_NOW, -+ POWER_SUPPLY_PROP_VOLTAGE_AVG, -+ POWER_SUPPLY_PROP_CURRENT_NOW, -+ POWER_SUPPLY_PROP_CURRENT_AVG, -+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, -+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN, -+ POWER_SUPPLY_PROP_CHARGE_FULL, -+ POWER_SUPPLY_PROP_CHARGE_EMPTY, -+ POWER_SUPPLY_PROP_CHARGE_NOW, -+ POWER_SUPPLY_PROP_CHARGE_AVG, -+ POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, -+ POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN, -+ POWER_SUPPLY_PROP_ENERGY_FULL, -+ POWER_SUPPLY_PROP_ENERGY_EMPTY, -+ POWER_SUPPLY_PROP_ENERGY_NOW, -+ POWER_SUPPLY_PROP_ENERGY_AVG, -+ POWER_SUPPLY_PROP_CAPACITY, /* in percents! */ -+ POWER_SUPPLY_PROP_CAPACITY_LEVEL, -+ POWER_SUPPLY_PROP_TEMP, -+ POWER_SUPPLY_PROP_TEMP_AMBIENT, -+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, -+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, -+ POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, -+ POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, -+ /* Properties of type `const char *' */ -+ POWER_SUPPLY_PROP_MODEL_NAME, -+}; -+ -+enum power_supply_type { -+ POWER_SUPPLY_TYPE_BATTERY = 0, -+ POWER_SUPPLY_TYPE_UPS, -+ POWER_SUPPLY_TYPE_MAINS, -+ POWER_SUPPLY_TYPE_USB, -+}; -+ -+union power_supply_propval { -+ int intval; -+ const char *strval; -+}; -+ -+struct power_supply { -+ const char *name; -+ enum power_supply_type type; -+ enum power_supply_property *properties; -+ size_t num_properties; -+ -+ char **supplied_to; -+ size_t num_supplicants; -+ -+ int (*get_property)(struct power_supply *psy, -+ enum power_supply_property psp, -+ union power_supply_propval *val); -+ void (*external_power_changed)(struct power_supply *psy); -+ -+ /* For APM emulation, think legacy userspace. */ -+ int use_for_apm; -+ -+ /* private */ -+ struct device *dev; -+ struct work_struct changed_work; -+ -+#ifdef CONFIG_LEDS_TRIGGERS -+ struct led_trigger *charging_full_trig; -+ char *charging_full_trig_name; -+ struct led_trigger *charging_trig; -+ char *charging_trig_name; -+ struct led_trigger *full_trig; -+ char *full_trig_name; -+ struct led_trigger *online_trig; -+ char *online_trig_name; -+#endif -+}; -+ -+/* -+ * This is recommended structure to specify static power supply parameters. -+ * Generic one, parametrizable for different power supplies. Power supply -+ * class itself does not use it, but that's what implementing most platform -+ * drivers, should try reuse for consistency. -+ */ -+ -+struct power_supply_info { -+ const char *name; -+ int technology; -+ int voltage_max_design; -+ int voltage_min_design; -+ int charge_full_design; -+ int charge_empty_design; -+ int energy_full_design; -+ int energy_empty_design; -+ int use_for_apm; -+}; -+ -+extern void power_supply_changed(struct power_supply *psy); -+extern int power_supply_am_i_supplied(struct power_supply *psy); -+ -+extern int power_supply_register(struct device *parent, -+ struct power_supply *psy); -+extern void power_supply_unregister(struct power_supply *psy); -+ -+/* For APM emulation, think legacy userspace. */ -+extern struct class *power_supply_class; -+ -+#endif /* __LINUX_POWER_SUPPLY_H__ */ diff --git a/packages/linux/linux-rp-2.6.23/versatile-armv6.patch b/packages/linux/linux-rp-2.6.23/versatile-armv6.patch new file mode 100644 index 0000000000..e2d0060ac3 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/versatile-armv6.patch @@ -0,0 +1,19 @@ +--- + arch/arm/mm/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.23.orig/arch/arm/mm/Kconfig ++++ linux-2.6.23/arch/arm/mm/Kconfig +@@ -343,11 +343,11 @@ config CPU_XSC3 + select IO_36 + + # ARMv6 + config CPU_V6 + bool "Support ARM V6 processor" +- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 ++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB + default y if ARCH_MX3 + select CPU_32v6 + select CPU_ABRT_EV6 + select CPU_CACHE_V6 + select CPU_CACHE_VIPT diff --git a/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch b/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch deleted file mode 100644 index 5a51d1c3f5..0000000000 --- a/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- - drivers/char/vt_ioctl.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -Index: linux-2.6.22/drivers/char/vt_ioctl.c -=================================================================== ---- linux-2.6.22.orig/drivers/char/vt_ioctl.c 2007-07-09 01:32:17.000000000 +0200 -+++ linux-2.6.22/drivers/char/vt_ioctl.c 2007-09-27 11:58:42.000000000 +0200 -@@ -770,6 +770,7 @@ - /* - * Switching-from response - */ -+ acquire_console_sem(); - if (vc->vt_newvt >= 0) { - if (arg == 0) - /* -@@ -784,7 +785,6 @@ - * complete the switch. - */ - int newvt; -- acquire_console_sem(); - newvt = vc->vt_newvt; - vc->vt_newvt = -1; - i = vc_allocate(newvt); -@@ -798,7 +798,6 @@ - * other console switches.. - */ - complete_change_console(vc_cons[newvt].d); -- release_console_sem(); - } - } - -@@ -810,9 +809,12 @@ - /* - * If it's just an ACK, ignore it - */ -- if (arg != VT_ACKACQ) -+ if (arg != VT_ACKACQ) { -+ release_console_sem(); - return -EINVAL; -+ } - } -+ release_console_sem(); - - return 0; - diff --git a/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch b/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch deleted file mode 100644 index 8cbbb6bd01..0000000000 --- a/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch +++ /dev/null @@ -1,17 +0,0 @@ -From: Marcin Juszkiewicz <openembedded@haerwu.biz> - -drivers/video/w100fb.c: In function ‘w100fb_imageblit’: -drivers/video/w100fb.c:507: warning: unused variable ‘par’ - -Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz> - ---- linux-2.6.23/drivers/video/w100fb.c 2007-10-11 16:52:30.000000000 +0200 -+++ linux-2.6.23/drivers/video/w100fb.c 2007-10-15 12:56:01.000000000 +0200 -@@ -504,7 +504,6 @@ static void w100_hostdata(u32 width, u32 - static void w100fb_imageblit(struct fb_info *info, - const struct fb_image *image) - { -- struct w100fb_par *par = info->par; - union dp_gui_master_cntl_u gmc; - u32 fgcolor, bgcolor; - |