diff options
author | Koen Kooi <koen@openembedded.org> | 2005-06-30 08:19:37 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-06-30 08:19:37 +0000 |
commit | c8e5702127e507e82e6f68a4b8c546803accea9d (patch) | |
tree | 00583491f40ecc640f2b28452af995e3a63a09d7 /packages/linux/openslug-kernel-2.6.11 | |
parent | 87ec8ca4d2e2eb4d1c1e1e1a6b46a395d56805b9 (diff) |
import clean BK tree at cset 1.3670
Diffstat (limited to 'packages/linux/openslug-kernel-2.6.11')
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/.mtn2git_empty | 0 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/defconfig | 1301 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/ixp4xx_copy_from.patch | 27 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2-io.c | 750 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2-part.c | 120 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2-pci.c | 87 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2-setup.c | 134 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2.h | 43 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/nslu2_2.6.11.patch | 159 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/usbnet.patch | 17 | ||||
-rw-r--r-- | packages/linux/openslug-kernel-2.6.11/x1205-rtc.c | 548 |
11 files changed, 3186 insertions, 0 deletions
diff --git a/packages/linux/openslug-kernel-2.6.11/.mtn2git_empty b/packages/linux/openslug-kernel-2.6.11/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/openslug-kernel-2.6.11/.mtn2git_empty diff --git a/packages/linux/openslug-kernel-2.6.11/defconfig b/packages/linux/openslug-kernel-2.6.11/defconfig index e69de29bb2..9d5f54c13b 100644 --- a/packages/linux/openslug-kernel-2.6.11/defconfig +++ b/packages/linux/openslug-kernel-2.6.11/defconfig @@ -0,0 +1,1301 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.11 +# Tue Mar 8 02:00:48 2005 +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_IOMAP=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_BROKEN_ON_SMP=y + +# +# General setup +# +CONFIG_LOCALVERSION="" +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_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y +CONFIG_KOBJECT_UEVENT=y +# CONFIG_IKCONFIG is not set +CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SHMEM=y +CONFIG_CC_ALIGN_FUNCTIONS=0 +CONFIG_CC_ALIGN_LABELS=0 +CONFIG_CC_ALIGN_LOOPS=0 +CONFIG_CC_ALIGN_JUMPS=0 +# CONFIG_TINY_SHMEM is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# System Type +# +# 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_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP3XX is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_L7200 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_OMAP is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_H720X is not set +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y + +# +# Intel IXP4xx Implementation Options +# + +# +# IXP4xx Platforms +# +# CONFIG_ARCH_AVILA is not set +# CONFIG_ARCH_ADI_COYOTE is not set +# CONFIG_ARCH_IXDP425 is not set +# CONFIG_MACH_IXDPG425 is not set +# CONFIG_MACH_IXDP465 is not set +CONFIG_ARCH_NSLU2=y +# CONFIG_ARCH_PRPMC1100 is not set +# CONFIG_MACH_GTWX5715 is not set + +# +# IXP4xx Options +# +CONFIG_IXP4XX_INDIRECT_PCI=y +CONFIG_DMABOUNCE=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_MINICACHE=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_XSCALE_PMU=y + +# +# General setup +# +CONFIG_PCI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_XIP_KERNEL is not set +CONFIG_PCI_LEGACY_PROC=y +# CONFIG_PCI_NAMES is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# PC-card bridges +# + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +CONFIG_PM=y +# CONFIG_PREEMPT is not set +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/ram0 initrd=0x01000000,10M mem=32M@0x00000000 console=ttyS0,115200n8" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CONCAT=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +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_XIP is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# 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 + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=10240 +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CDROM_PKTCDVD is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +# CONFIG_MD_LINEAR is not set +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +# CONFIG_MD_RAID10 is not set +CONFIG_MD_RAID5=m +# CONFIG_MD_RAID6 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_MD_FAULTY is not set +# CONFIG_BLK_DEV_DM is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK_DEV=m +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +CONFIG_INET_TUNNEL=m +CONFIG_IP_TCPDIAG=y +# CONFIG_IP_TCPDIAG_IPV6 is not set + +# +# IP: Virtual Server Configuration +# +CONFIG_IP_VS=m +CONFIG_IP_VS_DEBUG=y +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +# CONFIG_IP_VS_PROTO_TCP is not set +# CONFIG_IP_VS_PROTO_UDP is not set +# CONFIG_IP_VS_PROTO_ESP is not set +# CONFIG_IP_VS_PROTO_AH is not set + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +# CONFIG_IP_VS_SED is not set +# CONFIG_IP_VS_NQ is not set + +# +# IPVS application helper +# +# CONFIG_IPV6 is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_CONNTRACK_MARK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=y +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +# 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 + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CLK_JIFFIES=y +# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set +# CONFIG_NET_SCH_CLK_CPU is not set +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +# CONFIG_NET_SCH_HFSC is not set +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +# CONFIG_NET_SCH_NETEM is not set +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_QOS=y +CONFIG_NET_ESTIMATOR=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +# CONFIG_CLS_U32_PERF is not set +# CONFIG_NET_CLS_IND is not set +# CONFIG_CLS_U32_MARK is not set +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +# CONFIG_NET_CLS_ACT is not set +CONFIG_NET_CLS_POLICE=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +CONFIG_NETPOLL=y +CONFIG_NETPOLL_RX=y +CONFIG_NETPOLL_TRAP=y +CONFIG_NET_POLL_CONTROLLER=y +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +# CONFIG_BT_HIDP is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set + +# +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support +# +# CONFIG_PRISM54 is not set +CONFIG_NET_WIRELESS=y + +# +# Wan interfaces +# +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +CONFIG_NETCONSOLE=m + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI Transport Attributes +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 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 + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_IXP4XX_WATCHDOG=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC 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 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_IOP3XX is not set +# CONFIG_I2C_ISA is not set +CONFIG_I2C_IXP4XX=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Hardware Sensors Chip support +# +CONFIG_I2C_SENSOR=y +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set + +# +# Other I2C Chip support +# +CONFIG_SENSORS_EEPROM=y +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_RTC8564 is not set +CONFIG_SENSORS_X1205=y +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# + +# +# Video Adapters +# +# CONFIG_VIDEO_BT848 is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_SAA7134 is not set +# CONFIG_VIDEO_MXB is not set +# CONFIG_VIDEO_DPC is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set +# CONFIG_VIDEO_CX88 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set + +# +# XFS support +# +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_TMPFS_XATTR is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# 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_NAND is not set +# CONFIG_JFFS2_FS_NOR_ECC is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_SUNRPC=m +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# USB support +# +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# + +# +# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem +# +# CONFIG_USB_ACM is not set +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_RW_DETECT is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# 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 is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set +# CONFIG_USB_EGALAX is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +# CONFIG_USB_RTL8150 is not set +CONFIG_USB_USBNET=m + +# +# USB Host-to-Host Cables +# +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_GENESYS=y +CONFIG_USB_NET1080=y +CONFIG_USB_PL2301=y +CONFIG_USB_KC2190=y + +# +# Intelligent USB Devices/Gadgets +# +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_ZAURUS=y +CONFIG_USB_CDCETHER=y + +# +# USB Network Adapters +# +CONFIG_USB_AX8817X=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 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_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETKIT is not set +# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_TEST is not set + +# +# USB ATM/DSL drivers +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# Kernel hacking +# +CONFIG_DEBUG_KERNEL=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_CRC_CCITT=m +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff --git a/packages/linux/openslug-kernel-2.6.11/ixp4xx_copy_from.patch b/packages/linux/openslug-kernel-2.6.11/ixp4xx_copy_from.patch index e69de29bb2..8d0f187d44 100644 --- a/packages/linux/openslug-kernel-2.6.11/ixp4xx_copy_from.patch +++ b/packages/linux/openslug-kernel-2.6.11/ixp4xx_copy_from.patch @@ -0,0 +1,27 @@ +--- linux-2.6.11/drivers/mtd/maps/ixp4xx.c.orig 2005-03-05 20:00:28.000000000 +0100 ++++ linux-2.6.11/drivers/mtd/maps/ixp4xx.c 2005-03-05 22:10:48.000000000 +0100 +@@ -29,6 +29,8 @@ + #include <asm/mach-types.h> + #include <asm/mach/flash.h> + ++#include <asm/unaligned.h> ++ + #include <linux/reboot.h> + + #ifndef __ARMEB__ +@@ -60,13 +62,13 @@ static void ixp4xx_copy_from(struct map_ + u16 data; + + for (i = 0; i < (len / 2); i++) { +- data = src[i]; ++ data = get_unaligned((u16*)(src + i)); + dest[i * 2] = BYTE0(data); + dest[i * 2 + 1] = BYTE1(data); + } + + if (len & 1) +- dest[len - 1] = BYTE0(src[i]); ++ dest[len - 1] = BYTE0(get_unaligned((u16*)(src + i))); + } + + /* diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2-io.c b/packages/linux/openslug-kernel-2.6.11/nslu2-io.c index e69de29bb2..cd5ed36c15 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2-io.c +++ b/packages/linux/openslug-kernel-2.6.11/nslu2-io.c @@ -0,0 +1,750 @@ +//============================================================================= +// +// n2-io.c version 0.1.7 +// Author: Karen Spearel <kas11 at tampabay.rr.com> +// please report problems/bugs directly to the address above +// +// Boilerplate to be added "real soon now"...it is and has always been GPL'ed per +// MODULE_LICENSE but is offered without warrantee of any sort..use at your own risk +// +// NOTE: THIS IS INCOMPLETE. INCLUDED ONLY TO KEEP FROM BREAKING THE BUILD, +// IT BEEPS AND SENDS A MESSAGE TO /proc/poweroff. EVENTUALLY IT +// WILL TALK TO THE n2_pbd DAEMON. EVENTUALLY THE LED DRIVER +// WILL TALK TO SOME USERLAND APP BUT ***NOT*** SET_LEDS. +// +//============================================================================= +// GPIO Function State +// 0 Red LED Status +// 1 Green LED Ready = 1 +// 2 Disk 2 LED On = 0 +// 3 Disk 1 LED On = 0 +// 4 Buzzer +// 5 Power Button Pressed = 1 +// 8 Power Down Output = 1 powers down N2 +// 12 Reset Pressed = 0 +//============================================================================= +// this driver is N2 specific and is purposely designed to do the minimum +// necessary to provide the necessary services given the limited memory resources +// of the N2. As OpenN2 develops, addition features will be added as +// suggested by the community. +// +//============================================================================= + +#include <linux/config.h> +#include <linux/version.h> +#include <linux/module.h> +#include <linux/utsname.h> +#include <linux/kernel.h> +#include <linux/major.h> +#include <linux/string.h> +#include <linux/proc_fs.h> +#include <linux/slab.h> +#include <linux/init.h> +#include <linux/errno.h> +#include <linux/fs.h> +#include <linux/miscdevice.h> +#include <linux/device.h> +#include <linux/interrupt.h> +#include <linux/moduleparam.h> +#include <linux/timer.h> + +#include <asm/system.h> +#include <asm/uaccess.h> +#include <asm/hardware.h> +#include <asm-arm/irq.h> +#include <asm-arm/delay.h> +#include <asm-arm/signal.h> + + +#define VERSION "0.1.7" + +#define N2RB_MAJOR 60 +#define N2PB_MAJOR 61 +#define N2BZ_MAJOR 62 +#define N2LM_MAJOR 126 + +#define N2PB_IRQ 22 //gpio5 +#define N2RB_IRQ 29 //gpio12 + +#define N2_BEEP_DUR_LONG 2000 +#define N2_BEEP_DUR_MED 400 +#define N2_BEEP_DUR_SHORT 100 +#define N2_BEEP_PITCH_HIGH 250 +#define N2_BEEP_PITCH_MED 500 +#define N2_BEEP_PITCH_LOW 1000 +#define N2_LONG_DELAY 30000 + +#define N2_BZ_GPIO 4 +#define N2_PB_GPIO 5 +#define N2_PO_GPIO 8 //power off +#define N2_RB_GPIO 12 + +#define GPIO_BZ_BM 0x0010 //b0000 0000 0001 0000 +#define GPIO_PB_BM 0x0020 //b0000 0000 0010 0000 +#define GPIO_PO_BM 0x0100 //b0000 0001 0000 0000 +#define GPIO_RB_BM 0x1000 //b0001 0000 0000 0000 + +#define NOERR 0 + +#define RB_DELAY 50 +#define PB_DELAY 20 + +#define PWR_OFF_STR "poweroff" + + +// ioctls -- 'M" is used for sound cards...we don't got one so it seems safe + +#define N2BZ_BEEP_STOP _IO('M',0) //stop multi-beep at end of audible +#define N2BZ_BEEP _IO('M',1) //one beep at current defaults +#define N2BZ_BEEPS _IOW('M',3,long) //param beeps at current defaults +#define N2BZ_TONESET _IOW('M',4,long) //set tone: range is high=250 to low=2000 +#define N2BZ_ONTIME _IOW('M',5,long) //ontime for multi-beeps in jiffies +#define N2BZ_SILENTTIME _IOW('M',6,long) //offtime for multi-beeps in jiffies +#define N2BZ_REPEATCNT _IOW('M',7,long) //number of repeats for multi-beeps 0 = forever +#define N2BZ_COMBINED _IOW('M',8,long) //combine all params in a long + +#define N2LM_OFF _IOW('M',32,long) +#define N2LM_ON _IOW('M',33,long) +#define N2LM_BLINK _IOW('M',34,long) +#define N2LM_ALT _IOW('M',35,long) +#define N2LM_ALL_ON _IO('M',36) +#define N2LM_ALL_OFF _IO('M',37) + +#define PHYS_LEDS 4 +#define BLINK_DELAY 25 + +// OR Masks to turn these LEDs ON + +#define RS_RED_ON 0x00000001 //0b0000 0000 0000 0010 +#define RS_GRN_ON 0x00000002 //0b0000 0000 0000 0001 +#define RS_YEL_ON 0x00000003 //0b0000 0000 0000 0011 + +// AND Masks to turn these LEDs OFF + +#define RS_RED_OFF 0xfffffffe //0b1111 1111 1111 1101 +#define RS_GRN_OFF 0xfffffffd //0b1111 1111 1111 1110 +#define RS_YEL_OFF 0xfffffffc //0b1111 1111 1111 1100 + +// AND Masks to turn these LEDs ON + +#define DISK1_ON 0xfffffff7 //0b1111 1111 1111 0111 +#define DISK2_ON 0xfffffffb //0b1111 1111 1111 1011 + +// Or Masks to turn these LEDs OFF + +#define DISK1_OFF 0x00000008 //0b0000 0000 0000 1000 +#define DISK2_OFF 0x00000004 //0b0000 0000 0000 0100 + +// EOR masks for toggling LEDs on/off + +#define RS_RG_ALT 0x00000003 //eor mask to toggle rs rg bits +#define RS_GRN_TGL 0x00000002 +#define RS_RED_TGL 0x00000001 +#define DISK1_TGL 0x00000008 +#define DISK2_TGL 0x00000004 + +// The LED names for switches + +#define LED_RS_RED 0 +#define LED_RS_GRN 1 +#define LED_DISK1 2 +#define LED_DISK2 3 +#define LED_ALL 4 + +static unsigned long init_jiffy = 0; //jiffies at init time +static unsigned long rb_presses = 0; //number of reset button presses +static unsigned long ontime = 50; +static unsigned long offtime = 450; +static unsigned long bz_repeatcnt = 10; +static unsigned long tone = 1000; + +DECLARE_WAIT_QUEUE_HEAD(n2rb_waitq); +DECLARE_WAIT_QUEUE_HEAD(n2pb_waitq); + +static struct timer_list n2lm_rsg_timer; //rs green +static struct timer_list n2lm_rsr_timer; //rs red +static struct timer_list n2lm_d1_timer; //drive 1 +static struct timer_list n2lm_d2_timer; //drive 2 +static struct timer_list n2rb_timer; +static struct timer_list n2pb_timer; +static struct timer_list n2bz_timer; //beeper + +//================================================================================================== +// +// Blinking is handled entirely by the 4 timer handlers. On timeout, the bit in the +// GPIO output register is xor'd with a mask corresponding to the selected led which simply +// flips that bit. No record of what any of the other leds is doing is needed. +// +//================================================================================================== +// this blinks rs green or green/yellow if rs red is on +static void n2lm_rsg_handler(unsigned long data) +{ + *IXP4XX_GPIO_GPOUTR ^= RS_GRN_TGL; //flip the led + n2lm_rsg_timer.expires = jiffies + BLINK_DELAY; //next timeout + add_timer(&n2lm_rsg_timer); //reinit timer + return; +} + +// this blinks or alternates rs red green... inited wit green on/red off +static void n2lm_rsr_handler(unsigned long data) +{ + *IXP4XX_GPIO_GPOUTR ^= n2lm_rsr_timer.data; + n2lm_rsr_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_rsr_timer); + return; +} +// blinks disk 1 +static void n2lm_d1_handler(unsigned long data) +{ + *IXP4XX_GPIO_GPOUTR ^= DISK1_TGL; + n2lm_d1_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_d1_timer); + return; +} +// blinks disk 2 +static void n2lm_d2_handler(unsigned long data) +{ + *IXP4XX_GPIO_GPOUTR ^= DISK2_TGL; + n2lm_d2_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_d2_timer); + return; +} + +//================================================================================================== + +static void n2lm_timer_start(unsigned long led) +{ + + printk(KERN_DEBUG "timer: %ld\n",led); + + switch(led) { + case LED_RS_RED: + n2lm_rsr_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_rsr_timer); + break; + + case LED_RS_GRN: + n2lm_rsg_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_rsg_timer); + break; + + case LED_DISK1: + n2lm_d1_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_d1_timer); + break; + + case LED_DISK2: + n2lm_d2_timer.expires = jiffies + BLINK_DELAY; + add_timer(&n2lm_d2_timer); + break; + + default: + break; + } + return; +} + +//================================================================================================== + +static void n2lm_timer_stop(unsigned long led) +{ + switch (led) { + case LED_RS_RED: + del_timer(&n2lm_rsr_timer); + break; + case LED_RS_GRN: + del_timer(&n2lm_rsg_timer); + break; + case LED_DISK1: + del_timer(&n2lm_d1_timer); + break; + case LED_DISK2: + del_timer(&n2lm_d2_timer); + break; + default: + break; + } + return; +} + +//-------------------------------------------------------------------------------------------------- + +static void n2lm_timer_stop_all(void) +{ + del_timer(&n2lm_rsg_timer); + del_timer(&n2lm_rsr_timer); + del_timer(&n2lm_d1_timer); + del_timer(&n2lm_d2_timer); + return; +} +//-------------------------------------------------------------------------------------------------- + +static void n2lm_ledon(unsigned long led) +{ + + printk(KERN_DEBUG "ledon: %ld\n", led); + + switch (led) { + case LED_RS_RED: + *IXP4XX_GPIO_GPOUTR |= RS_RED_ON; //1 + return; + case LED_RS_GRN: + *IXP4XX_GPIO_GPOUTR |= RS_GRN_ON; //2 + return; + case LED_DISK1: + *IXP4XX_GPIO_GPOUTR &= DISK1_ON; //0xfffffffb + return; + case LED_DISK2: + *IXP4XX_GPIO_GPOUTR &= DISK2_ON; //0xfffffff7 + return; + case LED_ALL: //all green + *IXP4XX_GPIO_GPOUTR |= RS_GRN_ON; + *IXP4XX_GPIO_GPOUTR &= (DISK1_ON & DISK2_ON); + return; + } +} + +//-------------------------------------------------------------------------------------------------- + +static void n2lm_ledoff(unsigned long led) +{ + + switch (led) { + case LED_RS_RED: + *IXP4XX_GPIO_GPOUTR &= RS_RED_OFF; //0xffffffffe + return; + case LED_RS_GRN: + *IXP4XX_GPIO_GPOUTR &= RS_GRN_OFF; //0xfffffffd + return; + case LED_DISK1: + *IXP4XX_GPIO_GPOUTR |= DISK1_OFF; //0x00000004 + return; + case LED_DISK2: + *IXP4XX_GPIO_GPOUTR |= DISK2_OFF; //0x00000008 + return; + case LED_ALL: + *IXP4XX_GPIO_GPOUTR &= (RS_GRN_OFF & RS_RED_OFF); + *IXP4XX_GPIO_GPOUTR |= (DISK1_OFF | DISK2_OFF); + } +} + +//================================================================================================== + +static int n2lm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long led) +{ + + printk(KERN_DEBUG "cmd=%d, led=%ld\n", cmd, led); + + if (led < 0 || led >= PHYS_LEDS) + return -EINVAL; + + switch (cmd ) { + case N2LM_ON: + n2lm_timer_stop(led); + n2lm_ledon(led); + break; + + case N2LM_OFF: + n2lm_timer_stop(led); + n2lm_ledoff(led); + break; + + case N2LM_BLINK: + n2lm_ledon(led); + if (led == LED_RS_RED) + n2lm_rsr_timer.data = RS_RED_TGL; + if (led == LED_RS_GRN) + n2lm_rsr_timer.data = RS_GRN_TGL; + n2lm_timer_start(led); + break; + + case N2LM_ALT: + if (led == LED_RS_RED) + { + n2lm_ledon(LED_RS_GRN); + n2lm_ledoff(LED_RS_RED); + n2lm_rsr_timer.data = RS_RG_ALT; + n2lm_timer_start(LED_RS_RED); + break; + } else + return -EINVAL; + + case N2LM_ALL_ON: + n2lm_timer_stop_all(); + n2lm_ledon(LED_ALL); + break; + + case N2LM_ALL_OFF: + n2lm_timer_stop_all(); + n2lm_ledoff(LED_ALL); + break; + + default: + return -EINVAL; + } + + return NOERR; +} + +static struct file_operations n2lm_fops = { + .owner = THIS_MODULE, + .ioctl = n2lm_ioctl, +}; +//================================================================================================== +// We can't do anything fancy here since the system tick rate is far below that required to +// generate a desirable tone. Therefore we haven't much choice but to use a busy loop until +// I get up to speed on the timers. The saving grace is that for the normal uses, nothing +// important should be haprepening. +//================================================================================================== + +static void n2_buzz(int tone_delay, int duration) +{ + int i; + + *IXP4XX_GPIO_GPOER &= ~GPIO_BZ_BM; + + for (i = 1; i < duration; i++) { + *IXP4XX_GPIO_GPOUTR &= ~GPIO_BZ_BM; + udelay(tone_delay); + *IXP4XX_GPIO_GPOUTR |= GPIO_BZ_BM; + udelay(tone_delay); + } + *IXP4XX_GPIO_GPOER |= GPIO_BZ_BM; + + return; +} +//================================================================================================= + +// this handles the buzzer duty cycle +static void n2bz_handler(unsigned long data) +{ + if (--bz_repeatcnt > 0) { //if just one beep left to do + n2bz_timer.expires = jiffies + ontime + offtime; //next timeout + add_timer(&n2bz_timer); //reinit timer + } + n2_buzz(tone/2, ontime); + printk(KERN_DEBUG "Count = %d\tOntime = %d\n", bz_repeatcnt, ontime); + return; +} + +//================================================================================================== + +static int n2bz_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long param) +{ + switch (cmd) { + case N2BZ_BEEP: + n2_buzz(tone/2, ontime); + break; + + case N2BZ_BEEP_STOP: + del_timer(&n2bz_timer); + break; + + case N2BZ_BEEPS: + if (param == 0) + bz_repeatcnt = 0xffffffff; + else + bz_repeatcnt = param; + n2bz_handler(0); + break; + + case N2BZ_TONESET: + if (param >= 250 && param <= 2000) + tone = param; + break; + + case N2BZ_ONTIME: + if (param > 4 && param < 201) + ontime = param; + break; + + case N2BZ_SILENTTIME: + if (param > ontime) //enforce a reasonable duty cycle + offtime = param; + else + offtime = ontime; + break; + + case N2BZ_REPEATCNT: + if (param == 0) + bz_repeatcnt = 0xffffffff; + else + bz_repeatcnt = param; + break; + + case N2BZ_COMBINED: + bz_repeatcnt = (param & 0xF0000000) >> 28; //repeat 1 - 16 + ontime = (param & 0x0FF00000) >> 20; //ontime 1 - 256 jiffies + offtime = (param & 0x000FFF00) >> 8; //offtime 1 - 4095 jiffies + tone = (param & 0x000000FF) << 4; //tone (1 - 255) * 16 + break; + + default: + break; + } + return NOERR; +} + +static struct file_operations n2bz_fops = { + .owner = THIS_MODULE, + .ioctl = n2bz_ioctl, +}; + +//================================================================================================== + +static irqreturn_t n2pb_handler (int irq, void *dev_id, struct pt_regs *regs) +{ + void *ret; + + wake_up(&n2pb_waitq); + remove_proc_entry(PWR_OFF_STR, NULL); //no parent + n2_buzz(N2_BEEP_PITCH_MED, N2_BEEP_DUR_MED); + ret = create_proc_entry(PWR_OFF_STR, 0, NULL); + printk(KERN_DEBUG "cpe ret = %p\n", ret); + +// WARNING: This is RUDE...it unconditionally pulls the power plug. +// Your data will be at risk...since this is just a test system +// I am leaving it enabled...eventually userland needs to get the +// message, do an orderly shutdown and use an ioctl or something in +// /proc/powerdowm to actually have us pull the plug. + + *IXP4XX_GPIO_GPOER &= ~GPIO_PO_BM; // enable the pwr cntl gpio + *IXP4XX_GPIO_GPOUTR |= GPIO_PO_BM; // do the deed + + return IRQ_HANDLED; +} + +//================================================================================================== +// +//static void do_rb_timeout(unsigned long data) +//{ +// int i; +// +// for (i = 0; i < rb_presses; i++) +// n2_buzz(N2_BEEP_PITCH_MED,N2_BEEP_DUR_SHORT); +// return; +//} +// +//================================================================================================== +// does nothing -- waiting for userland to define +// This thing is sorta braindead...edge triggered IRQs aren't available in the drivers yet...so +// we hang in a loop until the button is no longer pressed + +struct testr { + int ctl; + long param; +}; + +static irqreturn_t n2rb_handler (int irq, void *dev_id, struct pt_regs *regs) +{ + + static struct testr test[] = { + N2LM_ALL_OFF,0, + N2LM_ON,0, + N2LM_OFF,0, + N2LM_ON,1, + N2LM_ALL_OFF,1, + N2LM_ON,2, + N2LM_OFF,2, + N2LM_ON,3, + N2LM_OFF,3, + N2LM_BLINK,0, + N2LM_OFF,0, + N2LM_BLINK,1, + N2LM_OFF,1, + N2LM_BLINK,2, + N2LM_OFF,2, + N2LM_BLINK,3, + N2LM_OFF,3, + N2LM_ALL_OFF,0, + N2LM_ALT,1, + N2LM_OFF,1, + N2LM_ALL_ON,0 + }; + + printk("Reset Entry IRQ =%d Presses = %d Jiffies = %08lx\tIO = %x\tIOW = %x\n", irq, rb_presses, jiffies, (int)_IO('M',rb_presses), (int)_IOW('M',rb_presses,long)); + + wake_up(&n2rb_waitq); + while ((*IXP4XX_GPIO_GPINR & GPIO_RB_BM) == 0) + ; //wait for button release + + if (rb_presses > 20) + rb_presses = 0; + tone = (rb_presses * 50) + 200; + ontime = (rb_presses*10) + 100; + offtime = 500 - (rb_presses*20); + printk("Ontime = %d\tOfftime = %d\tTone = %d\n",ontime,offtime,tone); + rb_presses++; + + n2bz_ioctl(NULL,NULL, N2BZ_BEEPS, rb_presses); + n2lm_ioctl(NULL,NULL, test[rb_presses].ctl, test[rb_presses].param); +// if (rb_presses == 0) { +// init_jiffy = jiffies; +// init_timer (&n2rb_timer); +// n2rb_timer.function = do_rb_timeout; +// }; +// +// if (rb_presses == 8) +// rb_presses = 0; +// if (rb_presses & 1) +// n2lm_ledon(test[rb_presses]); +// else +// n2lm_ledoff(test[rb_presses]); +// +// n2rb_timer.expires = (jiffies + RB_DELAY); +// add_timer (&n2rb_timer); +// if (rb_presses < 5) { +// if (rb_presses > 0) +// n2lm_ledoff(rb_presses); +// n2lm_ledon(++rb_presses); +// n2lm_timer_start(rb_presses); +// }; + + printk(KERN_DEBUG "Reset Exit IRQ=%d Presses= %d Jiffies= %08lx\n", irq, rb_presses, jiffies); + return IRQ_HANDLED; + +} + +//================================================================================================== +// What to do here is majorly undetermined... + +static int n2rb_read (struct file *filp, char __user *buffer, size_t count, loff_t *ppos) +{ + printk(KERN_DEBUG "Reset Button Wait\n"); + interruptible_sleep_on(&n2rb_waitq); + return copy_to_user(buffer, "reset", 5) ? -EFAULT : 5; + +} + +//================================================================================================== +// What to do here is majorly undetermined... + +static int n2pb_read (struct file *filp, char __user *buffer, size_t count, loff_t *ppos) +{ + printk(KERN_DEBUG "Power Button Wait\n"); + interruptible_sleep_on(&n2pb_waitq); + return copy_to_user(buffer, "poweroff", 8) ? -EFAULT : 8; + +} + +//-------------------------------------------------------------------------------------------------- + +static struct file_operations n2rb_fops = { + .owner = THIS_MODULE, + .read = n2rb_read, +}; + +//-------------------------------------------------------------------------------------------------- + +static struct file_operations n2pb_fops = { + .owner = THIS_MODULE, + .read = n2pb_read, +}; + +//================================================================================================== + +static void n2iom_initarch(void) +{ + printk(KERN_DEBUG "setup_interrupts - jiffies=%ld init_jiffy=%ld\n", jiffies, init_jiffy); + + *IXP4XX_GPIO_GPISR = 0x20400000; // read the 2 irqs to clr + gpio_line_config(N2_RB_GPIO, IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_isr_clear(N2_RB_GPIO); + gpio_line_config(N2_PB_GPIO, IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_HIGH); + gpio_line_isr_clear(N2_PB_GPIO); + + init_timer(&n2lm_rsg_timer); + init_timer(&n2lm_rsr_timer); + init_timer(&n2lm_d1_timer); + init_timer(&n2lm_d2_timer); +// init_timer(&n2rb_timer); +// init_timer(&n2pb_timer); + init_timer(&n2bz_timer); + n2lm_rsr_timer.function = n2lm_rsr_handler; + n2lm_rsg_timer.function = n2lm_rsg_handler; + n2lm_d2_timer.function = n2lm_d2_handler; + n2lm_d1_timer.function = n2lm_d1_handler; + n2bz_timer.function = n2bz_handler; + n2lm_rsr_timer.data = n2lm_rsg_timer.data = n2lm_d1_timer.data = n2lm_d2_timer.data = n2bz_timer.data = 0; + + *IXP4XX_GPIO_GPOER &= 0xfffffff0; //enable gpio 0-3 + *IXP4XX_GPIO_GPOUTR |= 0x00000003; //turn off the leds + *IXP4XX_GPIO_GPOUTR &= 0xfffffffc; + n2lm_ledon(LED_ALL); + n2_buzz(N2_BEEP_PITCH_MED, N2_BEEP_DUR_SHORT); + n2lm_ledoff(LED_ALL); +// Default the Ready/Status to Red during kernel boot, Turn Green at the end of sysvinit + n2lm_ledon(LED_RS_RED); + + return; +} + +//================================================================================================== + +static int __init n2iom_init(void) +{ + printk(KERN_INFO "OpenN2 Misc I/O Driver Version %s\n", VERSION); + + init_jiffy = jiffies; + printk(KERN_DEBUG "init_jiffy=%ld\n",init_jiffy); + n2iom_initarch(); + + if (register_chrdev(N2RB_MAJOR, "n2_rbm", &n2pb_fops) < NOERR) { + printk(KERN_DEBUG "Reset Button Major %d not available\n", N2RB_MAJOR); + return -EBUSY; + } + if (register_chrdev(N2PB_MAJOR, "n2_pbm", &n2rb_fops) < NOERR) { + printk(KERN_DEBUG "Power Button Major %d not available\n", N2PB_MAJOR); + return -EBUSY; + } + if (register_chrdev(N2LM_MAJOR, "n2_ledm", &n2lm_fops) < NOERR) { + printk(KERN_DEBUG "Led Manager Major %d not available\n", N2LM_MAJOR); + return -EBUSY; + } + if (register_chrdev(N2BZ_MAJOR, "n2_bzm", &n2bz_fops) < NOERR) { + printk(KERN_DEBUG "Buzzer Major %d not available\n", N2BZ_MAJOR); + return -EBUSY; + } + + if (request_irq(N2RB_IRQ, &n2rb_handler, SA_INTERRUPT, "n2_rb", NULL) < NOERR) { + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", N2RB_IRQ); + return -EIO; + } + if (request_irq(N2PB_IRQ, &n2pb_handler, SA_INTERRUPT, "n2_pb", NULL) < NOERR) { + printk(KERN_DEBUG "Power Button IRQ %d not available\n", N2PB_IRQ); + return -EIO; + } + + enable_irq(N2PB_IRQ); + enable_irq(N2RB_IRQ); + return (NOERR); +} + +//================================================================================================== + +static void __exit n2iom_exit(void) +{ + remove_proc_entry(PWR_OFF_STR, NULL); + del_timer(&n2rb_timer); + free_irq(N2RB_IRQ,NULL); + unregister_chrdev(N2PB_MAJOR, "n2pb"); + del_timer(&n2pb_timer); + free_irq(N2PB_IRQ, NULL); + unregister_chrdev(N2RB_MAJOR, "n2rb" ); + del_timer(&n2lm_rsg_timer); + del_timer(&n2lm_rsr_timer); + del_timer(&n2lm_d1_timer); + del_timer(&n2lm_d2_timer); + unregister_chrdev(N2LM_MAJOR, "n2lm" ); +} + +module_init (n2iom_init); +module_exit (n2iom_exit); + +MODULE_AUTHOR("Karen Spearel <kas11@tampabay.rr.com>"); +MODULE_DESCRIPTION("OpenN2 Buttons/LEDs IO Driver"); +MODULE_LICENSE("GPL"); +static int debug = 7; +module_param(debug, int, 0644); +MODULE_PARM_DESC(debug, "Debugging enabled = 8"); + diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2-part.c b/packages/linux/openslug-kernel-2.6.11/nslu2-part.c index e69de29bb2..6fbf952e2a 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2-part.c +++ b/packages/linux/openslug-kernel-2.6.11/nslu2-part.c @@ -0,0 +1,120 @@ +/* + * nslu2-part.c + * + * Maintainers: http://www.nslu2-linux.org/ + * Initial port: Mark Rakes <mrakes AT mac.com> + * + * "Parse" the fixed partition table of the Linksys NSLU2 and + * produce a Linux partition array to match. + */ + +#include <linux/kernel.h> +#include <linux/slab.h> +#include <linux/init.h> +#include <linux/vmalloc.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/partitions.h> + +/* info we know about the NSLU2's flash setup: + * + * Num Partition offset size + * --- --------- ---------- ----------- + * 0 RedBoot 0x00000000 0x00040000 + * 1 System Configuration 0x00040000 0x00020000 + * 2 Kernel 0x00060000 0x00100000 + * 3 Ramdisk 0x00160000 0x006a0000 + */ + #define NSLU2_NUM_FLASH_PARTITIONS 4 + #define NSLU2_FLASH_PART0_NAME "RedBoot" + #define NSLU2_FLASH_PART0_OFFSET 0x00000000 + #define NSLU2_FLASH_PART0_SIZE 0x00040000 + #define NSLU2_FLASH_PART1_NAME "System Configuration" + #define NSLU2_FLASH_PART1_OFFSET (NSLU2_FLASH_PART0_OFFSET + NSLU2_FLASH_PART0_SIZE) + #define NSLU2_FLASH_PART1_SIZE 0x00020000 + #define NSLU2_FLASH_PART2_NAME "Kernel" + #define NSLU2_FLASH_PART2_OFFSET (NSLU2_FLASH_PART1_OFFSET + NSLU2_FLASH_PART1_SIZE) + #define NSLU2_FLASH_PART2_SIZE 0x00100000 + #define NSLU2_FLASH_PART3_NAME "Ramdisk" + #define NSLU2_FLASH_PART3_OFFSET (NSLU2_FLASH_PART2_OFFSET + NSLU2_FLASH_PART2_SIZE) + #define NSLU2_FLASH_PART3_SIZE 0x006a0000 + +static int parse_nslu2_partitions(struct mtd_info *master, + struct mtd_partition **pparts, + unsigned long flash_start) +{ + struct mtd_partition *parts; + int ret = 0, namelen = 0; + char *names; + + namelen = strlen(NSLU2_FLASH_PART0_NAME) + + strlen(NSLU2_FLASH_PART1_NAME) + + strlen(NSLU2_FLASH_PART2_NAME) + + strlen(NSLU2_FLASH_PART3_NAME) + + NSLU2_NUM_FLASH_PARTITIONS; /*4 strings + each terminator */ + + parts = kmalloc(sizeof(*parts)*NSLU2_NUM_FLASH_PARTITIONS + namelen, GFP_KERNEL); + if (!parts) { + ret = -ENOMEM; + goto out; + } + + memset(parts, 0, sizeof(*parts)*NSLU2_NUM_FLASH_PARTITIONS + namelen); + names = (char *)&parts[NSLU2_NUM_FLASH_PARTITIONS]; + + /* RedBoot partition */ + parts[0].size = NSLU2_FLASH_PART0_SIZE; + parts[0].offset = NSLU2_FLASH_PART0_OFFSET; + parts[0].name = NSLU2_FLASH_PART0_NAME; + parts[0].mask_flags = MTD_WRITEABLE; /* readonly */ + strcpy(names, NSLU2_FLASH_PART0_NAME); + names += strlen(names)+1; + /* System Configuration */ + parts[1].size = NSLU2_FLASH_PART1_SIZE; + parts[1].offset = NSLU2_FLASH_PART1_OFFSET; + parts[1].name = NSLU2_FLASH_PART1_NAME; + parts[1].mask_flags = MTD_WRITEABLE; /* readonly */ + strcpy(names, NSLU2_FLASH_PART1_NAME); + names += strlen(names)+1; + /* Kernel */ + parts[2].size = NSLU2_FLASH_PART2_SIZE; + parts[2].offset = NSLU2_FLASH_PART2_OFFSET; + parts[2].name = NSLU2_FLASH_PART2_NAME; + parts[2].mask_flags = MTD_WRITEABLE; /* readonly */ + strcpy(names, NSLU2_FLASH_PART2_NAME); + names += strlen(names)+1; + /* Ramdisk */ + parts[3].size = NSLU2_FLASH_PART3_SIZE; + parts[3].offset = NSLU2_FLASH_PART3_OFFSET; + parts[3].name = NSLU2_FLASH_PART3_NAME; + parts[3].mask_flags = MTD_WRITEABLE; /* readonly */ + strcpy(names, NSLU2_FLASH_PART3_NAME); + names += strlen(names)+1; + + ret = NSLU2_NUM_FLASH_PARTITIONS; + *pparts = parts; + out: + return ret; +} + +static struct mtd_part_parser nslu2_parser = { + .owner = THIS_MODULE, + .parse_fn = parse_nslu2_partitions, + .name = "NSLU2", +}; + +static int __init nslu2_parser_init(void) +{ + return register_mtd_parser(&nslu2_parser); +} + +static void __exit nslu2_parser_exit(void) +{ + deregister_mtd_parser(&nslu2_parser); +} + +module_init(nslu2_parser_init); +module_exit(nslu2_parser_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mark Rakes"); +MODULE_DESCRIPTION("Parsing code for NSLU2 flash tables"); diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2-pci.c b/packages/linux/openslug-kernel-2.6.11/nslu2-pci.c index e69de29bb2..7327c65a4f 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2-pci.c +++ b/packages/linux/openslug-kernel-2.6.11/nslu2-pci.c @@ -0,0 +1,87 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-pci.c + * + * NSLU2 board-level PCI initialization + * + * based on ixdp425-pci.c: + * Copyright (C) 2002 Intel Corporation. + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Maintainer: http://www.nslu2-linux.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. + * + */ +// GPIO 8 is used as the power input so is not free for use as a PCI IRQ +// However, all the common PCI setup code presumes the standard 4 PCI +// interrupts are available. So we compromise...we don't enable the +// IRQ on Pin 8 but we let + +#include <linux/config.h> +#include <linux/pci.h> +#include <linux/init.h> +#include <linux/delay.h> + +#include <asm/mach/pci.h> +#include <asm/irq.h> +#include <asm/hardware.h> +#include <asm/mach-types.h> + +void __init nslu2_pci_preinit(void) +{ + gpio_line_config(NSLU2_PCI_INTA_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(NSLU2_PCI_INTB_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(NSLU2_PCI_INTC_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); +// gpio_line_config(NSLU2_PCI_INTD_PIN, +// IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + + gpio_line_isr_clear(NSLU2_PCI_INTA_PIN); + gpio_line_isr_clear(NSLU2_PCI_INTB_PIN); + gpio_line_isr_clear(NSLU2_PCI_INTC_PIN); +// gpio_line_isr_clear(NSLU2_PCI_INTD_PIN); + + ixp4xx_pci_preinit(); +} + +static int __init nslu2_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + static int pci_irq_table[NSLU2_PCI_IRQ_LINES] = { + IRQ_NSLU2_PCI_INTA, + IRQ_NSLU2_PCI_INTB, + IRQ_NSLU2_PCI_INTC, +// IRQ_NSLU2_PCI_INTD + }; + + int irq = -1; + + if (slot >= 1 && slot <= NSLU2_PCI_MAX_DEV && + pin >= 1 && pin <= NSLU2_PCI_IRQ_LINES) { + irq = pci_irq_table[(slot + pin - 2) % 3]; // ! % 4 kas11 + } + + return irq; +} + +struct hw_pci __initdata nslu2_pci = { + .nr_controllers = 1, + .preinit = nslu2_pci_preinit, + .swizzle = pci_std_swizzle, + .setup = ixp4xx_setup, + .scan = ixp4xx_scan_bus, + .map_irq = nslu2_map_irq, +}; + +int __init nslu2_pci_init(void) //monkey see, monkey do +{ + if (machine_is_nslu2()) + pci_common_init(&nslu2_pci); + return 0; +} + +subsys_initcall(nslu2_pci_init); + diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2-setup.c b/packages/linux/openslug-kernel-2.6.11/nslu2-setup.c index e69de29bb2..5c08affd5d 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2-setup.c +++ b/packages/linux/openslug-kernel-2.6.11/nslu2-setup.c @@ -0,0 +1,134 @@ +/* + * arch/arm/mach-ixp4xx/nslu2-setup.c + * + * NSLU2 board-setup + * + * based ixdp425-setup.c: + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Author: Mark Rakes <mrakes at mac.com> + * Maintainers: http://www.nslu2-linux.org/ + * + * Fixed missing init_time in MACHINE_START kas11 10/22/04 + * Changed to conform to new style __init ixdp425 kas11 10/22/04 + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/device.h> +#include <linux/serial.h> +#include <linux/tty.h> +#include <linux/serial_core.h> + +#include <asm/types.h> +#include <asm/setup.h> +#include <asm/memory.h> +#include <asm/hardware.h> +#include <asm/mach-types.h> +#include <asm/irq.h> +#include <asm/mach/arch.h> +#include <asm/mach/flash.h> + +#ifdef __ARMEB__ +#define REG_OFFSET 3 +#else +#define REG_OFFSET 0 +#endif + +/* + * NSLU2 uses only one serial port + */ +static struct uart_port nslu2_serial_ports[] = { + { + .membase = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART1_BASE_PHYS), + .irq = IRQ_IXP4XX_UART1, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 0, + .type = PORT_XSCALE, + .fifosize = 32 + } +#if 0 + , { + .membase = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART2_BASE_PHYS), + .irq = IRQ_IXP4XX_UART2, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 1, + .type = PORT_XSCALE, + .fifosize = 32 + } +#endif +}; + +void __init nslu2_map_io(void) +{ + early_serial_setup(&nslu2_serial_ports[0]); +#if 0 + early_serial_setup(&nslu2_serial_ports[1]); +#endif + ixp4xx_map_io(); +} + +static struct flash_platform_data nslu2_flash_data = { + .map_name = "cfi_probe", + .width = 2, +}; + +static struct resource nslu2_flash_resource = { + .start = NSLU2_FLASH_BASE, + .end = NSLU2_FLASH_BASE + NSLU2_FLASH_SIZE, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device nslu2_flash = { + .name = "IXP4XX-Flash", + .id = 0, + .dev = { + .platform_data = &nslu2_flash_data, + }, + .num_resources = 1, + .resource = &nslu2_flash_resource, +}; + +static struct ixp4xx_i2c_pins nslu2_i2c_gpio_pins = { + .sda_pin = NSLU2_SDA_PIN, + .scl_pin = NSLU2_SCL_PIN, +}; + +static struct platform_device nslu2_i2c_controller = { + .name = "IXP4XX-I2C", + .id = 0, + .dev = { + .platform_data = &nslu2_i2c_gpio_pins, + }, + .num_resources = 0 +}; + +static struct platform_device *nslu2_devices[] __initdata = { + &nslu2_i2c_controller, + &nslu2_flash +}; + +static void __init nslu2_init(void) +{ + platform_add_devices(&nslu2_devices, ARRAY_SIZE(nslu2_devices)); +} + +MACHINE_START(NSLU2, "Linksys NSLU2") + MAINTAINER("www.nslu2-linux.org") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(nslu2_map_io) + INITIRQ(ixp4xx_init_irq) //FIXME: all irq are off here + .timer = &ixp4xx_timer, + // INITTIME(ixp4xx_init_time) //this was missing in 2.6.7 code ...soft reboot needed? + BOOT_PARAMS(0x0100) + INIT_MACHINE(nslu2_init) +MACHINE_END diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2.h b/packages/linux/openslug-kernel-2.6.11/nslu2.h index e69de29bb2..bb79aaa007 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2.h +++ b/packages/linux/openslug-kernel-2.6.11/nslu2.h @@ -0,0 +1,43 @@ +/* + * include/asm-arm/arch-ixp4xx/nslu2.h + * + * NSLU2 platform specific definitions + * + * Author: Mark Rakes <mrakes AT mac.com> + * Maintainers: http://www.nslu2-linux.org + * + * based on ixdp425.h: + * Copyright 2004 (c) MontaVista, Software, Inc. + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +// GPIO 8 is used as the power input so is not free for use as a PCI IRQ +// kas11 11-2-04 + +#ifndef __ASM_ARCH_HARDWARE_H__ +#error "Do not include this directly, instead #include <asm/hardware.h>" +#endif + +#define NSLU2_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS +#define NSLU2_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE + +#define NSLU2_SDA_PIN 7 +#define NSLU2_SCL_PIN 6 + +/* + * NSLU2 PCI IRQs + */ +#define NSLU2_PCI_MAX_DEV 3 +#define NSLU2_PCI_IRQ_LINES 3 + + +/* PCI controller GPIO to IRQ pin mappings */ +#define NSLU2_PCI_INTA_PIN 11 +#define NSLU2_PCI_INTB_PIN 10 +#define NSLU2_PCI_INTC_PIN 9 +//#define NSLU2_PCI_INTD_PIN 8 + + diff --git a/packages/linux/openslug-kernel-2.6.11/nslu2_2.6.11.patch b/packages/linux/openslug-kernel-2.6.11/nslu2_2.6.11.patch index e69de29bb2..bff8400396 100644 --- a/packages/linux/openslug-kernel-2.6.11/nslu2_2.6.11.patch +++ b/packages/linux/openslug-kernel-2.6.11/nslu2_2.6.11.patch @@ -0,0 +1,159 @@ +diff -urN linux-2.6.11.orig/arch/arm/boot/compressed/head.S linux-2.6.11/arch/arm/boot/compressed/head.S +--- linux-2.6.11.orig/arch/arm/boot/compressed/head.S 2005-03-01 21:38:25.000000000 -1000 ++++ linux-2.6.11/arch/arm/boot/compressed/head.S 2005-03-03 00:55:05.000000000 -1000 +@@ -79,6 +79,14 @@ + .endm + .macro writeb, rb + str \rb, [r3, #0] ++ .endm ++#elif defined(CONFIG_ARCH_NSLU2) ++ .macro loadsp, rb ++ mov \rb, #0xc8000000 ++ .endm ++ .macro writeb, rb ++ str \rb, [r3, #0] ++ .endm + #elif defined(CONFIG_ARCH_IXP2000) + .macro loadsp, rb + mov \rb, #0xc0000000 +diff -urN linux-2.6.11.orig/arch/arm/boot/compressed/head-xscale.S linux-2.6.11/arch/arm/boot/compressed/head-xscale.S +--- linux-2.6.11.orig/arch/arm/boot/compressed/head-xscale.S 2005-03-01 21:37:52.000000000 -1000 ++++ linux-2.6.11/arch/arm/boot/compressed/head-xscale.S 2005-03-02 01:41:31.000000000 -1000 +@@ -47,3 +47,8 @@ + orr r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00) + #endif + ++#ifdef CONFIG_ARCH_NSLU2 ++ mov r7, #(MACH_TYPE_NSLU2 & 0xff) ++ orr r7, r7, #(MACH_TYPE_NSLU2 & 0xff00) ++#endif ++ +diff -urN linux-2.6.11.orig/arch/arm/mach-ixp4xx/Kconfig linux-2.6.11/arch/arm/mach-ixp4xx/Kconfig +--- linux-2.6.11.orig/arch/arm/mach-ixp4xx/Kconfig 2005-03-01 21:37:49.000000000 -1000 ++++ linux-2.6.11/arch/arm/mach-ixp4xx/Kconfig 2005-03-02 01:43:42.000000000 -1000 +@@ -43,6 +43,12 @@ + IXDP465 Development Platform (Also known as BMP). + For more information on this platform, see Documentation/arm/IXP4xx. + ++config ARCH_NSLU2 ++ bool "NSLU2" ++ help ++ Say 'Y' here if you want your kernel to support Linksys's ++ NSLU2 NAS device. For more information on this platform, ++ see http://www.nslu2-linux.org + + # + # IXCDP1100 is the exact same HW as IXDP425, but with a different machine +diff -urN linux-2.6.11.orig/arch/arm/mach-ixp4xx/Makefile linux-2.6.11/arch/arm/mach-ixp4xx/Makefile +--- linux-2.6.11.orig/arch/arm/mach-ixp4xx/Makefile 2005-03-01 21:37:49.000000000 -1000 ++++ linux-2.6.11/arch/arm/mach-ixp4xx/Makefile 2005-03-02 01:44:16.000000000 -1000 +@@ -9,4 +9,4 @@ + obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o + obj-$(CONFIG_ARCH_PRPMC1100) += prpmc1100-pci.o prpmc1100-setup.o + obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o +- ++obj-$(CONFIG_ARCH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-part.o nslu2-io.o +diff -urN linux-2.6.11.orig/arch/arm/tools/mach-types linux-2.6.11/arch/arm/tools/mach-types +--- linux-2.6.11.orig/arch/arm/tools/mach-types 2005-03-01 21:38:08.000000000 -1000 ++++ linux-2.6.11/arch/arm/tools/mach-types 2005-03-02 01:44:50.000000000 -1000 +@@ -604,7 +604,7 @@ + roverp7 MACH_ROVERP7 ROVERP7 594 + pr818s MACH_PR818S PR818S 595 + trxpro MACH_TRXPRO TRXPRO 596 +-nslu2 MACH_NSLU2 NSLU2 597 ++nslu2 ARCH_NSLU2 NSLU2 597 + e400 MACH_E400 E400 598 + trab MACH_TRAB TRAB 599 + cmc_pu2 MACH_CMC_PU2 CMC_PU2 600 +diff -urN linux-2.6.11.orig/drivers/i2c/chips/Kconfig linux-2.6.11/drivers/i2c/chips/Kconfig +--- linux-2.6.11.orig/drivers/i2c/chips/Kconfig 2005-03-01 21:38:10.000000000 -1000 ++++ linux-2.6.11/drivers/i2c/chips/Kconfig 2005-03-02 01:45:28.000000000 -1000 +@@ -370,5 +370,14 @@ + + This driver can also be built as a module. If so, the module + will be called isp1301_omap. ++config SENSORS_X1205 ++ tristate "Xicor X1205 RTC chip" ++ depends on I2C && EXPERIMENTAL ++ select I2C_SENSOR ++ help ++ If you say yes here you get support for the Xicor x1205 RTC chip. ++ ++ This driver can also be built as a module. If so, the module ++ will be called x1205-rtc + + endmenu +diff -urN linux-2.6.11.orig/drivers/i2c/chips/Makefile linux-2.6.11/drivers/i2c/chips/Makefile +--- linux-2.6.11.orig/drivers/i2c/chips/Makefile 2005-03-01 21:38:34.000000000 -1000 ++++ linux-2.6.11/drivers/i2c/chips/Makefile 2005-03-02 01:45:54.000000000 -1000 +@@ -35,6 +35,7 @@ + obj-$(CONFIG_SENSORS_VIA686A) += via686a.o + obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o + obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o ++obj-$(CONFIG_SENSORS_X1205) += x1205-rtc.o + + ifeq ($(CONFIG_I2C_DEBUG_CHIP),y) + EXTRA_CFLAGS += -DDEBUG +diff -urN linux-2.6.11.orig/drivers/mtd/maps/ixp4xx.c linux-2.6.11/drivers/mtd/maps/ixp4xx.c +--- linux-2.6.11.orig/drivers/mtd/maps/ixp4xx.c 2005-03-01 21:37:30.000000000 -1000 ++++ linux-2.6.11/drivers/mtd/maps/ixp4xx.c 2005-03-02 01:46:40.000000000 -1000 +@@ -94,7 +94,11 @@ + struct resource *res; + }; + ++#ifdef CONFIG_ARCH_NSLU2 ++static const char *probes[] = { "cmdlinepart", "RedBoot", "NSLU2", NULL }; ++#else + static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; ++#endif + + static int ixp4xx_flash_remove(struct device *_dev) + { +diff -urN linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/hardware.h linux-2.6.11/include/asm-arm/arch-ixp4xx/hardware.h +--- linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/hardware.h 2005-03-01 21:37:51.000000000 -1000 ++++ linux-2.6.11/include/asm-arm/arch-ixp4xx/hardware.h 2005-03-02 17:34:46.000000000 -1000 +@@ -44,5 +44,6 @@ + #include "ixdp425.h" + #include "coyote.h" + #include "prpmc1100.h" ++#include "nslu2.h" + + #endif /* _ASM_ARCH_HARDWARE_H */ +diff -urN linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/irqs.h linux-2.6.11/include/asm-arm/arch-ixp4xx/irqs.h +--- linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/irqs.h 2005-03-01 21:38:12.000000000 -1000 ++++ linux-2.6.11/include/asm-arm/arch-ixp4xx/irqs.h 2005-03-02 01:49:27.000000000 -1000 +@@ -93,4 +93,11 @@ + #define IRQ_COYOTE_PCI_SLOT1 IRQ_IXP4XX_GPIO11 + #define IRQ_COYOTE_IDE IRQ_IXP4XX_GPIO5 + ++/* ++ * NSLU2 board IRQs ++ */ ++#define IRQ_NSLU2_PCI_INTA IRQ_IXP4XX_GPIO11 ++#define IRQ_NSLU2_PCI_INTB IRQ_IXP4XX_GPIO10 ++#define IRQ_NSLU2_PCI_INTC IRQ_IXP4XX_GPIO9 ++ + #endif +diff -urN linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h linux-2.6.11/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h +--- linux-2.6.11.orig/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h 2005-03-01 21:37:49.000000000 -1000 ++++ linux-2.6.11/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h 2005-03-03 02:26:29.231822000 -1000 +@@ -52,7 +52,7 @@ + * Expansion BUS Configuration registers + */ + #define IXP4XX_EXP_CFG_BASE_PHYS (0xC4000000) +-#define IXP4XX_EXP_CFG_BASE_VIRT (0xFFBFD000) ++#define IXP4XX_EXP_CFG_BASE_VIRT (0xFFBFE000) + #define IXP4XX_EXP_CFG_REGION_SIZE (0x00001000) + + /* +diff -urN linux-2.6.11.orig/include/linux/i2c-id.h linux-2.6.11/include/linux/i2c-id.h +--- linux-2.6.11.orig/include/linux/i2c-id.h 2005-03-01 21:38:34.000000000 -1000 ++++ linux-2.6.11/include/linux/i2c-id.h 2005-03-02 01:50:14.000000000 -1000 +@@ -110,6 +110,7 @@ + #define I2C_DRIVERID_TDA7313 62 /* TDA7313 audio processor */ + #define I2C_DRIVERID_MAX6900 63 /* MAX6900 real-time clock */ + #define I2C_DRIVERID_SAA7114H 64 /* video decoder */ ++#define I2C_DRIVERID_X1205 0xF0 + + + #define I2C_DRIVERID_EXP0 0xF0 /* experimental use id's */ diff --git a/packages/linux/openslug-kernel-2.6.11/usbnet.patch b/packages/linux/openslug-kernel-2.6.11/usbnet.patch index e69de29bb2..1b3cf3fcb8 100644 --- a/packages/linux/openslug-kernel-2.6.11/usbnet.patch +++ b/packages/linux/openslug-kernel-2.6.11/usbnet.patch @@ -0,0 +1,17 @@ +--- linux-2.6.11/drivers/usb/net/usbnet.c_orig 2005-03-03 13:50:54.053237416 -0500 ++++ linux-2.6.11/drivers/usb/net/usbnet.c 2005-03-03 13:53:19.415139048 -0500 +@@ -2404,12 +2404,13 @@ + #endif + size = (sizeof (struct ethhdr) + dev->net->mtu); + +- if ((skb = alloc_skb (size, flags)) == NULL) { ++ if ((skb = alloc_skb (size + NET_IP_ALIGN, flags)) == NULL) { + devdbg (dev, "no rx skb"); + defer_kevent (dev, EVENT_RX_MEMORY); + usb_free_urb (urb); + return; + } ++ skb_reserve (skb, NET_IP_ALIGN); + + entry = (struct skb_data *) skb->cb; + entry->urb = urb; diff --git a/packages/linux/openslug-kernel-2.6.11/x1205-rtc.c b/packages/linux/openslug-kernel-2.6.11/x1205-rtc.c index e69de29bb2..50fbc9e280 100644 --- a/packages/linux/openslug-kernel-2.6.11/x1205-rtc.c +++ b/packages/linux/openslug-kernel-2.6.11/x1205-rtc.c @@ -0,0 +1,548 @@ +/* + x1205 - an 12c driver for the Xicor X1205 RTC + Copyright 2004 Karen Spearel + + please send all reports to: + kas11 at tampabay dot rr dot com + + based on linux/drivers/acron/char/pcf8583.h + Copyright (C) 2000 Russell King + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +/* + + * i2c_adapter is the structure used to identify a physical i2c bus along + * with the access algorithms necessary to access it. + +struct i2c_adapter { + struct module *owner; + unsigned int id; == is algo->id | hwdep.struct->id, for registered values see below + unsigned int class; + struct i2c_algorithm *algo; the algorithm to access the bus + void *algo_data; + + --- administration stuff. + int (*client_register)(struct i2c_client *); + int (*client_unregister)(struct i2c_client *); + + data fields that are valid for all devices + struct semaphore bus_lock; + struct semaphore clist_lock; + + int timeout; + int retries; + struct device dev; the adapter device + struct class_device class_dev; the class device + +#ifdef CONFIG_PROC_FS + No need to set this when you initialize the adapter + int inode; +#endif def CONFIG_PROC_FS + + int nr; + struct list_head clients; + struct list_head list; + char name[I2C_NAME_SIZE]; + struct completion dev_released; + struct completion class_dev_released; +}; +*/ + + +/*========== Driver for the X1205 on the Linksys NSLU2 ==================*/ + +#include <linux/init.h> +#include <linux/i2c.h> +#include <linux/slab.h> +#include <linux/string.h> +#include <linux/errno.h> +#include <linux/bcd.h> +#include <linux/rtc.h> +#include <linux/fs.h> +#include <linux/proc_fs.h> +#include <linux/miscdevice.h> +#include <linux/device.h> +#include <asm/uaccess.h> +#include <asm/system.h> +#include <linux/moduleparam.h> + +#define RTC_GETDATETIME 0 +#define RTC_SETTIME 1 +#define RTC_SETDATETIME 2 + +#define I2C_M_WR 0 // just for consistancy + +// offsets into read buf - add 2 for write buf +#define CCR_SEC 0 +#define CCR_MIN 1 +#define CCR_HOUR 2 +#define CCR_MDAY 3 +#define CCR_MONTH 4 +#define CCR_YEAR 5 +#define CCR_WDAY 6 +#define CCR_Y2K 7 + +#define X1205_I2C_BUS_ADDR 0x6f // hardwired into x1205 +#define X1205_ALM0_BASE 0x00 // Base address of the ALM0 +#define X1205_CCR_BASE 0x30 // Base address of the CCR +#define X1205_SR_ADDR 0x3f // Status Register +#define X1205_SR_WEL 0x02 // Write Enable Latch bit +#define X1205_SR_RWEL 0x04 // Register Write Enable Bit +#define X1205_MILBIT 0x80 // this bit set in ccr.hour for 24 hr mode +#define NOERR 0 +#define RTC_NODATE 0 +#define RTC_DATETOO 1 + +// comment out next line is your x1205 can't do page writes +//#define X1205PAGEWRITE 1 +#ifdef X1205PAGEWRITE +#define DRIVERNAME "Xicor x1205 RTC Driver v0.9.3.3" +#else +#define DRIVERNAME "Xicor x1205 RTC Dvr v0.9.3.3NPW" +#endif + +#define DEBUG KERN_DEBUG + + +static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm, u8 reg_base); +static int x1205_set_datetime(struct i2c_client *client, struct rtc_time *tm, int datetoo, u8 reg_base); +static int x1205_attach(struct i2c_adapter *adapter); +static int x1205_detach(struct i2c_client *client); +static int x1205_validate_tm(struct rtc_time *tm); +static int x1205_command(struct i2c_client *client, unsigned int cmd, void *arg); +static int x1205_sync_rtc(void); +static int x1205_read(struct file *file, char *buf, size_t count, loff_t *ptr); +static int x1205_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); +static int x1205_read_proc(char *buf, char **start, off_t off, int len, int *eof, void *data); + +static struct i2c_driver x1205_driver = { + .owner = THIS_MODULE, + .name = DRIVERNAME, + .id = I2C_DRIVERID_X1205, + .flags = I2C_DF_NOTIFY, + .attach_adapter = &x1205_attach, //we don't need to probe...x1205 is hardwired @ 0x6f + .detach_client = &x1205_detach, + .command = &x1205_command, //this prolly never gets called...used internally tho +}; + +static struct i2c_client x1205_i2c_client = { + .id = I2C_DRIVERID_X1205, + .flags = 0, + .addr = X1205_I2C_BUS_ADDR, // chip address - NOTE: 7bit + .adapter = NULL, // the adapter we sit on assigned in attach + .driver = &x1205_driver, // and our access routines + .usage_count = 0, // How many accesses currently to this client + .dev = {}, // the device structure + .list = {}, + .name = DRIVERNAME, + .released = {}, +}; + +static struct file_operations rtc_fops = { + owner: THIS_MODULE, + ioctl: x1205_ioctl, + read: x1205_read, +}; + +static struct miscdevice x1205_miscdev = { + .minor = RTC_MINOR, + .name = "rtc", + .fops = &rtc_fops, +}; +extern int (*set_rtc)(void); +static unsigned epoch = 1900; //coresponds to year 0 +static unsigned rtc_epoch = 2000; +static const unsigned char days_in_mo[] = +{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + +//===================================CODE====================================== +// in the routines that deal directly with the x1205 hardware, we use +// rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch +// Epoch is inited as 2000. Time is set to UT +//============================================================================= +static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm, u8 reg_base) +{ + static unsigned char addr[2] = { 0,} ; + unsigned char buf[8]; + struct i2c_msg msgs[2] = { + { client->addr, I2C_M_WR, 2, addr }, //msg 1 = send base address + { client->addr, I2C_M_RD, 8, buf }, //msg 2 = read sequential data + }; + addr[1] = reg_base; + if ((i2c_transfer(client->adapter, msgs, 2)) == 2) { //did we read 2 messages? + printk(KERN_DEBUG "raw x1205 read data - sec-%02x min-%02x hr-%02x mday-%02x mon-%02x year-%02x wday-%02x y2k-%02x\n", + buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6], buf[7]); + tm->tm_sec = BCD2BIN(buf[CCR_SEC]); + tm->tm_min = BCD2BIN(buf[CCR_MIN]); + buf[CCR_HOUR] &= ~X1205_MILBIT; + tm->tm_hour = BCD2BIN(buf[CCR_HOUR]); //hr is 0-23 + tm->tm_mday = BCD2BIN(buf[CCR_MDAY]); + tm->tm_mon = BCD2BIN(buf[CCR_MONTH]); + rtc_epoch = BCD2BIN(buf[CCR_Y2K]) * 100; + tm->tm_year = BCD2BIN(buf[CCR_YEAR]) + rtc_epoch - epoch; + tm->tm_wday = buf[CCR_WDAY]; + printk(KERN_DEBUG "rtc_time output data - sec-%02d min-%02d hr-%02d mday-%02d mon-%02d year-%02d wday-%02d epoch-%d rtc_epoch-%d\n", + tm->tm_sec,tm->tm_min,tm->tm_hour,tm->tm_mday,tm->tm_mon,tm->tm_year,tm->tm_wday,epoch, rtc_epoch); + } else { + printk(KERN_DEBUG "i2c_transfer Read Error\n"); + return -EIO; + } + + return NOERR; +} +// x1205pagewrite allows writing a block of registers in msg3 even though the x1205 says +// nothing about this in its spec. +// it needs more testing as it is possible some x1205s are actually not-completely- +// functional x1226s and there is a reason for the multiple write to not be in the spec. +// anyhow, it is enabled for the time being...and we even push out luck by sending 10 bytes + +static int x1205_set_datetime(struct i2c_client *client, struct rtc_time *tm, int datetoo, u8 reg_base) +{ + static unsigned char wel[3] = { 0, X1205_SR_ADDR, X1205_SR_WEL }; + static unsigned char rwel[3] = { 0, X1205_SR_ADDR, X1205_SR_WEL | X1205_SR_RWEL }; + static unsigned char diswe[3] = { 0, X1205_SR_ADDR, 0 }; + +#ifdef X1205PAGEWRITE + + static unsigned char buf[10] = { 0, X1205_CCR_BASE, }; + struct i2c_msg msgs[4] = { + { client->addr, I2C_M_WR, 3, wel }, //msg 1 = write WEL to to ccr sr + { client->addr, I2C_M_WR, 3, rwel }, //msg 2 = write RWEL to ccr sr + { client->addr, I2C_M_WR, 10, buf }, //msg 3 = write ccr base addr +seq data + { client->addr, I2C_M_WR, 3, diswe }, //msg 4 = 0 to ccr sr to disable writes + }; + + msgs[2].len = 5; // 5 bytes + addr to set time only + buf [1] = reg_base; + buf[CCR_SEC+2] = BIN2BCD(tm->tm_sec); + buf[CCR_MIN+2] = BIN2BCD(tm->tm_min); + buf[CCR_HOUR+2] = BIN2BCD(tm->tm_hour) | X1205_MILBIT; // set 24 hour format + if (datetoo == 1) { + buf[CCR_MDAY+2] = BIN2BCD(tm->tm_mday); + buf[CCR_MONTH+2] = BIN2BCD(tm->tm_mon); // input is 0-11 + buf[CCR_YEAR+2] = BIN2BCD((tm->tm_year + epoch - rtc_epoch)); // input is yrs since 1900 + buf[CCR_WDAY+2] = tm->tm_wday & 7; + buf[CCR_Y2K+2] = BIN2BCD((rtc_epoch/100)); + msgs[2].len += 5; //5 more bytes to set date + } + printk(KERN_DEBUG "rtc_time input - sec-%02d min-%02d hour-%02d mday-%02d mon-%02d year-%02d wday-%02d epoch-%d rtc_epoch-%d\n", + tm->tm_sec,tm->tm_min,tm->tm_hour,tm->tm_mday,tm->tm_mon,tm->tm_year,tm->tm_wday, epoch, rtc_epoch); + printk(KERN_DEBUG "BCD write data - sec-%02x min-%02x hour-%02x mday-%02x mon-%02x year-%02x wday-%02x y2k-%02x\n", + buf[2],buf[3],buf[4],buf[5],buf[6], buf[7], buf[8], buf[9]); + + if ((i2c_transfer(client->adapter, msgs, 4)) != 4) + return -EIO; + return NOERR; + +#else //do this if page writes aren't working + + int i,xfer; + static unsigned char data[3] = { 0,}; + static unsigned char buf[8]; + + buf[CCR_SEC] = BIN2BCD(tm->tm_sec); + buf[CCR_MIN] = BIN2BCD(tm->tm_min); + buf[CCR_HOUR] = BIN2BCD(tm->tm_hour) | X1205_MILBIT; // set 24 hour format + if (datetoo == 1) { + buf[CCR_MDAY] = BIN2BCD(tm->tm_mday); + buf[CCR_MONTH] = BIN2BCD(tm->tm_mon); // input is 0-11 + buf[CCR_YEAR] = BIN2BCD((tm->tm_year + epoch - rtc_epoch)); // input is yrs since 1900 + buf[CCR_WDAY] = tm->tm_wday & 7; + buf[CCR_Y2K] = BIN2BCD((rtc_epoch/100)); + } + printk(KERN_DEBUG "rtc_time input - sec-%02d min-%02d hour-%02d mday-%02d mon-%02d year-%02d wday-%02d epoch-%d rtc_epoch-%d\n", + tm->tm_sec,tm->tm_min,tm->tm_hour,tm->tm_mday,tm->tm_mon,tm->tm_year,tm->tm_wday, epoch, rtc_epoch); + + xfer = i2c_master_send(client, wel, 3); + printk(KERN_DEBUG "wen - %x\n", xfer); + if (xfer != 3) + return -EIO; + + xfer = i2c_master_send(client, rwel, 3); + printk(KERN_DEBUG "wenb - %x\n", xfer); + if (xfer != 3) + return -EIO; + + for (i = 0; i < 8; i++) { + data[1] = i + reg_base; + data[2] = buf[i]; + xfer = i2c_master_send(client, data, 3); + printk(KERN_DEBUG "xfer - %d addr - %02x data - %02x\n", xfer, data[1], data[2]); + if (xfer != 3) + return -EIO; + }; + + xfer = i2c_master_send(client, diswe, 3); + printk(KERN_DEBUG "wdis - %x\n", xfer); + if (xfer != 3) + return -EIO; + return NOERR; +#endif +} +//============================================================================= + +static int x1205_attach(struct i2c_adapter *adapter) +{ + struct rtc_time tm; + struct timespec tv; + int errno; + + x1205_i2c_client.adapter = adapter; + x1205_i2c_client.id++; + + if ((x1205_get_datetime(&x1205_i2c_client, &tm, X1205_CCR_BASE)) != NOERR) //test for functional driver + return -EIO; + + if ((errno = i2c_attach_client(&x1205_i2c_client)) != NOERR) + return errno; + + tv.tv_nsec = tm.tm_sec * 10000000; + tv.tv_sec = mktime(tm.tm_year+epoch, tm.tm_mon, tm.tm_mday, tm.tm_hour, + tm.tm_min, tm.tm_sec); + do_settimeofday(&tv); + set_rtc = x1205_sync_rtc; + + printk(KERN_DEBUG "%s attached on adapter %s\n",x1205_i2c_client.name, + x1205_i2c_client.adapter->name); //why is this name a null string? + + return NOERR; +} + +static int x1205_detach(struct i2c_client *client) +{ + int errno; + + if ((errno = i2c_detach_client(client)) != 0) { + printk(KERN_DEBUG "i2c_detach failed - errno = %d\n", errno); + return errno; + } + + return NOERR; +} + +// make sure the rtc_time values are in bounds +static int x1205_validate_tm(struct rtc_time *tm) +{ + tm->tm_year += 1900; + + if (tm->tm_year < 1970) + return -EINVAL; + + if ((tm->tm_mon > 11) || (tm->tm_mday == 0)) + return -EINVAL; + + if (tm->tm_mday > (days_in_mo[tm->tm_mon] + ( (tm->tm_mon == 1) && + ((!(tm->tm_year % 4) && (tm->tm_year % 100) ) || !(tm->tm_year % 400))))) + return -EINVAL; + + if ((tm->tm_year -= epoch) > 255) + return -EINVAL; + + if ((tm->tm_hour >= 24) || (tm->tm_min >= 60) || (tm->tm_sec >= 60)) + return -EINVAL; + return NOERR; +} + +static int x1205_command(struct i2c_client *client, unsigned int cmd, void *tm) +{ + int errno, dodate = RTC_DATETOO; + + if (client == NULL || tm == NULL) + return -EINVAL; + if (!capable(CAP_SYS_TIME)) + return -EACCES; + + printk(KERN_DEBUG "x1205_command %d\n", cmd); + + switch (cmd) { + case RTC_GETDATETIME: + return x1205_get_datetime(client, tm, X1205_CCR_BASE); + + case RTC_SETTIME: // note fall thru + dodate = RTC_NODATE; + case RTC_SETDATETIME: + if ((errno = x1205_validate_tm(tm)) < NOERR) + return errno; + return x1205_set_datetime(client, tm, dodate, X1205_CCR_BASE); + + default: + return -EINVAL; + } +} + +static int x1205_sync_rtc(void) +{ + struct rtc_time new_tm, old_tm; + unsigned long cur_secs = xtime.tv_sec; + + printk(KERN_DEBUG "x1205_sync_rtc entry\n"); + + if (x1205_command(&x1205_i2c_client, RTC_GETDATETIME, &old_tm)) + return 0; + +// xtime.tv_nsec = old_tm.tm_sec * 10000000; //FIXME: + new_tm.tm_sec = cur_secs % 60; + cur_secs /= 60; + new_tm.tm_min = cur_secs % 60; + cur_secs /= 60; + new_tm.tm_hour = cur_secs % 24; + + /* + * avoid writing when we're going to change the day + * of the month. We will retry in the next minute. + * This basically means that if the RTC must not drift + * by more than 1 minute in 11 minutes. + */ + if ((old_tm.tm_hour == 23 && old_tm.tm_min == 59) || + (new_tm.tm_hour == 23 && new_tm.tm_min == 59)) + return 1; + printk(KERN_DEBUG "x1205_sync_rtc exit\n"); + + return x1205_command(&x1205_i2c_client, RTC_SETTIME, &new_tm); +} + +static int x1205_read(struct file *file, char *buf, size_t count, loff_t *ptr) +{ + struct rtc_time tm; + + if ((x1205_get_datetime(&x1205_i2c_client, &tm, X1205_CCR_BASE)) < NOERR) + return -EIO; + return copy_to_user(buf, &tm, sizeof(tm)) ? -EFAULT : NOERR; +} + +//============================================================================== + +static int x1205_ioctl(struct inode *inode, struct file *file, unsigned int cmd, + unsigned long arg) +{ + struct rtc_time tm; + int errno; + + printk(KERN_DEBUG "ioctl = %x\n", cmd); + + switch (cmd) { + case RTC_RD_TIME: + if ((x1205_get_datetime(&x1205_i2c_client, &tm, X1205_CCR_BASE)) < NOERR) + return -EIO; + break; + + case RTC_SET_TIME: + if (!capable(CAP_SYS_TIME)) + return -EACCES; + + if (copy_from_user(&tm, (struct rtc_time *) arg, sizeof(struct rtc_time))) + return -EFAULT; + if ((errno = x1205_validate_tm(&tm)) < NOERR) + return errno; + return x1205_set_datetime(&x1205_i2c_client, &tm, RTC_DATETOO, X1205_CCR_BASE); + + case RTC_ALM_SET: //FIXME: set Control Regs + if (copy_from_user(&tm, (struct rtc_time *) arg, sizeof(struct rtc_time))) + return -EFAULT; + return x1205_set_datetime(&x1205_i2c_client, &tm, RTC_DATETOO, X1205_ALM0_BASE); + + case RTC_ALM_READ: + if ((x1205_get_datetime(&x1205_i2c_client, &tm, X1205_ALM0_BASE)) < NOERR) + return -EIO; + break; + + case RTC_EPOCH_READ: + + return put_user (epoch, (unsigned long __user *)arg); + + case RTC_EPOCH_SET: + if (arg < 1900) + return -EINVAL; + + if (!capable(CAP_SYS_TIME)) + return -EACCES; + + epoch = arg; + return 0; + + default: + return -ENOTTY; + } + return copy_to_user((void __user *)arg, &tm, sizeof tm) ? -EFAULT : 0; + +} + +static int x1205_read_proc(char *buf, char **start, off_t off, int len, int *eof, void *data) +{ + struct rtc_time tm; + int slen, errno; + + if ((errno = x1205_get_datetime(&x1205_i2c_client, &tm, X1205_CCR_BASE)) < NOERR) + return errno; + +// here we return the real year and the month as 1-12 since it is human-readable + slen = sprintf(buf, "rtc_time\t: %02d:%02d:%02d\nrtc_date\t: %04d-%02d-%02d\n", + tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year + 1900, tm.tm_mon+1, tm.tm_mday); + printk(KERN_DEBUG "raw rtc_time\t: %02d:%02d:%02d\nraw rtc_date\t: %04d-%02d-%02d\n", + tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year, tm.tm_mon, tm.tm_mday); + + if (slen <= off + len) + *eof = 1; + *start = buf + off; + slen -= off; + if (slen > len) + slen = len; + if ( slen < 0 ) + slen = 0; + + return slen; +} + +static int __init x1205_init(void) +{ + struct rtc_time tm; + int errno; + printk(KERN_INFO "LOADED %s\n", DRIVERNAME); + + if ((errno = i2c_add_driver(&x1205_driver)) != NOERR) { + dev_dbg(x1205_i2c_client.dev, "x1205_init failed - errno = %d\n", errno); + return (errno); + } + if ((errno = misc_register(&x1205_miscdev)) != NOERR) { + dev_dbg(x1205_i2c_client.dev, "Register Misc Driver failed - errno = %d\n", errno); + i2c_del_driver(&x1205_driver); + return errno; + } + if (create_proc_read_entry("driver/rtc", 0, NULL, x1205_read_proc, NULL) < NOERR) + return -ENOMEM; + if ((x1205_get_datetime(&x1205_i2c_client, &tm, X1205_CCR_BASE)) != NOERR) //test for functionality + return -EIO; + + return NOERR; +} + +static void __exit x1205_exit(void) +{ + remove_proc_entry("driver/rtc", NULL); + misc_deregister(&x1205_miscdev); + i2c_del_driver(&x1205_driver); + set_rtc = NULL; +} + +MODULE_AUTHOR("Karen Spearel <kas11@tampabay.rr.com>"); +MODULE_DESCRIPTION("Xicor X1205-RTC Driver"); +MODULE_LICENSE("GPL"); +static int debug = 7; +module_param(debug, bool, 0644); +MODULE_PARM_DESC(debug, "Debugging enabled = 1"); + +module_init(x1205_init); +module_exit(x1205_exit); |