diff options
author | Claudio Mignanti <c.mignanti@gmail.com> | 2009-04-19 15:36:30 +0000 |
---|---|---|
committer | Claudio Mignanti <c.mignanti@gmail.com> | 2009-04-19 15:36:30 +0000 |
commit | 14aa5dc5c11beb443b28d89ecce4624c8762b89f (patch) | |
tree | 3550dab70094b8f79664e5254dc9625659a17a48 /target/linux/etrax/patches-2.6.29 | |
parent | 964d68dcecaba9dd48e4d33f5b14c5366b21d4cd (diff) | |
download | upstream-14aa5dc5c11beb443b28d89ecce4624c8762b89f.tar.gz upstream-14aa5dc5c11beb443b28d89ecce4624c8762b89f.tar.bz2 upstream-14aa5dc5c11beb443b28d89ecce4624c8762b89f.zip |
etrax: dump to 2.6.29
SVN-Revision: 15260
Diffstat (limited to 'target/linux/etrax/patches-2.6.29')
7 files changed, 530 insertions, 0 deletions
diff --git a/target/linux/etrax/patches-2.6.29/100-cris-makefiles.patch b/target/linux/etrax/patches-2.6.29/100-cris-makefiles.patch new file mode 100644 index 0000000000..6495c4957f --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/100-cris-makefiles.patch @@ -0,0 +1,55 @@ +diff -urN linux-2.6.28.clean/arch/cris/Makefile linux-2.6.28.mod/arch/cris/Makefile +--- linux-2.6.28.clean/arch/cris/Makefile 2008-12-25 00:26:37.000000000 +0100 ++++ linux-2.6.28.mod/arch/cris/Makefile 2009-04-07 11:52:30.000000000 +0200 +@@ -40,7 +40,7 @@ + + LD = $(CROSS_COMPILE)ld -mcrislinux + +-OBJCOPYFLAGS := -O binary -R .note -R .comment -S ++OBJCOPYFLAGS := -O binary -R .bss -R .note -R .note.gnu.build-id -R .comment -S + + CPPFLAGS_vmlinux.lds = -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE) + +diff -urN linux-2.6.28.clean/arch/cris/arch-v10/boot/Makefile linux-2.6.28.mod/arch/cris/arch-v10/boot/Makefile +--- linux-2.6.28.clean/arch/cris/arch-v10/boot/Makefile 2008-12-25 00:26:37.000000000 +0100 ++++ linux-2.6.28.mod/arch/cris/arch-v10/boot/Makefile 2009-04-07 11:55:01.000000000 +0200 +@@ -2,8 +2,6 @@ + # arch/cris/arch-v10/boot/Makefile + # + +-OBJCOPYFLAGS = -O binary --remove-section=.bss +- + subdir- := compressed rescue + targets := Image + +@@ -13,7 +11,7 @@ + + $(obj)/compressed/vmlinux: $(obj)/Image FORCE + $(Q)$(MAKE) $(build)=$(obj)/compressed $@ +- $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin ++# $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin + + $(obj)/zImage: $(obj)/compressed/vmlinux + @cp $< $@ +diff -urN linux-2.6.28.clean/arch/cris/arch-v10/boot/compressed/Makefile linux-2.6.28.mod/arch/cris/arch-v10/boot/compressed/Makefile +--- linux-2.6.28.clean/arch/cris/arch-v10/boot/compressed/Makefile 2008-12-25 00:26:37.000000000 +0100 ++++ linux-2.6.28.mod/arch/cris/arch-v10/boot/compressed/Makefile 2009-04-07 11:53:02.000000000 +0200 +@@ -6,7 +6,6 @@ + ccflags-y += -O2 $(LINUXINCLUDE) + ldflags-y += -T $(srctree)/$(src)/decompress.lds + OBJECTS = $(obj)/head.o $(obj)/misc.o +-OBJCOPYFLAGS = -O binary --remove-section=.bss + + quiet_cmd_image = BUILD $@ + cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ +diff -urN linux-2.6.28.clean/arch/cris/arch-v10/boot/rescue/Makefile linux-2.6.28.mod/arch/cris/arch-v10/boot/rescue/Makefile +--- linux-2.6.28.clean/arch/cris/arch-v10/boot/rescue/Makefile 2008-12-25 00:26:37.000000000 +0100 ++++ linux-2.6.28.mod/arch/cris/arch-v10/boot/rescue/Makefile 2009-04-07 11:53:09.000000000 +0200 +@@ -5,7 +5,6 @@ + ccflags-y += -O2 $(LINUXINCLUDE) + asflags-y += $(LINUXINCLUDE) + ldflags-y += -T $(srctree)/$(src)/rescue.lds +-OBJCOPYFLAGS = -O binary --remove-section=.bss + obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o + OBJECT := $(obj)/head.o + diff --git a/target/linux/etrax/patches-2.6.29/200-samsung_flash.patch b/target/linux/etrax/patches-2.6.29/200-samsung_flash.patch new file mode 100644 index 0000000000..5df6590fa7 --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/200-samsung_flash.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.28.2/drivers/mtd/chips/cfi_cmdset_0002.c +=================================================================== +--- linux-2.6.28.2.orig/drivers/mtd/chips/cfi_cmdset_0002.c 2009-02-04 13:42:19.000000000 +0100 ++++ linux-2.6.28.2/drivers/mtd/chips/cfi_cmdset_0002.c 2009-02-04 13:44:11.000000000 +0100 +@@ -364,7 +364,7 @@ + return NULL; + } + +- if (extp->MajorVersion != '1' || ++ if (extp->MajorVersion < '1' || extp->MajorVersion > '3' || + (extp->MinorVersion < '0' || extp->MinorVersion > '4')) { + if (cfi->mfr == MANUFACTURER_SAMSUNG && + (extp->MajorVersion == '3' && extp->MinorVersion == '3')) { diff --git a/target/linux/etrax/patches-2.6.29/201-flashsize.patch b/target/linux/etrax/patches-2.6.29/201-flashsize.patch new file mode 100644 index 0000000000..e825acf1f7 --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/201-flashsize.patch @@ -0,0 +1,92 @@ +Index: linux-2.6.28.2/arch/cris/arch-v10/drivers/axisflashmap.c +=================================================================== +--- linux-2.6.28.2.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2009-02-04 13:49:34.000000000 +0100 ++++ linux-2.6.28.2/arch/cris/arch-v10/drivers/axisflashmap.c 2009-02-04 13:55:30.000000000 +0100 +@@ -113,7 +113,7 @@ + + /* If no partition-table was found, we use this default-set. */ + #define MAX_PARTITIONS 7 +-#define NUM_DEFAULT_PARTITIONS 3 ++#define NUM_DEFAULT_PARTITIONS 2 + + /* + * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the +@@ -122,19 +122,14 @@ + */ + static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { + { +- .name = "boot firmware", +- .size = CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0 +- }, +- { + .name = "kernel", +- .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), +- .offset = CONFIG_ETRAX_PTABLE_SECTOR ++ .size = 0x00, ++ .offset = 0 + }, + { +- .name = "filesystem", +- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ .name = "rootfs", ++ .size = 0x200000, ++ .offset = 0x200000 + } + }; + +@@ -281,6 +276,11 @@ + struct partitiontable_entry *ptable; + int use_default_ptable = 1; /* Until proven otherwise. */ + const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n"; ++ unsigned int kernel_part_size = 0; ++ unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR); ++ unsigned int flash_scan_count = 0; ++ const char *part_magic = "ACME_PART_MAGIC"; ++ unsigned int magic_len = strlen(part_magic); + + if (!(mymtd = flash_probe())) { + /* There's no reason to use this module if no flash chip can +@@ -293,6 +293,31 @@ + axisflash_mtd = mymtd; + } + ++ /* scan flash to findout where out partition starts */ ++ ++ printk(KERN_INFO "Scanning flash for end of kernel magic\n"); ++ for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++) { ++ if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0) { ++ kernel_part_size = flash_mem[flash_scan_count + magic_len ]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 2]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 1]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 3]; ++ printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size); ++ flash_scan_count = 1100000; ++ } ++ } ++ ++ ++ if(kernel_part_size){ ++ kernel_part_size = (kernel_part_size & 0xffff0000); ++ axis_default_partitions[0].size = kernel_part_size; ++ axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size; ++ axis_default_partitions[1].offset = axis_default_partitions[0].size; ++ } ++ + if (mymtd) { + mymtd->owner = THIS_MODULE; + ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR + +Index: linux-2.6.28.2/arch/cris/arch-v10/lib/hw_settings.S +=================================================================== +--- linux-2.6.28.2.orig/arch/cris/arch-v10/lib/hw_settings.S 2009-02-04 13:48:25.000000000 +0100 ++++ linux-2.6.28.2/arch/cris/arch-v10/lib/hw_settings.S 2009-02-04 13:49:04.000000000 +0100 +@@ -60,3 +60,5 @@ + .dword R_PORT_PB_SET + .dword PB_SET_VALUE + .dword 0 ; No more register values ++ .ascii "ACME_PART_MAGIC" ++ .dword 0xdeadc0de diff --git a/target/linux/etrax/patches-2.6.29/300-sysfs.patch b/target/linux/etrax/patches-2.6.29/300-sysfs.patch new file mode 100644 index 0000000000..9f415b4a82 --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/300-sysfs.patch @@ -0,0 +1,43 @@ +--- a/drivers/serial/crisv10.c ++++ b/drivers/serial/crisv10.c +@@ -27,6 +27,7 @@ static char *serial_version = "$Revision + #include <linux/kernel.h> + #include <linux/mutex.h> + #include <linux/bitops.h> ++#include <linux/device.h> + + #include <asm/io.h> + #include <asm/irq.h> +@@ -4384,6 +4385,7 @@ static const struct tty_operations rs_op + .tiocmset = rs_tiocmset + }; + ++static struct class *rs_class; + static int __init + rs_init(void) + { +@@ -4518,6 +4520,24 @@ rs_init(void) + #endif + #endif /* CONFIG_SVINTO_SIM */ + ++ rs_class = class_create(THIS_MODULE, "rs_tty"); ++#ifdef CONFIG_ETRAX_SERIAL_PORT0 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 64), NULL, "ttyS0"); ++#endif ++#ifdef CONFIG_ETRAX_SERIAL_PORT1 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 65), NULL, "ttyS1"); ++#endif ++#ifdef CONFIG_ETRAX_SERIAL_PORT2 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 66), NULL, "ttyS2"); ++#endif ++#ifdef CONFIG_ETRAX_SERIAL_PORT3 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 67), NULL, "ttyS3"); ++#endif ++ + return 0; + } + diff --git a/target/linux/etrax/patches-2.6.29/400-Kconfig_source.patch b/target/linux/etrax/patches-2.6.29/400-Kconfig_source.patch new file mode 100644 index 0000000000..d0fdbf5897 --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/400-Kconfig_source.patch @@ -0,0 +1,17 @@ +Index: linux-2.6.28.9/arch/cris/Kconfig +=================================================================== +--- linux-2.6.28.9.orig/arch/cris/Kconfig 2009-03-23 22:55:52.000000000 +0100 ++++ linux-2.6.28.9/arch/cris/Kconfig 2009-04-08 16:53:30.000000000 +0200 +@@ -662,6 +662,12 @@ + + source "drivers/ide/Kconfig" + ++source "drivers/scsi/Kconfig" ++ ++source "drivers/media/Kconfig" ++ ++source "sound/Kconfig" ++ + source "drivers/net/Kconfig" + + source "drivers/i2c/Kconfig" diff --git a/target/linux/etrax/patches-2.6.29/500-i2c_gvc.patch b/target/linux/etrax/patches-2.6.29/500-i2c_gvc.patch new file mode 100644 index 0000000000..7eed8b2a71 --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/500-i2c_gvc.patch @@ -0,0 +1,45 @@ +Index: linux-2.6.25.20/arch/cris/arch-v10/drivers/Kconfig +=================================================================== +--- linux-2.6.25.20.orig/arch/cris/arch-v10/drivers/Kconfig 2009-02-09 09:30:40.000000000 +0100 ++++ linux-2.6.25.20/arch/cris/arch-v10/drivers/Kconfig 2009-02-09 21:23:12.000000000 +0100 +@@ -450,11 +450,18 @@ + i2c_arg = I2C_READARG(STA013_READ_ADDR, reg); + val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg); + ++config ETRAX_I2C_GVC ++ bool "I2C GVC support" ++ depends on ETRAX_ARCH_V10 && !ETRAX_I2C ++ select ETRAX_I2C_USES_PB_NOT_PB_I2C ++ help ++ Enables an I2C driver with Geert Vancompernolle improvement. ++ + # this is true for most products since PB-I2C seems to be somewhat + # flawed.. + config ETRAX_I2C_USES_PB_NOT_PB_I2C + bool "I2C uses PB not PB-I2C" +- depends on ETRAX_I2C ++ depends on ETRAX_I2C || ETRAX_I2C_GVC + help + Select whether to use the special I2C mode in the PB I/O register or + not. This option needs to be selected in order to use some drivers +@@ -478,7 +485,7 @@ + + config ETRAX_I2C_EEPROM + bool "I2C EEPROM (non-volatile RAM) support" +- depends on ETRAX_I2C ++ depends on ETRAX_I2C || ETRAX_I2C_GVC + help + Enables I2C EEPROM (non-volatile RAM) on PB0 and PB1 using the I2C + driver. Select size option: Probed, 2k, 8k, 16k. +Index: linux-2.6.25.20/arch/cris/arch-v10/drivers/Makefile +=================================================================== +--- linux-2.6.25.20.orig/arch/cris/arch-v10/drivers/Makefile 2009-02-09 09:30:41.000000000 +0100 ++++ linux-2.6.25.20/arch/cris/arch-v10/drivers/Makefile 2009-02-09 09:35:39.000000000 +0100 +@@ -4,6 +4,7 @@ + + obj-$(CONFIG_ETRAX_AXISFLASHMAP) += axisflashmap.o + obj-$(CONFIG_ETRAX_I2C) += i2c.o ++obj-$(CONFIG_ETRAX_I2C_GVC) += i2c_gvc.o + obj-$(CONFIG_ETRAX_I2C_EEPROM) += eeprom.o + obj-$(CONFIG_ETRAX_GPIO) += gpio.o + obj-$(CONFIG_ETRAX_DS1302) += ds1302.o diff --git a/target/linux/etrax/patches-2.6.29/600-fix_serial_cris.patch b/target/linux/etrax/patches-2.6.29/600-fix_serial_cris.patch new file mode 100644 index 0000000000..7ac24a474b --- /dev/null +++ b/target/linux/etrax/patches-2.6.29/600-fix_serial_cris.patch @@ -0,0 +1,265 @@ +Index: linux-2.6.28.9/drivers/serial/crisv10.c +=================================================================== +--- linux-2.6.28.9.orig/drivers/serial/crisv10.c 2009-04-10 12:58:18.000000000 +0200 ++++ linux-2.6.28.9/drivers/serial/crisv10.c 2009-04-10 12:58:22.000000000 +0200 +@@ -28,12 +28,15 @@ + #include <linux/mutex.h> + #include <linux/bitops.h> + #include <linux/device.h> ++#include <linux/seq_file.h> ++#include <linux/delay.h> ++#include <linux/module.h> ++#include <linux/uaccess.h> ++#include <linux/io.h> + +-#include <asm/io.h> + #include <asm/irq.h> + #include <asm/dma.h> + #include <asm/system.h> +-#include <linux/delay.h> + + #include <arch/svinto.h> + +@@ -457,7 +460,6 @@ + + #define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial)) + +-static struct ktermios *serial_termios[NR_PORTS]; + #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER + static struct fast_timer fast_timers[NR_PORTS]; + #endif +@@ -4221,151 +4223,132 @@ + return 0; + } + ++#ifdef CONFIG_PROC_FS + /* + * /proc fs routines.... + */ + +-static int line_info(char *buf, struct e100_serial *info) ++static void seq_line_info(struct seq_file *m, struct e100_serial *info) + { +- char stat_buf[30]; +- int ret; + unsigned long tmp; + +- ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d", +- info->line, (unsigned long)info->ioport, info->irq); ++ seq_printf(m, "%d: uart:E100 port:%lX irq:%d", ++ info->line, (unsigned long)info->ioport, info->irq); + + if (!info->ioport || (info->type == PORT_UNKNOWN)) { +- ret += sprintf(buf+ret, "\n"); +- return ret; ++ seq_printf(m, "\n"); ++ return; + } + +- stat_buf[0] = 0; +- stat_buf[1] = 0; +- if (!E100_RTS_GET(info)) +- strcat(stat_buf, "|RTS"); +- if (!E100_CTS_GET(info)) +- strcat(stat_buf, "|CTS"); +- if (!E100_DTR_GET(info)) +- strcat(stat_buf, "|DTR"); +- if (!E100_DSR_GET(info)) +- strcat(stat_buf, "|DSR"); +- if (!E100_CD_GET(info)) +- strcat(stat_buf, "|CD"); +- if (!E100_RI_GET(info)) +- strcat(stat_buf, "|RI"); +- +- ret += sprintf(buf+ret, " baud:%d", info->baud); +- +- ret += sprintf(buf+ret, " tx:%lu rx:%lu", ++ seq_printf(m, " baud:%d", info->baud); ++ seq_printf(m, " tx:%lu rx:%lu", + (unsigned long)info->icount.tx, + (unsigned long)info->icount.rx); + tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); +- if (tmp) { +- ret += sprintf(buf+ret, " tx_pend:%lu/%lu", +- (unsigned long)tmp, +- (unsigned long)SERIAL_XMIT_SIZE); +- } +- +- ret += sprintf(buf+ret, " rx_pend:%lu/%lu", +- (unsigned long)info->recv_cnt, +- (unsigned long)info->max_recv_cnt); ++ if (tmp) ++ seq_printf(m, " tx_pend:%lu/%lu", ++ (unsigned long)tmp, ++ (unsigned long)SERIAL_XMIT_SIZE); ++ ++ seq_printf(m, " rx_pend:%lu/%lu", ++ (unsigned long)info->recv_cnt, ++ (unsigned long)info->max_recv_cnt); + + #if 1 + if (info->port.tty) { +- + if (info->port.tty->stopped) +- ret += sprintf(buf+ret, " stopped:%i", +- (int)info->port.tty->stopped); ++ seq_printf(m, " stopped:%i", ++ (int)info->port.tty->stopped); + if (info->port.tty->hw_stopped) +- ret += sprintf(buf+ret, " hw_stopped:%i", +- (int)info->port.tty->hw_stopped); ++ seq_printf(m, " hw_stopped:%i", ++ (int)info->port.tty->hw_stopped); + } + + { + unsigned char rstat = info->ioport[REG_STATUS]; +- if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) +- ret += sprintf(buf+ret, " xoff_detect:1"); ++ if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect)) ++ seq_printf(m, " xoff_detect:1"); + } + + #endif + +- +- +- + if (info->icount.frame) +- ret += sprintf(buf+ret, " fe:%lu", +- (unsigned long)info->icount.frame); ++ seq_printf(m, " fe:%lu", (unsigned long)info->icount.frame); + + if (info->icount.parity) +- ret += sprintf(buf+ret, " pe:%lu", +- (unsigned long)info->icount.parity); ++ seq_printf(m, " pe:%lu", (unsigned long)info->icount.parity); + + if (info->icount.brk) +- ret += sprintf(buf+ret, " brk:%lu", +- (unsigned long)info->icount.brk); ++ seq_printf(m, " brk:%lu", (unsigned long)info->icount.brk); + + if (info->icount.overrun) +- ret += sprintf(buf+ret, " oe:%lu", +- (unsigned long)info->icount.overrun); ++ seq_printf(m, " oe:%lu", (unsigned long)info->icount.overrun); + + /* + * Last thing is the RS-232 status lines + */ +- ret += sprintf(buf+ret, " %s\n", stat_buf+1); +- return ret; ++ if (!E100_RTS_GET(info)) ++ seq_puts(m, "|RTS"); ++ if (!E100_CTS_GET(info)) ++ seq_puts(m, "|CTS"); ++ if (!E100_DTR_GET(info)) ++ seq_puts(m, "|DTR"); ++ if (!E100_DSR_GET(info)) ++ seq_puts(m, "|DSR"); ++ if (!E100_CD_GET(info)) ++ seq_puts(m, "|CD"); ++ if (!E100_RI_GET(info)) ++ seq_puts(m, "|RI"); ++ seq_puts(m, "\n"); + } + +-int rs_read_proc(char *page, char **start, off_t off, int count, +- int *eof, void *data) ++ ++static int crisv10_proc_show(struct seq_file *m, void *v) + { +- int i, len = 0, l; +- off_t begin = 0; ++ int i; ++ ++ seq_printf(m, "serinfo:1.0 driver:%s\n", serial_version); + +- len += sprintf(page, "serinfo:1.0 driver:%s\n", +- serial_version); +- for (i = 0; i < NR_PORTS && len < 4000; i++) { ++ for (i = 0; i < NR_PORTS; i++) { + if (!rs_table[i].enabled) + continue; +- l = line_info(page + len, &rs_table[i]); +- len += l; +- if (len+begin > off+count) +- goto done; +- if (len+begin < off) { +- begin += len; +- len = 0; +- } ++ seq_line_info(m, &rs_table[i]); + } + #ifdef DEBUG_LOG_INCLUDED + for (i = 0; i < debug_log_pos; i++) { +- len += sprintf(page + len, "%-4i %lu.%lu ", i, debug_log[i].time, timer_data_to_ns(debug_log[i].timer_data)); +- len += sprintf(page + len, debug_log[i].string, debug_log[i].value); +- if (len+begin > off+count) +- goto done; +- if (len+begin < off) { +- begin += len; +- len = 0; +- } ++ seq_printf(m, "%-4i %lu.%lu ", ++ i, debug_log[i].time, ++ timer_data_to_ns(debug_log[i].timer_data)); ++ seq_printf(m, debug_log[i].string, debug_log[i].value); + } +- len += sprintf(page + len, "debug_log %i/%i %li bytes\n", +- i, DEBUG_LOG_SIZE, begin+len); ++ seq_printf(m, "debug_log %i/%i\n", i, DEBUG_LOG_SIZE); + debug_log_pos = 0; + #endif ++ return 0; ++} + +- *eof = 1; +-done: +- if (off >= len+begin) +- return 0; +- *start = page + (off-begin); +- return ((count < begin+len-off) ? count : begin+len-off); ++static int crisv10_proc_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, crisv10_proc_show, NULL); + } + ++static const struct file_operations crisv10_proc_fops = { ++ .owner = THIS_MODULE, ++ .open = crisv10_proc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++}; ++#endif ++ ++ + /* Finally, routines used to initialize the serial driver. */ + +-static void +-show_serial_version(void) ++static void show_serial_version(void) + { + printk(KERN_INFO +- "ETRAX 100LX serial-driver %s, (c) 2000-2004 Axis Communications AB\r\n", ++ "ETRAX 100LX serial-driver %s, " ++ "(c) 2000-2004 Axis Communications AB\r\n", + &serial_version[11]); /* "$Revision: x.yy" */ + } + +@@ -4389,9 +4372,11 @@ + .break_ctl = rs_break, + .send_xchar = rs_send_xchar, + .wait_until_sent = rs_wait_until_sent, +- .read_proc = rs_read_proc, + .tiocmget = rs_tiocmget, +- .tiocmset = rs_tiocmset ++ .tiocmset = rs_tiocmset, ++#ifdef CONFIG_PROC_FS ++ .proc_fops = &crisv10_proc_fops, ++#endif + }; + + static struct class *rs_class; |