=== arch/arm/Kconfig ================================================================== --- arch/arm/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ arch/arm/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -263,13 +263,13 @@ default y if ARCH_ITDM340_10 || ARCH_ITDM320_20 || ARCH_NTDEV_DM320 || ARCH_NTR3_DM320 || ARCH_NTOSD_DM320 #ISOFT_PORT -source "arch/arm/mach-ntdev-dm320/Kconfig" +#source "arch/arm/mach-ntdev-dm320/Kconfig" -source "arch/arm/mach-ntr3-dm320/Kconfig" +#source "arch/arm/mach-ntr3-dm320/Kconfig" source "arch/arm/mach-ntosd-dm320/Kconfig" -source "arch/arm/mach-itdm320-20/Kconfig" +#source "arch/arm/mach-itdm320-20/Kconfig" source "arch/arm/mach-itdm340-10/Kconfig" @@ -840,18 +840,11 @@ source "drivers/mfd/Kconfig" -#ISOFT_PORT -# WBB: Do we really want V4L? -if (!ARCH_ITDM3XX) source "drivers/media/Kconfig" -endif source "drivers/video/Kconfig" -# WBB: Do we really want V4L? -if (!ARCH_ITDM3XX) source "sound/Kconfig" -endif source "drivers/usb/Kconfig" === arch/arm/mach-ntosd-dm320/core.c ================================================================== --- arch/arm/mach-ntosd-dm320/core.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ arch/arm/mach-ntosd-dm320/core.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -258,6 +258,8 @@ static void __init itdm320_mach_init(void) { + int i; + #ifndef LINUX_2_6_15 imem_map.physical = IMEM_START; #else /* LINUX_2_6_15 */ @@ -302,7 +304,17 @@ outw( 3, IO_EMIF_PAGESZ ); #endif - (void) platform_add_devices(devices, ARRAY_SIZE(devices)); + //(void) platform_add_devices(devices, ARRAY_SIZE(devices)); + /* Manually register each platform device. Do not rely on + * platform_add_devices because some device registration (mainly imem) might + * fail and cause the entire operation to be rolled back. Instead, we want + * to continue. */ + for (i = 0; i < ARRAY_SIZE(devices); i++) { + if (platform_device_register(devices[i]) < 0) { + printk(KERN_WARNING "warning: error registering platform device %s\n", + devices[i]->name); + } + } } static void __init itdm320_map_io(void) === drivers/char/it_timer.c ================================================================== --- drivers/char/it_timer.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/char/it_timer.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -30,7 +30,7 @@ #include -#if defined(CONFIG_ARCH_NTDEV_DM320) || defined(CONFIG_ARCH_NTR3_DM320) || defined (CONFIG_ARCH_NTOSD_DM320) || defined(CONFIG_ARCH_ITDM320_20) +#if defined(CONFIG_ARCH_ITDM3XX) #define PLATFORM "DM320" #define MAX_TIMERS 4 === drivers/i2c/i2c-core.c ================================================================== --- drivers/i2c/i2c-core.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/i2c/i2c-core.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -1153,7 +1153,60 @@ return res; } +//DNZ +#ifdef CONFIG_ARCH_ITDM3XX +s32 i2c_FM_write(struct i2c_client *client, u8 *values) +{ + unsigned char msgbuf0[5]; + unsigned char msgbuf1[5]; + struct i2c_msg msg[2] = { + { client->addr, client->flags | I2C_M_IGNORE_NAK, 1, msgbuf0 }, + { client->addr, client->flags, 5, msgbuf1 } + }; + + msgbuf1[0] = values[0]; + msgbuf1[1] = values[1]; + msgbuf1[2] = values[2]; + msgbuf1[3] = values[3]; + msgbuf1[4] = values[4]; + + down(&client->adapter->bus_lock); + client->adapter->algo->FM_xfer(client->adapter,msg,1); + up(&client->adapter->bus_lock); + + return 0 ; +} + +s32 i2c_FM_read(struct i2c_client *client, u8 *values) +{ + unsigned char msgbuf0[0]; + unsigned char msgbuf1[5]; + +// msgbuf0[0]=0; + + struct i2c_msg msg[2] = { + { client->addr, client->flags | I2C_M_IGNORE_NAK | I2C_M_RD, 1, msgbuf0 }, + { client->addr, client->flags | I2C_M_RD, 5, msgbuf1 } + }; + + down(&client->adapter->bus_lock); + client->adapter->algo->FM_xfer(client->adapter,msg,1); + up(&client->adapter->bus_lock); + + values[0] = msg[1].buf[0]; + values[1] = msg[1].buf[1]; + values[2] = msg[1].buf[2]; + values[3] = msg[1].buf[3]; + values[4] = msg[1].buf[4]; + return 0 ; +} + +EXPORT_SYMBOL(i2c_FM_write); +EXPORT_SYMBOL(i2c_FM_read); +#endif +//DNZ + /* Next four are needed by i2c-isa */ EXPORT_SYMBOL_GPL(i2c_adapter_dev_release); EXPORT_SYMBOL_GPL(i2c_adapter_driver); === drivers/ide/arm/itdm320-20-hdd.c ================================================================== --- drivers/ide/arm/itdm320-20-hdd.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ide/arm/itdm320-20-hdd.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -315,7 +315,7 @@ hwif->hw.io_ports[IDE_STATUS_OFFSET] = __ide_hdd(REGISTER_OFFSET + (0x07 << IDE_SHIFT)); hwif->hw.io_ports[IDE_CONTROL_OFFSET] = __ide_hdd(CONTROL_OFFSET + (0x06 << IDE_SHIFT)); hwif->hw.io_ports[IDE_IRQ_OFFSET] = __ide_hdd(CONTROL_OFFSET + (0x07 << IDE_SHIFT)); - hwif->hw.irq = IRQ_GIO7;//IRQ_GIO11; + hwif->hw.irq = gio_irq_num(GIO_HDD_INT); hwif->noprobe = 0; /* Set callbacks for IDE I/O access. Can't use defaults since we don't I/O map === drivers/input/touchscreen/Kconfig ================================================================== --- drivers/input/touchscreen/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/input/touchscreen/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -98,12 +98,14 @@ endif config TOUCHSCREEN_OMAP tristate "OMAP touchscreen input driver" - depends on INPUT && INPUT_TOUCHSCREEN && ARCH_OMAP + depends on INPUT && INPUT_TOUCHSCREEN && (ARCH_OMAP || ARCH_ITDM3XX) select OMAP_TSC2101 help Say Y here if you have an OMAP based board with touchscreen attached to it, e.g. OMAP Innovator, OSK, H2 or H3 + This driver also supports the TSC2101 chip found in the m:robe 500i. + If unsure, say N. To compile this driver as a module, choose M here: the === drivers/input/touchscreen/omap/Makefile ================================================================== --- drivers/input/touchscreen/omap/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/input/touchscreen/omap/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -6,6 +6,7 @@ objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_H2) += ts_hx.o objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_H3) += ts_hx.o +objs-$(CONFIG_ARCH_ITDM3XX)y += ts_hx.o objs-$(CONFIG_ARCH_OMAP15XX)$(CONFIG_MACH_OMAP_INNOVATOR) += ts_inn1510.o objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_OSK) += ts_osk.o === drivers/input/touchscreen/omap/omap_ts.c ================================================================== --- drivers/input/touchscreen/omap/omap_ts.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/input/touchscreen/omap/omap_ts.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -46,7 +46,7 @@ #define OMAP_TS_NAME "omap_ts" static struct ts_device *__initdata ts_devs[] = { -#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3) +#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3) || (1) &hx_ts, #endif #ifdef CONFIG_MACH_OMAP_OSK @@ -73,6 +73,8 @@ DEBUG_TS("omap_ts_read: read x=%d,y=%d,p=%d\n", data[0], data[1], data[2]); + // printk(KERN_INFO "ts: in omap_ts_read\n"); + return 0; } @@ -132,9 +134,13 @@ int i; int status = -ENODEV; + printk(KERN_INFO "ts: omap_ts_probe\n"); + memset(&ts_omap, 0, sizeof(ts_omap)); spin_lock_init(&ts_omap.lock); + printk(KERN_INFO "ts: omap_ts_probe,2\n"); + for (i = 0; i < ARRAY_SIZE(ts_devs); i++) { if (!ts_devs[i] || !ts_devs[i]->probe) continue; @@ -144,10 +150,12 @@ break; } } - + printk(KERN_INFO "ts: omap_ts_probe,2.5\n"); if (status != 0) return status; - + + printk(KERN_INFO "ts: omap_ts_probe,3\n"); + // Init acquisition timer function init_timer(&ts_omap.ts_timer); ts_omap.ts_timer.function = omap_ts_timer; @@ -157,7 +165,7 @@ if (request_irq(ts_omap.irq, omap_ts_handler, 0, OMAP_TS_NAME, &ts_omap)) { printk(KERN_ERR - "omap_ts.c: Could not allocate touchscreen IRQ!\n"); + "omap_ts.c: Could not allocate touchscreen IRQ!\n"); ts_omap.irq = -1; return -EINVAL; } @@ -166,7 +174,7 @@ printk(KERN_ERR "omap_ts.c: No touchscreen IRQ assigned!\n"); return -EINVAL; } - + printk(KERN_INFO "ts: omap_ts_probe,4\n"); ts_omap.inputdevice = input_allocate_device(); ts_omap.inputdevice->name = OMAP_TS_NAME; ts_omap.inputdevice->dev = &pdev->dev; @@ -178,13 +186,15 @@ ts_omap.dev->enable(); - printk("OMAP touchscreen driver initialized\n"); + printk("MROBE touchscreen driver initialized - ported by: Shirour!\n"); return 0; } static int omap_ts_remove(struct platform_device *pdev) { + printk("MROBE touchscreen driver removed\n"); + ts_omap.dev->disable(); input_unregister_device(ts_omap.inputdevice); if (ts_omap.irq != -1) @@ -210,6 +220,8 @@ static void omap_ts_device_release(struct device *dev) { /* Nothing */ + + } static struct platform_driver omap_ts_driver = { .probe = omap_ts_probe, @@ -232,6 +244,8 @@ static int __init omap_ts_init(void) { int ret; + char tempchar[100]=""; + printk(KERN_INFO "ts: omap_ts_init\n"); ret = platform_device_register(&omap_ts_device); if (ret != 0) @@ -242,12 +256,13 @@ platform_device_unregister(&omap_ts_device); return -ENODEV; } - + printk(KERN_INFO "ts: omap_ts_init, 2\n"); return 0; } static void __exit omap_ts_exit(void) { + printk(KERN_INFO "ts: unregistering (omap_ts_exit)\n"); platform_driver_unregister(&omap_ts_driver); platform_device_unregister(&omap_ts_device); } === drivers/input/touchscreen/omap/ts_hx.c ================================================================== --- drivers/input/touchscreen/omap/ts_hx.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/input/touchscreen/omap/ts_hx.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -29,8 +29,12 @@ #include #include #include +#ifndef CONFIG_ARCH_ITDM3XX #include -#include +#else +#include +#endif +//#include #include #include @@ -80,9 +84,15 @@ static int __init hx_ts_probe(struct omap_ts_t *ts) { - unsigned gpio; + printk(KERN_INFO "ts: hx_ts_probe! \n"); - if (machine_is_omap_h2()) { + ts->irq = gio_irq_num(GIO_TS_INT); + // set_irq_type(ts->irq, IRQT_FALLING); + set_irq_type(ts->irq, IRQT_BOTHEDGE); + // gio_set_dir(14, 1); + + + /* if (machine_is_omap_h2()) { gpio = H2_GPIO_NUM; omap_cfg_reg(P20_1610_GPIO4); } else if (machine_is_omap_h3()) { @@ -98,7 +108,7 @@ }; omap_set_gpio_direction(gpio, 1); - set_irq_type(ts->irq, IRQT_FALLING); + set_irq_type(ts->irq, IRQT_FALLING);*/ return 0; } @@ -113,7 +123,7 @@ for (i = 0; i < OMAP_TSC2101_READ_MAX; i++) values[i] &= TSC2101_MASKVAL; - + /* Calculate Pressure */ if (values[TSC2101_TS_Z1] != 0) { t = ((OMAP_TSC2101_XRES * values[TSC2101_TS_X]) * @@ -128,28 +138,40 @@ static void hx_ts_enable(void) { + u16 temp; int ret = omap_tsc2101_enable(); if (ret) { printk(KERN_ERR "FAILED TO INITIALIZE TSC CODEC\n"); return; } + temp = omap_tsc2101_read(0,5); + printk(KERN_INFO "MROBE READ BATTERY1: %d\n",temp); + temp = omap_tsc2101_read(0,6); + printk(KERN_INFO "MROBE READ BATTERY2: %d\n",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ X: %d\n",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ Y: %d\n",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ Z: %d\n",temp); + /* PINTDAV is data available only */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_STATUS, TSC2101_DATA_AVAILABLE); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_STATUS, TSC2101_DATA_AVAILABLE);*/ /* disable buffer mode */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_BUFFER_CTRL, TSC2101_BUFFERMODE_DISABLE); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_BUFFER_CTRL, TSC2101_BUFFERMODE_DISABLE);*/ /* use internal reference, 100 usec power-up delay, * * power down between conversions, 1.25V internal reference */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_REF_CTRL, TSC2101_REF_POWERUP); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_REF_CTRL, TSC2101_REF_POWERUP);*/ /* enable touch detection, 84usec precharge time, 32 usec sense time */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_CONFIG_CTRL, TSC2101_ENABLE_TOUCHDETECT); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_CONFIG_CTRL, TSC2101_ENABLE_TOUCHDETECT);*/ /* 3 msec conversion delays */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_PROG_DELAY, TSC2101_PRG_DELAY); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_PROG_DELAY, TSC2101_PRG_DELAY);*/ /* * TSC2101-controlled conversions * 12-bit samples @@ -158,9 +180,11 @@ * 1 MHz internal conversion clock * 500 usec panel voltage stabilization delay */ - omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, - TSC2101_TS_ADC_CTRL, TSC2101_ADC_CONTROL); + /* omap_tsc2101_write(TOUCHSCREEN_CONTROL_REGISTERS_PAGE, + TSC2101_TS_ADC_CTRL, TSC2101_ADC_CONTROL);*/ + printk(KERN_INFO "ts: hx_ts enabled!!\n"); + return; } @@ -176,6 +200,8 @@ #ifdef MODULE static void __exit hx_ts_remove(void) { + printk(KERN_INFO "hx_ts removed...\n"); + if (machine_is_omap_h2()) omap_free_gpio(H2_GPIO_NUM); else if (machine_is_omap_h3()) === drivers/misc/Kconfig ================================================================== --- drivers/misc/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/misc/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -28,5 +28,20 @@ If unsure, say N. +config MROBE_POWER_BUTTON + bool "m:robe power button driver" + depends on ARCH_ITDM3XX + default y + ---help--- + This driver adds support for the power button (labelled "POWER/HOLD" at the + top of the device) on the Olympus m:robe 500i. When the power button is + pressed, a system shutdown procedure is initiated, just like the + Ctrl-Alt-Del key combination on x86 PCs. + + NOTE: This is not a general-purpose driver for the power button. Its only + purpose is to deliver this emergency system shutdown signal. + + If unsure and building for the m:robe 500i, say Y. + endmenu === drivers/misc/Makefile ================================================================== --- drivers/misc/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/misc/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -5,3 +5,4 @@ obj-$(CONFIG_IBM_ASM) += ibmasm/ obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/ +obj-$(CONFIG_MROBE_POWER_BUTTON) += mrobe-power.o === drivers/ssi/Kconfig ================================================================== --- drivers/ssi/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ssi/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -8,11 +8,19 @@ on an OMAP processor. config OMAP_TSC2101 - depends on ARCH_OMAP1 || ARCH_OMAP24XX + depends on ARCH_OMAP1 || ARCH_OMAP24XX || ARCH_ITDM3XX tristate "TSC2101 codec support for Touchscreen and audio" select OMAP_UWIRE if MACH_OMAP_H3 || MACH_OMAP_H2 select GPIOEXPANDER_OMAP if MACH_OMAP_H3 ---help--- Say Y here if you want support for the TSC2101 codec. It is needed for touchscreen and audio on OMAP1610 and 1710. + +config SOC_TSC2101 + tristate "Support for TI TSC2101 Touchscreen and Audio Codec" + depends on TOUCHSCREEN_TSC2101|| ARCH_ITDM3XX + + help + Support for TI TSC2101 Touchscreen and Audio Codec + endmenu === drivers/ssi/Makefile ================================================================== --- drivers/ssi/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ssi/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -4,3 +4,4 @@ obj-$(CONFIG_OMAP_UWIRE) += omap-uwire.o obj-$(CONFIG_OMAP_TSC2101) += omap-tsc2101.o +obj-$(CONFIG_SOC_TSC2101) += tsc2101.o === drivers/ssi/omap-tsc2101.c ================================================================== --- drivers/ssi/omap-tsc2101.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ssi/omap-tsc2101.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -31,19 +31,20 @@ #include #include -#include +//#include #include +#include #include #include -#include +//#include #include "omap-tsc2101.h" -#if CONFIG_ARCH_OMAP16XX -#include <../drivers/ssi/omap-uwire.h> -#else -#error "Unsupported configuration" -#endif +//#if CONFIG_ARCH_OMAP16XX +//#include <../drivers/ssi/omap-uwire.h> +//#else +//#error "Unsupported configuration" +//#endif #define SPIO 1 @@ -58,136 +59,171 @@ #define CLK_SOFT_REQ_REG_BASE (0xFFFE0800+0x34) #define SOFT_COM_MCK0_REQ_MASK (0x1<<6) +int dm320_spi_data_transfer(int cs, u16 tx_data, int tx_size, int rx_size, + u16 *rx_buf, int leave_cs_active) +{ + u8 write_data; + u16 temp_data; + u16 read_data; + + if (tx_size != 0) + { + outw(0x4,IO_ADDRESS( IO_GIO_BITSET1 )); // set the TS SS + outw(0x4,IO_ADDRESS( IO_GIO_BITCLR1 )); // clear the TS SS + outw(0x1,IO_ADDRESS( IO_SERIAL0_TX_ENABLE )); // enable SPI access + } + + + + /*while (1){ + while ((inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + + outw(0x01, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + while ((temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + printk(KERN_INFO "Blah : %d, \n", temp_data); + outw(0x0, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + while ((temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + printk(KERN_INFO "Blah : %d, \n", temp_data); + temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) ; + printk(KERN_INFO "Blah : %d, \n", temp_data); + + while ((inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + + outw(0x01, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + while ((temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + printk(KERN_INFO "Blah : %d, \n", temp_data); + outw(0x1, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + while ((temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + printk(KERN_INFO "Blah : %d, \n", temp_data); + temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) ; + printk(KERN_INFO "Blah : %d, \n", temp_data); + + +} + */ + if (tx_size != 0) // if we need to write something + { + while (tx_size > 0) + { + write_data = (tx_data >> (tx_size - 8)) & 0xFF; + outw(write_data, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + while ((inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) & 0x100) != 0); // wait until transmission is allowed + + // printk(KERN_INFO "TX_WRITE: %d, \n", write_data); + // tx_data = tx_data << 8; + tx_size-=8; + } + + } + + // printk(KERN_INFO "IN transfer \n"); + + read_data = 0; + + while (rx_size != 0) // if we need to read something + { + outw(0x00, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write temp data (make the clock tick) + while (( (temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA))) & 0x100) != 0); // wait until transmission is allowed + // outw(write_data, IO_ADDRESS( IO_SERIAL0_TX_DATA )); // write the data + + // temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) ; + /*printk(KERN_INFO "IN READ... : %d, \n", temp_data); + printk(KERN_INFO "IN READ... : %d, \n", temp_data); + temp_data = inw(IO_ADDRESS(IO_SERIAL0_RX_DATA)) ; + printk(KERN_INFO "IN READ... : %d, \n", temp_data); + + temp_data = inw(IO_ADDRESS(IO_SERIAL0_MODE)) ; + printk(KERN_INFO "MODE: : %d, \n", temp_data); + */ + // printk(KERN_INFO "TX_READ: %d, \n", temp_data); + read_data = (read_data << 8) + (temp_data & 0xFF); + rx_size-=8; + + } + + // outw(0x0,IO_ADDRESS( IO_SERIAL0_TX_ENABLE )); // disable SPI access + + if (rx_buf != NULL) + *rx_buf = read_data; + + // *rx_buf = 0; + // outw(0x4,IO_ADDRESS( IO_GIO_BITSET1 )); // enable the TS + + return 0; +} + + int omap_tsc2101_enable(void) { int ret = 0; - spin_lock(&tsc2101_lock); - if (count++ == 0) { - int ret = 0; + // spin_lock(&tsc2101_lock); + // if (count++ == 0) { + // int ret = 0; /* set the Mux to provide MCLK to TSC2101 */ - if (machine_is_omap_h3()) { - ret = omap_cfg_reg(V5_1710_MCLK_ON); - } else { - if (machine_is_omap_h2()) { - ret = omap_cfg_reg(R10_1610_MCLK_ON); - } - } - /* Get the MCLK */ - tsc2101_mclk_ck = clk_get(NULL, "mclk"); - if (NULL == tsc2101_mclk_ck) { - printk(KERN_ERR "Unable to get the clock MCLK!!!\n");; - ret = -EPERM; - goto done; - } - if (clk_set_rate(tsc2101_mclk_ck, 12000000)) { - printk(KERN_ERR "Unable to set rate to the MCLK!!!\n");; - ret = -EPERM; - goto done; - } - clk_enable(tsc2101_mclk_ck); - - ret = omap_tsc2101_configure(); - /* Lock the module */ - if (!ret && !try_module_get(THIS_MODULE)) { - printk(KERN_CRIT "Failed to get TSC module\n"); - ret = -ESTALE; - } - } + // } -done: - spin_unlock(&tsc2101_lock); + //done: + // spin_unlock(&tsc2101_lock); return ret; } void omap_tsc2101_disable(void) { - spin_lock(&tsc2101_lock); - if (--count == 0) { - int ret = 0; + // spin_lock(&tsc2101_lock); + // if (--count == 0) { + // int ret = 0; /* Remove the Mux to Stop MCLK to TSC2101 */ - if (machine_is_omap_h3()) { - ret = omap_cfg_reg(V5_1710_MCLK_OFF); - } else { - if (machine_is_omap_h2()) { - ret = omap_cfg_reg(R10_1610_MCLK_OFF); - } - } - /* Release the MCLK */ - clk_disable(tsc2101_mclk_ck); - clk_put(tsc2101_mclk_ck); - tsc2101_mclk_ck = NULL; - - module_put(THIS_MODULE); - } - spin_unlock(&tsc2101_lock); + // } + // spin_unlock(&tsc2101_lock); } void omap_tsc2101_write(int page, u8 address, u16 data) { int ret = 0; - - if (machine_is_omap_h2()) { - ret = - omap_uwire_data_transfer(1, - (((page) << 11) | (address << 5)), - 16, 0, NULL, 1); - if (ret) { - printk(KERN_ERR - "uwire-write returned error for address %x\n", - address); - return; - } - ret = omap_uwire_data_transfer(1, data, 16, 0, NULL, 0); - if (ret) { - printk(KERN_ERR - "uwire-write returned error for address %x\n", - address); - return; - } + ret = + dm320_spi_data_transfer(1, + (((page) << 11) | (address << 5)), + 16, 0, NULL, 1); + if (ret) { + printk(KERN_ERR + "SPI returned error for address %x\n", + address); + return; } - if (machine_is_omap_h3()) { - - ret = - omap_uwire_data_transfer(0, ((page << 11) | (address << 5)), - 16, 0, NULL, 1); - if (ret) { - printk(KERN_ERR - "uwire-write returned error for address %x\n", - address); - return; - } - ret = omap_uwire_data_transfer(0, data, 16, 0, NULL, 0); - if (ret) { - printk(KERN_ERR - "uwire-write returned error for address %x\n", - address); - return; - } + + ret = dm320_spi_data_transfer(1, data, 16, 0, NULL, 0); + if (ret) { + printk(KERN_ERR + "SPI returned error for address %x\n", + address); + return; } + outw(0x4,IO_ADDRESS( IO_GIO_BITSET1 )); // set the TS SS + + return; + } void omap_tsc2101_reads(int page, u8 startaddress, u16 * data, int numregs) { - int cs = 0, i; - if (machine_is_omap_h2()) { - cs = 1; - } - if (machine_is_omap_h3()) { - cs = 0; - } - (void)omap_uwire_data_transfer(cs, (0x8000 | (page << 11) + int cs = 0; + (void)dm320_spi_data_transfer(cs, (0x8000 | (page << 11) | (startaddress << 5)), 16, 0, NULL, 1); + int i; for (i = 0; i < (numregs - 1); i++, data++) { - omap_uwire_data_transfer(cs, 0, 0, 16, data, 1); + dm320_spi_data_transfer(cs, 0, 0, 16, data, 1); } - omap_uwire_data_transfer(cs, 0, 0, 16, data, 0); + + dm320_spi_data_transfer(cs, 0, 0, 16, data, 0); + + outw(0x4,IO_ADDRESS( IO_GIO_BITSET1 )); // set the TS SS } u16 omap_tsc2101_read(int page, u8 address) @@ -200,6 +236,19 @@ /* FIXME: adapt clock divisors for uwire to current ARM xor clock rate */ static int omap_tsc2101_configure(void) { + u16 temp; + temp = omap_tsc2101_read(0,5); + printk(KERN_INFO "MROBE READ BATTERY1: %d",temp); + temp = omap_tsc2101_read(0,6); + printk(KERN_INFO "MROBE READ BATTERY2: %d",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ X: %d",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ Y: %d",temp); + temp = omap_tsc2101_read(0,0); + printk(KERN_INFO "MROBE READ Z: %d",temp); + + /* unsigned long uwire_flags = 0; #ifdef CONFIG_MACH_OMAP_H3 @@ -228,9 +277,9 @@ omap_cfg_reg(N14_1610_UWIRE_CS0); omap_uwire_configure_mode(0, uwire_flags); } - + */ /* Configure MCLK enable */ - omap_writel(omap_readl(PU_PD_SEL_2) | (1 << 22), PU_PD_SEL_2); + // omap_writel(omap_readl(PU_PD_SEL_2) | (1 << 22), PU_PD_SEL_2); return 0; } @@ -243,5 +292,5 @@ MODULE_AUTHOR("Texas Instruments"); MODULE_DESCRIPTION - ("Glue audio driver for the TI OMAP1610/OMAP1710 TSC2101 codec."); + ("Glue audio driver for the TI MROBE TSC2101 codec. - Made by: Shirour!"); MODULE_LICENSE("GPL"); === drivers/ssi/omap-uwire.c ================================================================== --- drivers/ssi/omap-uwire.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ssi/omap-uwire.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -45,8 +45,14 @@ #include #include #include -#include /* OMAP730_IO_CONF registers */ +//#include /* OMAP730_IO_CONF registers */ +#include +#include +#include +#include + + #include "omap-uwire.h" /* uWire Registers: */ @@ -63,6 +69,7 @@ static unsigned short uwire_flags[4]; static unsigned long uwire_base = io_p2v(UWIRE_BASE); +//static unsigned long uwire_base = io_p2v(PHY_IO_BASE); static spinlock_t uwire_lock; static unsigned int uwire_idx_shift; === drivers/ssi/tsc2101.c ================================================================== --- drivers/ssi/tsc2101.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/ssi/tsc2101.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -0,0 +1,387 @@ +/* + * TI TSC2102 Common Code + * + * Copyright 2005 Openedhand Ltd. + * + * Author: Richard Purdie + * + * 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. + * + */ + +#define DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include +#include +//#include + +// VF +#include + +//#include "../../sound/arm/pxa2xx-i2sound.h" + +static u32 tsc2101_regread(struct tsc2101_data *devdata, int regnum) +{ + u32 reg; + devdata->platform->send(TSC2101_READ, regnum, ®, 1); + return reg; +} + +static void tsc2101_regwrite(struct tsc2101_data *devdata, int regnum, u32 value) +{ + u32 reg; + devdata->platform->send(TSC2101_READ, regnum, ®, 1); + /*if(((regnum >> 11) & 0x0f) == 2) + { + printk("Changing %X: %04X to %04X\n", regnum, reg, value); + }*/ + reg = value; + devdata->platform->send(TSC2101_WRITE, regnum, ®, 1); + return; +} + +static int tsc2101_ts_penup(struct tsc2101_data *devdata) +{ + return !( tsc2101_regread(devdata, TSC2101_REG_STATUS) & TSC2101_STATUS_DAVAIL); +} + +#define TSC2101_ADC_DEFAULT (TSC2101_ADC_RES(TSC2101_ADC_RES_12BITP) | TSC2101_ADC_AVG(TSC2101_ADC_4AVG) | TSC2101_ADC_CL(TSC2101_ADC_CL_1MHZ_12BIT) | TSC2101_ADC_PV(TSC2101_ADC_PV_500us) | TSC2101_ADC_AVGFILT_MEAN) + +/* + * Touchscreen part + */ + +extern void tsc2101_ts_setup(struct device *dev); +extern void tsc2101_ts_report(struct tsc2101_data *devdata, int x, int y, int p, int pendown); + +static void tsc2101_readdata(struct tsc2101_data *devdata, struct tsc2101_ts_event *ts_data) +{ + int z1,z2,fixadc=0; + u32 values[4],status; + + status=tsc2101_regread(devdata, TSC2101_REG_STATUS); + + if (status & (TSC2101_STATUS_XSTAT | TSC2101_STATUS_YSTAT | TSC2101_STATUS_Z1STAT + | TSC2101_STATUS_Z2STAT)) { + + /* Read X, Y, Z1 and Z2 */ + devdata->platform->send(TSC2101_READ, TSC2101_REG_X, &values[0], 4); + + ts_data->x=values[0]; + ts_data->y=values[1]; + z1=values[2]; + z2=values[3]; + + /* Calculate Pressure */ + if ((z1 != 0) && (ts_data->x!=0) && (ts_data->y!=0)) + ts_data->p = ((ts_data->x * (z2 -z1) / z1)); + else + ts_data->p=0; + } + + if (status & TSC2101_STATUS_BSTAT) { + devdata->platform->send(TSC2101_READ, TSC2101_REG_BAT, &values[0], 1); + devdata->miscdata.bat=values[0]; + fixadc=1; + } + if (status & TSC2101_STATUS_AX1STAT) { + devdata->platform->send(TSC2101_READ, TSC2101_REG_AUX1, &values[0], 1); + devdata->miscdata.aux1=values[0]; + fixadc=1; + } + if (status & TSC2101_STATUS_AX2STAT) { + devdata->platform->send(TSC2101_READ, TSC2101_REG_AUX2, &values[0], 1); + devdata->miscdata.aux2=values[0]; + fixadc=1; + } + if (status & TSC2101_STATUS_T1STAT) { + devdata->platform->send(TSC2101_READ, TSC2101_REG_TEMP1, &values[0], 1); + devdata->miscdata.temp1=values[0]; + fixadc=1; + } + if (status & TSC2101_STATUS_T2STAT) { + devdata->platform->send(TSC2101_READ, TSC2101_REG_TEMP2, &values[0], 1); + devdata->miscdata.temp2=values[0]; + fixadc=1; + } + if (fixadc) { + /* Switch back to touchscreen autoscan */ + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_PSM | TSC2101_ADC_ADMODE(0x2)); + } +} + +static void tsc2101_ts_enable(struct tsc2101_data *devdata) +{ + //tsc2101_regwrite(devdata, TSC2101_REG_RESETCTL, 0xbb00); + + /* PINTDAV is data available only */ + tsc2101_regwrite(devdata, TSC2101_REG_STATUS, 0x4000); + + /* disable buffer mode */ + tsc2101_regwrite(devdata, TSC2101_REG_BUFMODE, 0x0); + + /* use internal reference, 100 usec power-up delay, + * power down between conversions, 1.25V internal reference */ + tsc2101_regwrite(devdata, TSC2101_REG_REF, 0x16); + + /* enable touch detection, 84usec precharge time, 32 usec sense time */ + tsc2101_regwrite(devdata, TSC2101_REG_CONFIG, 0x08); + + /* 3 msec conversion delays */ + tsc2101_regwrite(devdata, TSC2101_REG_DELAY, 0x0900); + + /* + * TSC2101-controlled conversions + * 12-bit samples + * continuous X,Y,Z1,Z2 scan mode + * average (mean) 4 samples per coordinate + * 1 MHz internal conversion clock + * 500 usec panel voltage stabilization delay + */ + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_PSM | TSC2101_ADC_ADMODE(0x2)); + + return; +} + +static void tsc2101_ts_disable(struct tsc2101_data *devdata) +{ + /* stop conversions and power down */ + tsc2101_regwrite(devdata, TSC2101_REG_ADC, 0x4000); +} + +static void ts_interrupt_main(struct tsc2101_data *devdata, int isTimer, struct pt_regs *regs) +{ + unsigned long flags; + struct tsc2101_ts_event ts_data; + + spin_lock_irqsave(&devdata->lock, flags); + + //if (!tsc2101_ts_penup(devdata)) { + if (devdata->platform->pendown()) { + devdata->pendown = 1; + tsc2101_readdata(devdata, &ts_data); + tsc2101_ts_report(devdata, ts_data.x, ts_data.y, ts_data.p, 1); + mod_timer(&(devdata->ts_timer), jiffies + HZ / 100); + } else if (devdata->pendown > 0 && devdata->pendown < 3) { + mod_timer(&(devdata->ts_timer), jiffies + HZ / 100); + devdata->pendown++; + } else { + if (devdata->pendown) + tsc2101_ts_report(devdata, 0, 0, 0, 0); + + devdata->pendown = 0; + + set_irq_type(devdata->platform->irq,IRQT_FALLING); + + /* This must be checked after set_irq_type() to make sure no data was missed */ + if (devdata->platform->pendown()) { + tsc2101_readdata(devdata, &ts_data); + mod_timer(&(devdata->ts_timer), jiffies + HZ / 100); + } + } + + spin_unlock_irqrestore(&devdata->lock, flags); +} + + +static void tsc2101_timer(unsigned long data) +{ + struct tsc2101_data *devdata = (struct tsc2101_data *) data; + + ts_interrupt_main(devdata, 1, NULL); +} + +static irqreturn_t tsc2101_handler(int irq, void *dev_id, struct pt_regs *regs) +{ + struct tsc2101_data *devdata = dev_id; + + set_irq_type(devdata->platform->irq,IRQT_NOEDGE); + ts_interrupt_main(devdata, 0, regs); + return IRQ_HANDLED; +} + + +static void tsc2101_get_miscdata(struct tsc2101_data *devdata) +{ + static int i=0; + unsigned long flags; + + if (devdata->pendown == 0) { + i++; + spin_lock_irqsave(&devdata->lock, flags); + if (i==1) + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_ADMODE(0x6)); + else if (i==2) + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_ADMODE(0x7)); + else if (i==3) + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_ADMODE(0x8)); + else if (i==4) + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_ADMODE(0xa)); + else if (i>=5) { + tsc2101_regwrite(devdata, TSC2101_REG_ADC, TSC2101_ADC_DEFAULT | TSC2101_ADC_ADMODE(0xc)); + i=0; + } + spin_unlock_irqrestore(&devdata->lock, flags); + } +} + + +static void tsc2101_misc_timer(unsigned long data) +{ + + struct tsc2101_data *devdata = (struct tsc2101_data *) data; + tsc2101_get_miscdata(devdata); + mod_timer(&(devdata->misc_timer), jiffies + HZ); +} + +void tsc2101_print_miscdata(struct device *dev) +{ + struct tsc2101_data *devdata = dev_get_drvdata(dev); + + printk(KERN_ERR "TSC2101 Bat: %04x\n",devdata->miscdata.bat); + printk(KERN_ERR "TSC2101 Aux1: %04x\n",devdata->miscdata.aux1); + printk(KERN_ERR "TSC2101 Aux2: %04x\n",devdata->miscdata.aux2); + printk(KERN_ERR "TSC2101 Temp1: %04x\n",devdata->miscdata.temp1); + printk(KERN_ERR "TSC2101 Temp2: %04x\n",devdata->miscdata.temp2); +} + +static int tsc2101_suspend(struct device *dev, u32 state, u32 level) +{ + struct tsc2101_data *devdata = dev_get_drvdata(dev); + +// if (level == SUSPEND_POWER_DOWN) { + tsc2101_ts_disable(devdata); + devdata->platform->suspend(); +// } + + return 0; +} + +static int tsc2101_resume(struct device *dev, u32 level) +{ + struct tsc2101_data *devdata = dev_get_drvdata(dev); + +// if (level == RESUME_POWER_ON) { + devdata->platform->resume(); + tsc2101_ts_enable(devdata); +// } + + return 0; +} + + +static int __init tsc2101_probe(struct device *dev) +{ + struct tsc2101_data *devdata; + struct tsc2101_ts_event ts_data; + + printk(KERN_INFO "int TSC2101 Driver probe,1 \n"); + + if (!(devdata = kcalloc(1, sizeof(struct tsc2101_data), GFP_KERNEL))) + return -ENOMEM; + + printk(KERN_INFO "int TSC2101 Driver probe,2 \n"); + + dev_set_drvdata(dev,devdata); + spin_lock_init(&devdata->lock); + devdata->platform = dev->platform_data; + + printk(KERN_INFO "int TSC2101 Driver probe,3 \n"); + + init_timer(&devdata->ts_timer); + devdata->ts_timer.data = (unsigned long) devdata; + devdata->ts_timer.function = tsc2101_timer; + + printk(KERN_INFO "int TSC2101 Driver probe,4 \n"); + + init_timer(&devdata->misc_timer); + devdata->misc_timer.data = (unsigned long) devdata; + devdata->misc_timer.function = tsc2101_misc_timer; + + printk(KERN_INFO "int TSC2101 Driver probe,5 \n"); + + /* request irq */ + if (request_irq(devdata->platform->irq, tsc2101_handler, 0, "tsc2101", devdata)) { + printk(KERN_ERR "tsc2101: Could not allocate touchscreen IRQ!\n"); + kfree(devdata); + return -EINVAL; + } + printk(KERN_INFO "int TSC2101 Driver probe,6 \n"); + + tsc2101_ts_setup(dev); + tsc2101_ts_enable(devdata); + + printk(KERN_INFO "int TSC2101 Driver probe,7 \n"); + + set_irq_type(devdata->platform->irq,IRQT_FALLING); + /* Check there is no pending data */ + tsc2101_readdata(devdata, &ts_data); + printk(KERN_INFO "int TSC2101 Driver probe,8 \n"); + + // mod_timer(&(devdata->misc_timer), jiffies + HZ); + + /* Sound driver */ + // snd_data = devdata; + return 0; +} + + +static int __exit tsc2101_remove(struct device *dev) +{ + struct tsc2101_data *devdata = dev_get_drvdata(dev); + + free_irq(devdata->platform->irq, devdata); + del_timer_sync(&devdata->ts_timer); + del_timer_sync(&devdata->misc_timer); + input_unregister_device(devdata->inputdevice); + tsc2101_ts_disable(devdata); + kfree(devdata); + + return 0; +} + +static struct device_driver tsc2101_driver = { + .name = "tsc2101", + .bus = &platform_bus_type, + .probe = tsc2101_probe, + .remove = __exit_p(tsc2101_remove), +#ifdef CONFIG_PM + .suspend = tsc2101_suspend, + .resume = tsc2101_resume, +#endif +}; + +static int __init tsc2101_init(void) +{ + int ret; + ret = platform_driver_register(&tsc2101_driver); + printk(KERN_INFO "TSC2101 Driver Init func, ret = %d \n", ret); + /* Sound driver */ + // snd_pxa2xx_i2sound_card_activate(&tsc2101_audio); + return ret; +} + +static void __exit tsc2101_exit(void) +{ + platform_driver_unregister(&tsc2101_driver); + printk(KERN_INFO "TSC2101 Driver Unregistered. \n"); + /* Sound driver */ + // snd_pxa2xx_i2sound_card_deactivate(); +} + +module_init(tsc2101_init); +module_exit(tsc2101_exit); + +MODULE_LICENSE("GPL"); === drivers/video/Kconfig ================================================================== --- drivers/video/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/video/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -1439,6 +1439,18 @@ source "drivers/video/omap/Kconfig" +config FB_COWON + tristate "Cowon A2 (DM320) framebuffer support" + depends on FB && ARCH_ITDM3XX + help + This is the frame buffer device driver for the Cowon A2 frame + buffer. This driver in fact interfaces with the TMS320DM320 + OSD module, which is also found in the Olympus m:robe 500i and the + Neuros Technologies OSD. + + To compile this driver as a module, choose M here: the + module will be called cowonfb. + config FB_VIRTUAL tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)" depends on FB === drivers/video/Makefile ================================================================== --- drivers/video/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/video/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -104,3 +104,4 @@ # the test framebuffer is last obj-$(CONFIG_FB_VIRTUAL) += vfb.o +obj-$(CONFIG_FB_COWON) += cowonfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o === drivers/video/cowonfb.c ================================================================== --- drivers/video/cowonfb.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ drivers/video/cowonfb.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -0,0 +1,486 @@ +/* + * linux/drivers/video/cowonfb.c + * + * Copyright (C) Junho CHA . + * Copyright (C) 2007 Catalin Patulea . + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive for + * more details. + * + * Cowon A2 (DM320 OSD) Frame Buffer Driver + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +MODULE_AUTHOR("Junho CHA "); +MODULE_DESCRIPTION("COWON Frame Buffer Driver"); +MODULE_LICENSE("GPL"); + +static int cowonfb_init(void); + +static int cowonfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info); +static int cowonfb_set_par(struct fb_info *info); +static int cowonfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info); +static int cowonfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info); +static int cowonfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma); +static ssize_t cowonfb_write(struct file *file, const char *buf, size_t count, loff_t *ppos); +static ssize_t cowonfb_read(struct file *file, char *buf, size_t count, loff_t *ppos); + +static u_long get_line_length(int xres_virtual, int bpp) +{ + u_long length; + + length = xres_virtual * bpp; + length = (length + 31) & ~31; + length >>= 3; + return (length); +} + +static int cowonfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) +{ + u_long line_length; + + if (var->vmode & FB_VMODE_CONUPDATE) { + var->vmode |= FB_VMODE_YWRAP; + var->xoffset = info->var.xoffset; + var->yoffset = info->var.yoffset; + } + + if (!var->xres) + var->xres = 1; + if (!var->yres) + var->yres = 1; + if (var->xres > var->xres_virtual) + var->xres_virtual = var->xres; + if (var->yres > var->yres_virtual) + var->yres_virtual = var->yres; + if (var->bits_per_pixel <= 1) + var->bits_per_pixel = 1; + else if (var->bits_per_pixel <= 8) + var->bits_per_pixel = 8; + else if (var->bits_per_pixel <= 16) + var->bits_per_pixel = 16; + else if (var->bits_per_pixel <= 24) + var->bits_per_pixel = 24; + else if (var->bits_per_pixel <= 32) + var->bits_per_pixel = 32; + else + return -EINVAL; + + if (var->xres_virtual < var->xoffset + var->xres) + var->xres_virtual = var->xoffset + var->xres; + if (var->yres_virtual < var->yoffset + var->yres) + var->yres_virtual = var->yoffset + var->yres; + + line_length = get_line_length(var->xres_virtual, var->bits_per_pixel); + if (line_length * var->yres_virtual > info->fix.smem_len) + return -ENOMEM; + + switch (var->bits_per_pixel) { + case 1: + case 8: + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 0; + var->green.length = 8; + var->blue.offset = 0; + var->blue.length = 8; + var->transp.offset = 0; + var->transp.length = 0; + break; + case 16: /* RGBA 5551 */ + if (var->transp.length) { + var->red.offset = 10; + var->red.length = 5; + var->green.offset = 5; + var->green.length = 5; + var->blue.offset = 0; + var->blue.length = 5; + var->transp.offset = 15; + var->transp.length = 1; + } else { /* RGB 565 */ + var->red.offset = 11; + var->red.length = 5; + var->green.offset = 5; + var->green.length = 6; + var->blue.offset = 0; + var->blue.length = 5; + var->transp.offset = 0; + var->transp.length = 0; + } + break; + case 24: /* RGB 888 */ + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 8; + var->green.length = 8; + var->blue.offset = 16; + var->blue.length = 8; + var->transp.offset = 0; + var->transp.length = 0; + break; + case 32: /* RGBA 8888 */ + var->red.offset = 0; + var->red.length = 8; + var->green.offset = 8; + var->green.length = 8; + var->blue.offset = 16; + var->blue.length = 8; + var->transp.offset = 24; + var->transp.length = 8; + break; + } + var->red.msb_right = 0; + var->green.msb_right = 0; + var->blue.msb_right = 0; + var->transp.msb_right = 0; + + return 0; +} +static int cowonfb_set_par(struct fb_info *info) +{ + info->fix.line_length = get_line_length(info->var.xres_virtual, info->var.bits_per_pixel); + return 0; +} + +static int cowonfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) +{ + unsigned int tmp=0; + if (regno >= 256) /* no. of hw registers */ + return 1; + + if (info->var.grayscale) { + /* grayscale = 0.30*R + 0.59*G + 0.11*B */ + red = green = blue = (red * 77 + green * 151 + blue * 28) >> 8; + } +#define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16) + switch (info->fix.visual) { + case FB_VISUAL_TRUECOLOR: + case FB_VISUAL_PSEUDOCOLOR: + red = CNVT_TOHW(red, info->var.red.length); + green = CNVT_TOHW(green, info->var.green.length); + blue = CNVT_TOHW(blue, info->var.blue.length); + transp = CNVT_TOHW(transp, info->var.transp.length); + break; + case FB_VISUAL_DIRECTCOLOR: + red = CNVT_TOHW(red, 8); /* expect 8 bit DAC */ + green = CNVT_TOHW(green, 8); + blue = CNVT_TOHW(blue, 8); + /* hey, there is bug in transp handling... */ + transp = CNVT_TOHW(transp, 8); + break; + } +#undef CNVT_TOHW + /* Truecolor has hardware independent palette */ + + if (info->fix.visual == FB_VISUAL_TRUECOLOR) { + if (regno >= 16) + return 1; + tmp = (red << info->var.red.offset) | (green << info->var.green.offset) | (blue << info->var.blue.offset) | (transp << info->var.transp.offset); + switch (info->var.bits_per_pixel) { + case 8: + break; + case 16: + ((u32 *) (info->pseudo_palette))[regno] = tmp; + break; + case 24: + case 32: + ((u32 *) (info->pseudo_palette))[regno] = tmp; + break; + } + return 0; + } + else if(info->fix.visual == FB_VISUAL_PSEUDOCOLOR) { + tmp = (red << info->var.red.offset) | (green << info->var.green.offset) | (blue << info->var.blue.offset) | (transp << info->var.transp.offset); + switch(info->var.bits_per_pixel) { + case 16: + ((u32 *) (info->pseudo_palette))[regno] = tmp; + break; + } + return 0; + } + return 0; +} +static int cowonfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) +{ + if (var->vmode & FB_VMODE_YWRAP) { + if (var->yoffset < 0 || var->yoffset >= info->var.yres_virtual || var->xoffset) + return -EINVAL; + } else { + if (var->xoffset + var->xres > info->var.xres_virtual || var->yoffset + var->yres > info->var.yres_virtual) + return -EINVAL; + } + info->var.xoffset = var->xoffset; + info->var.yoffset = var->yoffset; + if (var->vmode & FB_VMODE_YWRAP) + info->var.vmode |= FB_VMODE_YWRAP; + else + info->var.vmode &= ~FB_VMODE_YWRAP; + return 0; +} + +static int cowonfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma) +{ + unsigned long size = vma->vm_end - vma->vm_start; + unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; + int res; + + if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) + return -EINVAL; + if (offset + size > info->fix.smem_len) + return -EINVAL; + offset += info->fix.smem_start; + pgprot_val(vma->vm_page_prot) |= 0x010; + vma->vm_flags |= VM_IO; + +//DNZ + res = remap_pfn_range(vma, vma->vm_start, __phys_to_pfn(offset), size, + vma->vm_page_prot); + if (res) + { + printk("cowonfb: remap_pfn_range() returned %i\n", res); + return -EAGAIN; + } +//DNZ + + vma->vm_file = file; + return 0; +} +static ssize_t cowonfb_write(struct file *file, const char *buf, size_t count, loff_t *ppos) +{ + unsigned long p = *ppos; + struct inode *inode = file->f_dentry->d_inode; + int fbidx = iminor(inode); + struct fb_info *info = registered_fb[fbidx]; + int err; + + if (!info || !info->screen_base) + return -ENODEV; + + if (info->state != FBINFO_STATE_RUNNING) + return -EPERM; + + if (p > info->fix.smem_len) + return -ENOSPC; + if (count >= info->fix.smem_len) + count = info->fix.smem_len; + err = 0; + if (count + p > info->fix.smem_len) { + count = info->fix.smem_len - p; + err = -ENOSPC; + } + if (info->fbops->fb_sync) + info->fbops->fb_sync(info); + if (count) { + char *base_addr; + + base_addr = info->screen_base; + count -= copy_from_user(base_addr+p, buf, count); + *ppos += count; + err = -EFAULT; + } + + if (count) + return count; + return err; +} + +static ssize_t cowonfb_read(struct file *file, char *buf, size_t count, loff_t *ppos) +{ + unsigned long p = *ppos; + struct inode *inode = file->f_dentry->d_inode; + int fbidx = iminor(inode); + struct fb_info *info = registered_fb[fbidx]; + + if (!info || ! info->screen_base) + return -ENODEV; + + if (info->state != FBINFO_STATE_RUNNING) + return -EPERM; + + if (p >= info->fix.smem_len) + return 0; + if (count >= info->fix.smem_len) + count = info->fix.smem_len; + if (count + p > info->fix.smem_len) + count = info->fix.smem_len - p; + if (info->fbops->fb_sync) + info->fbops->fb_sync(info); + if (count) { + char *base_addr; + + base_addr = info->screen_base; + count -= copy_to_user(buf, base_addr+p, count); + if (!count) + return -EFAULT; + *ppos += count; + } + return count; +} + +static struct fb_ops cowonfb_ops = { + .fb_check_var = cowonfb_check_var, + .fb_set_par = cowonfb_set_par, + .fb_setcolreg = cowonfb_setcolreg, + .fb_pan_display = cowonfb_pan_display, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, +//DNZ +#ifdef CONFIG_FB_SOFT_CURSOR + .fb_cursor = soft_cursor, +#endif +//DNZ + .fb_mmap = cowonfb_mmap, + .fb_write = cowonfb_write, + .fb_read = cowonfb_read, +}; + +static u32 cowonfb_pseudo_palette[17]; + +static struct fb_info fb_info = { + .flags = FBINFO_FLAG_DEFAULT, + .var = { + .xres = 480, + .yres = 640, + .xres_virtual = 480, + .yres_virtual = 640, + + .xoffset = 0, + .yoffset = 0, + .bits_per_pixel = 16, + + .grayscale = 0, + + .red = { 11, 5, 0 }, + .green = { 5, 6, 0 }, + .blue = { 0, 5, 0 }, + .transp = { 0 , 0, 0 }, + + .nonstd = 1, + .activate = FB_ACTIVATE_NOW, + .height = -1, + .width = -1, + .accel_flags = FB_ACCELF_TEXT, + .pixclock = 9000000, + .left_margin = 0, + .right_margin = 0, + .upper_margin = 0, + .lower_margin = 0, + .hsync_len = 1, + .vsync_len = 1, + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, + .vmode = FB_VMODE_NONINTERLACED, + }, + .fix = { + .id = "Cowon FB", + .smem_start = 0x04500000, + .smem_len = 0x00400000, + .type = FB_TYPE_PACKED_PIXELS, + .visual = FB_VISUAL_TRUECOLOR, + .xpanstep = 1, + .ypanstep = 0, + .ywrapstep = 0, + .line_length = 480 * 2, + .accel = FB_ACCEL_NONE, + }, + .fbops = &cowonfb_ops, + .pseudo_palette = &cowonfb_pseudo_palette, +}; + +static int __init cowonfb_init(void) +{ + int res; + u32 addr; + + printk(KERN_INFO "cowonfb version " __DATE__ "\n"); + + fb_info.screen_base = ioremap_nocache( + (unsigned long)fb_info.fix.smem_start, fb_info.fix.smem_len); + if (!fb_info.screen_base) { + printk("cowonfb: ioremap_nocache() failed\n"); + return -ENOMEM; + } + + res = fb_alloc_cmap(&fb_info.cmap, 16, 0); + if (res < 0) { + return res; + } + + res = register_framebuffer(&fb_info); + if (res) { + printk("cowonfb: register_framebuffer() returned %i\n", res); + return res; + } + + /* Clear framebuffer */ + memzero(fb_info.screen_base, fb_info.fix.smem_len); + + /* Configure DM320 OSD module */ + /* As configured by Olympus m:robe 500i firmware: + IO_OSD_MODE = 0x00ff + IO_OSD_VIDWINMD = 0x0002 + IO_OSD_OSDWINMD0 = 0x2003 + IO_OSD_OSDWINMD1 = 0x0002 + IO_OSD_ATRMD = 0x0000 + IO_OSD_RECTCUR = 0x0000 + IO_OSD_OSDWINADH = 0x1a1b + IO_OSD_OSDWIN0ADL = 0x0577 + IO_OSD_BASEPX = 0x0050 + IO_OSD_BASEPY = 0x0002 + IO_OSD_OSDWIN0XP = 0x0000 + IO_OSD_OSDWIN0YP = 0x0000 + IO_OSD_OSDWIN0XL = 0x01e0 + IO_OSD_OSDWIN0YL = 0x0280 + */ + outw(0x00ff, IO_OSD_MODE); + outw(0x0002, IO_OSD_VIDWINMD); + outw(0x2001, IO_OSD_OSDWINMD0); + outw(0x0002, IO_OSD_OSDWINMD1); + outw(0x0000, IO_OSD_ATRMD); + outw(0x0000, IO_OSD_RECTCUR); + + outw(fb_info.fix.line_length / 32, IO_OSD_OSDWIN0OFST); + + addr = (fb_info.fix.smem_start - CONFIG_SDRAM_START) / 32; + outw(addr >> 16, IO_OSD_OSDWINADH); + outw(addr & 0xFFFF, IO_OSD_OSDWIN0ADL); + + outw(80, IO_OSD_BASEPX); + outw(2, IO_OSD_BASEPY); + + outw(0, IO_OSD_OSDWIN0XP); + outw(0, IO_OSD_OSDWIN0YP); + outw(fb_info.var.xres, IO_OSD_OSDWIN0XL); + outw(fb_info.var.yres, IO_OSD_OSDWIN0YL); + + return 0; +} + +static void __exit cowonfb_cleanup(void) +{ + /* Disable OSD window */ + outw(0, IO_OSD_OSDWINMD0); + + unregister_framebuffer(&fb_info); + + if (fb_info.screen_base) + iounmap(fb_info.screen_base); +} + +module_init(cowonfb_init); +module_exit(cowonfb_cleanup); === fs/Kconfig ================================================================== --- fs/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ fs/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -1288,6 +1288,16 @@ Say Y here if you want to try writing to UFS partitions. This is experimental, so you should back up your UFS partitions beforehand. +config UNION_FS + tristate "Union fs support" + depends on EXPERIMENTAL + help + Unionfs is a stackable unification file system, which can + appear to merge the contents of several directories (branches), + while keeping their physical content separate. + + see for details + endmenu menu "Network File Systems" === fs/Makefile ================================================================== --- fs/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ fs/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -101,3 +101,4 @@ obj-$(CONFIG_HOSTFS) += hostfs/ obj-$(CONFIG_HPPFS) += hppfs/ obj-$(CONFIG_DEBUG_FS) += debugfs/ +obj-$(CONFIG_UNION_FS) += unionfs/ === include/asm-arm/arch-itdm320-20/debug-macro.S ================================================================== --- include/asm-arm/arch-itdm320-20/debug-macro.S (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/asm-arm/arch-itdm320-20/debug-macro.S (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -10,35 +10,6 @@ * published by the Free Software Foundation. * */ - -/* ISOFT_PORT */ - -#if 0 - - .macro senduart,rd,rx - strb \rd, [\rx] - .endm - - .macro busyuart,rd,rx - .endm - - .macro waituart,rd,rx - .endm - - .macro addruart,rx - mrc p15, 0, \rx, c1, c0 - tst \rx, #1 - - ldreq \rx, =IO_START @ Physical IO Base - ldrne \rx, =IO_BASE @ Virtual IO Base - -@ orr \rx, \rx, #PHY_IO_BASE @ Offset into Virtual, or nothing - orr \rx, \rx, #IO_UART0_DTRR @ UART0 base - .endm - -#endif - -#if 1 #include .macro addruart,rx @@ -49,7 +20,7 @@ ldrne \rx, =IO_BASE @ Virtual IO Base @ orr \rx, \rx, #PHY_IO_BASE @ Offset into Virtual, or nothing - orr \rx, \rx, #IO_UART0_DTRR @ UART0 base + orr \rx, \rx, #IO_UART1_DTRR @ UART0 base .endm .macro senduart,rd,rx @@ -65,7 +36,5 @@ .macro busyuart,rd,rx 1002: ldrh \rd, [\rx, #0x0c] @ UARTx_SR Offset tst \rd, #0x0001 @ Check TX empty bit - bne 1002b @ loop til 0=TX fifo empty + beq 1002b @ loop til 0=TX fifo empty .endm -#endif - === include/asm-arm/arch-ntosd-dm320/debug-macro.S ================================================================== --- include/asm-arm/arch-ntosd-dm320/debug-macro.S (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/asm-arm/arch-ntosd-dm320/debug-macro.S (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -11,34 +11,6 @@ * */ -/* ISOFT_PORT */ - -#if 0 - - .macro senduart,rd,rx - strb \rd, [\rx] - .endm - - .macro busyuart,rd,rx - .endm - - .macro waituart,rd,rx - .endm - - .macro addruart,rx - mrc p15, 0, \rx, c1, c0 - tst \rx, #1 - - ldreq \rx, =IO_START @ Physical IO Base - ldrne \rx, =IO_BASE @ Virtual IO Base - -@ orr \rx, \rx, #PHY_IO_BASE @ Offset into Virtual, or nothing - orr \rx, \rx, #IO_UART0_DTRR @ UART0 base - .endm - -#endif - -#if 1 #include .macro addruart,rx @@ -49,7 +21,7 @@ ldrne \rx, =IO_BASE @ Virtual IO Base @ orr \rx, \rx, #PHY_IO_BASE @ Offset into Virtual, or nothing - orr \rx, \rx, #IO_UART0_DTRR @ UART0 base + orr \rx, \rx, #IO_UART1_DTRR @ UART1 base .endm .macro senduart,rd,rx @@ -65,7 +37,5 @@ .macro busyuart,rd,rx 1002: ldrh \rd, [\rx, #0x0c] @ UARTx_SR Offset tst \rd, #0x0001 @ Check TX empty bit - bne 1002b @ loop til 0=TX fifo empty + beq 1002b @ loop til 1=TX fifo empty .endm -#endif - === include/asm-arm/arch-ntosd-dm320/gios.h ================================================================== --- include/asm-arm/arch-ntosd-dm320/gios.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/asm-arm/arch-ntosd-dm320/gios.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -1,42 +1,16 @@ #ifndef __ASM_ARCH_GIOS_H #define __ASM_ARCH_GIOS_H - -#define GIO_LED_1 16 -#define GIO_LED_2 17 -//#define GIO_LED_3 0 -//#define GIO_LED_4 0 - -//#ifdef CONFIG_INGENIENT_NAVIGATOR -#define GIO_NAV_SCANSEL 16 -#define GIO_NAV_RIGHT 1 -#define GIO_NAV_UP 2 -#define GIO_NAV_LEFT 3 -#define GIO_NAV_DOWN 4 -#define GIO_NAV_SEL 5 -//#endif -//#define GIO_HDD_HOTPLUG 2 -#define GIO_ETHER 6 -//#define GIO_HDD 7 -//#define GIO_USB_ENABLE 0 -#define GIO_AIC23_FREQ 12//18 -#define GIO_PLL_FS1 12 -//#define GIO_PLL_FS2 13 -//#define GIO_PLL_SR 14 -//#define GIO_AUD_ENA 21 /* Neuros DevB: Power up audio HW */ - -#define GIO_I2C_SCL 30 -#define GIO_I2C_SDA 31 -#define GIO_CFC_HOTPLUG 25 +#define GIO_POWER_BTN 0 +#define GIO_USBC_ENABLE 2 +#define GIO_USBC_INT 3 +#define GIO_USB_VBUS 8 +#define GIO_HDD_INT 11 +#define GIO_TS_INT 14 +#define GIO_TS_ENABLE 18 #define GIO_UART1_RXD 27 #define GIO_UART1_TXD 28 -#define GIO_CFC_RESET 36 -#define GIO_CFC_DETECT 9 -//#define GIO_FIELD_ID 39 +#define GIO_I2C_SCL 30 +#define GIO_I2C_SDA 31 -//#define GIO_VIDEO_IN 10 - -#define GIO_SD_CARDDETECT 8 -#define GIO_SDCARD_WP 35 - #endif === include/asm-arm/arch-ntosd-dm320/io_registers.h ================================================================== --- include/asm-arm/arch-ntosd-dm320/io_registers.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/asm-arm/arch-ntosd-dm320/io_registers.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -203,9 +203,8 @@ #define IO_OSD_VIDWINMD 0x0682 #define IO_OSD_OSDWINMD0 0x0684 #define IO_OSD_OSDWINMD1 0x0686 -//#define IO_OSD_ATRMD 0x0688 +#define IO_OSD_ATRMD 0x0688 #define IO_OSD_RECTCUR 0x0688 -#define IO_OSD_RESERVED 0x068A #define IO_OSD_VIDWIN0OFST 0x068C #define IO_OSD_VIDWIN1OFST 0x068E #define IO_OSD_OSDWIN0OFST 0x0690 === include/asm-arm/arch-ntosd-dm320/uncompress.h ================================================================== --- include/asm-arm/arch-ntosd-dm320/uncompress.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/asm-arm/arch-ntosd-dm320/uncompress.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -60,7 +60,8 @@ unsigned short sr; }; -static struct uart_registers* itdm320_uart = (struct uart_registers*) (PHY_IO_BASE | IO_UART0_DTRR); +static struct uart_registers* itdm320_uart = (struct uart_registers *) + (PHY_IO_BASE | IO_UART1_DTRR); static void itdm320_putc(const char data) { === include/linux/i2c.h ================================================================== --- include/linux/i2c.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/linux/i2c.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -191,6 +191,11 @@ using common I2C messages */ int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs, int num); +//DNZ +#ifdef CONFIG_ARCH_ITDM3XX + int (*FM_xfer)(struct i2c_adapter *adap,struct i2c_msg msgs[], int num); +#endif +//DNZ int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, unsigned short flags, char read_write, u8 command, int size, union i2c_smbus_data * data); === include/linux/ssi/tsc2101.h ================================================================== --- include/linux/ssi/tsc2101.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ include/linux/ssi/tsc2101.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -0,0 +1,232 @@ +/* + * TI TSC2101 Hardware definitions + * + * Copyright 2005 Openedhand Ltd. + * + * Author: Richard Purdie + * + * 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. + * + */ + +/* Address constructs */ +#define TSC2101_READ (1 << 15) /* Read Register */ +#define TSC2101_WRITE (0 << 15) /* Write Register */ +#define TSC2101_PAGE(x) ((x & 0xf) << 11) /* Memory Page to access */ +#define TSC2101_ADDR(x) ((x & 0x3f) << 5) /* Memory Address to access */ + +#define TSC2101_P0_REG(x) (TSC2101_PAGE(0) | TSC2101_ADDR(x)) +#define TSC2101_P1_REG(x) (TSC2101_PAGE(1) | TSC2101_ADDR(x)) +#define TSC2101_P2_REG(x) (TSC2101_PAGE(2) | TSC2101_ADDR(x)) +#define TSC2101_P3_REG(x) (TSC2101_PAGE(3) | TSC2101_ADDR(x)) + +/* Page 0 Registers */ +#define TSC2101_REG_X TSC2101_P0_REG(0x0) +#define TSC2101_REG_Y TSC2101_P0_REG(0x1) +#define TSC2101_REG_Z1 TSC2101_P0_REG(0x2) +#define TSC2101_REG_Z2 TSC2101_P0_REG(0x3) +#define TSC2101_REG_BAT TSC2101_P0_REG(0x5) +#define TSC2101_REG_AUX1 TSC2101_P0_REG(0x7) +#define TSC2101_REG_AUX2 TSC2101_P0_REG(0x8) +#define TSC2101_REG_TEMP1 TSC2101_P0_REG(0x9) +#define TSC2101_REG_TEMP2 TSC2101_P0_REG(0xa) + +/* Page 1 Registers */ +#define TSC2101_REG_ADC TSC2101_P1_REG(0x0) +#define TSC2101_REG_STATUS TSC2101_P1_REG(0x1) +#define TSC2101_REG_BUFMODE TSC2101_P1_REG(0x2) +#define TSC2101_REG_REF TSC2101_P1_REG(0x3) +#define TSC2101_REG_RESETCTL TSC2101_P1_REG(0x4) +#define TSC2101_REG_CONFIG TSC2101_P1_REG(0x5) +#define TSC2101_REG_TEMPMAX TSC2101_P1_REG(0x6) +#define TSC2101_REG_TEMPMIN TSC2101_P1_REG(0x7) +#define TSC2101_REG_AUX1MAX TSC2101_P1_REG(0x8) +#define TSC2101_REG_AUX1MIN TSC2101_P1_REG(0x9) +#define TSC2101_REG_AUX2MAX TSC2101_P1_REG(0xa) +#define TSC2101_REG_AUX2MIN TSC2101_P1_REG(0xb) +#define TSC2101_REG_MEASURE TSC2101_P1_REG(0xc) +#define TSC2101_REG_DELAY TSC2101_P1_REG(0xd) + +/* Page 2 Registers */ +#define TSC2101_REG_AUDIOCON1 TSC2101_P2_REG(0x0) +#define TSC2101_REG_HEADSETPGA TSC2101_P2_REG(0x1) +#define TSC2101_REG_DACPGA TSC2101_P2_REG(0x2) +#define TSC2101_REG_MIXERPGA TSC2101_P2_REG(0x3) +#define TSC2101_REG_AUDIOCON2 TSC2101_P2_REG(0x4) +#define TSC2101_REG_PWRDOWN TSC2101_P2_REG(0x5) +#define TSC2101_REG_AUDIOCON3 TSC2101_P2_REG(0x6) +#define TSC2101_REG_DAEFC(x) TSC2101_P2_REG(0x7+x) +#define TSC2101_REG_PLL1 TSC2101_P2_REG(0x1b) +#define TSC2101_REG_PLL2 TSC2101_P2_REG(0x1c) +#define TSC2101_REG_AUDIOCON4 TSC2101_P2_REG(0x1d) +#define TSC2101_REG_HANDSETPGA TSC2101_P2_REG(0x1e) +#define TSC2101_REG_BUZZPGA TSC2101_P2_REG(0x1f) +#define TSC2101_REG_AUDIOCON5 TSC2101_P2_REG(0x20) +#define TSC2101_REG_AUDIOCON6 TSC2101_P2_REG(0x21) +#define TSC2101_REG_AUDIOCON7 TSC2101_P2_REG(0x22) +#define TSC2101_REG_GPIO TSC2101_P2_REG(0x23) +#define TSC2101_REG_AGCCON TSC2101_P2_REG(0x24) +#define TSC2101_REG_DRVPWRDWN TSC2101_P2_REG(0x25) +#define TSC2101_REG_MICAGC TSC2101_P2_REG(0x26) +#define TSC2101_REG_CELLAGC TSC2101_P2_REG(0x27) + +/* Page 3 Registers */ +#define TSC2101_REG_BUFLOC(x) TSC2101_P3_REG(x) + +/* Status Register Masks */ + +#define TSC2101_STATUS_T2STAT (1 << 1) +#define TSC2101_STATUS_T1STAT (1 << 2) +#define TSC2101_STATUS_AX2STAT (1 << 3) +#define TSC2101_STATUS_AX1STAT (1 << 4) +#define TSC2101_STATUS_BSTAT (1 << 6) +#define TSC2101_STATUS_Z2STAT (1 << 7) +#define TSC2101_STATUS_Z1STAT (1 << 8) +#define TSC2101_STATUS_YSTAT (1 << 9) +#define TSC2101_STATUS_XSTAT (1 << 10) +#define TSC2101_STATUS_DAVAIL (1 << 11) +#define TSC2101_STATUS_HCTLM (1 << 12) +#define TSC2101_STATUS_PWRDN (1 << 13) +#define TSC2101_STATUS_PINTDAV_SHIFT (14) +#define TSC2101_STATUS_PINTDAV_MASK (0x03) + + + + + + + +#define TSC2101_ADC_PSM (1<<15) // pen status mode on ctrlreg adc +#define TSC2101_ADC_STS (1<<14) // stop continuous scanning. +#define TSC2101_ADC_AD3 (1<<13) +#define TSC2101_ADC_AD2 (1<<12) +#define TSC2101_ADC_AD1 (1<<11) +#define TSC2101_ADC_AD0 (1<<10) +#define TSC2101_ADC_ADMODE(x) ((x<<10) & TSC2101_ADC_ADMODE_MASK) +#define TSC2101_ADC_ADMODE_MASK (0xf<<10) + +#define TSC2101_ADC_RES(x) ((x<<8) & TSC2101_ADC_RES_MASK ) +#define TSC2101_ADC_RES_MASK (0x3<<8) +#define TSC2101_ADC_RES_12BITP (0) // 12-bit ADC resolution (default) +#define TSC2101_ADC_RES_8BIT (1) // 8-bit ADC resolution +#define TSC2101_ADC_RES_10BIT (2) // 10-bit ADC resolution +#define TSC2101_ADC_RES_12BIT (3) // 12-bit ADC resolution + +#define TSC2101_ADC_AVG(x) ((x<<6) & TSC2101_ADC_AVG_MASK ) +#define TSC2101_ADC_AVG_MASK (0x3<<6) +#define TSC2101_ADC_NOAVG (0) // a-d does no averaging +#define TSC2101_ADC_4AVG (1) // a-d does averaging of 4 samples +#define TSC2101_ADC_8AVG (2) // a-d does averaging of 8 samples +#define TSC2101_ADC_16AVG (3) // a-d does averaging of 16 samples + +#define TSC2101_ADC_CL(x) ((x<<4) & TSC2101_ADC_CL_MASK ) +#define TSC2101_ADC_CL_MASK (0x3<<4) +#define TSC2101_ADC_CL_8MHZ_8BIT (0) +#define TSC2101_ADC_CL_4MHZ_10BIT (1) +#define TSC2101_ADC_CL_2MHZ_12BIT (2) +#define TSC2101_ADC_CL_1MHZ_12BIT (3) +#define TSC2101_ADC_CL0 (1<< 4) + +/* ADC - Panel Voltage Stabilisation Time */ +#define TSC2101_ADC_PV(x) ((x<<1) & TSC2101_ADC_PV_MASK ) +#define TSC2101_ADC_PV_MASK (0x7<<1) +#define TSC2101_ADC_PV_100ms (0x7) /* 100ms */ +#define TSC2101_ADC_PV_50ms (0x6) /* 50ms */ +#define TSC2101_ADC_PV_10ms (0x5) /* 10ms */ +#define TSC2101_ADC_PV_5ms (0x4) /* 5ms */ +#define TSC2101_ADC_PV_1ms (0x3) /* 1ms */ +#define TSC2101_ADC_PV_500us (0x2) /* 500us */ +#define TSC2101_ADC_PV_100us (0x1) /* 100us */ +#define TSC2101_ADC_PV_0s (0x0) /* 0s */ + +#define TSC2101_ADC_AVGFILT_MEAN (0<<0) /* Mean Average Filter */ +#define TSC2101_ADC_AVGFILT_MEDIAN (1<<0) /* Median Average Filter */ + +#define TSC2101_ADC_x (1<< 0) // don't care + +#define TSC2101_CONFIG_DAV (1<<6) + +#define TSC2101_KEY_STC (1<<15) // keypad status +#define TSC2101_KEY_SCS (1<<14) // keypad scan status + + +/* Sound */ +#define TSC2101_DACFS(x) ((x & 0x07) << 3) +#define TSC2101_ADCFS(x) (x & 0x07) +#define TSC2101_REFFS (1 << 13) +#define TSC2101_DAXFM (1 << 12) +#define TSC2101_SLVMS (1 << 11) +#define TSC2101_PLL_ENABLE (1 << 15) +#define TSC2101_PLL_QVAL(x) (x << 11) +#define TSC2101_PLL_PVAL(x) (x << 8) +#define TSC2101_PLL_JVAL(x) (x << 2) +#define TSC2101_PLL2_DVAL(x) (x << 2) + +#define TSC2101_ADMUT_HED (1 << 15) +#define TSC2101_ADPGA_HED(x) ((x & 0x7F) << 8) +#define TSC2101_ADPGA_HEDI(x) ((x >> 8) & 0x7F) + +#define TSC2101_ADMUT_HND (1 << 15) +#define TSC2101_ADPGA_HND(x) ((x & 0x7F) << 8) +#define TSC2101_ADPGA_HNDI(x) ((x >> 8) & 0x7F) + +#define TSC2101_DALMU (1 << 15) +#define TSC2101_DALVL(x) (((x) & 0x7F) << 8) +#define TSC2101_DALVLI(x) (((x) >> 8) & 0x7F) +#define TSC2101_DARMU (1 << 7) +#define TSC2101_DARVL(x) ((x) & 0x7F) +#define TSC2101_DARVLI(x) ((x) & 0x7F) + +#define TSC2101_ASTMU (1 << 15) +#define TSC2101_ASTG(x) (x << 8) +#define TSC2101_MICADC (1 << 4) +#define TSC2101_MICSEL(x) (x << 5) +#define TSC2101_MB_HED(x) ((x & 0x02) << 7) +#define TSC2101_MB_HND (1 << 6) +#define TSC2101_ADSTPD (1 << 15) +#define TSC2101_DASTPD (1 << 14) +#define TSC2101_ASSTPD (1 << 13) +#define TSC2101_CISTPD (1 << 12) +#define TSC2101_BISTPD (1 << 11) +#define TSC2101_DAC2SPK1(x) ((x & 0x03) << 13) +#define TSC2101_DAC2SPK2(x) ((x & 0x03) << 7) +#define TSC2101_AST2SPK1 (1 << 12) +#define TSC2101_AST2SPK2 (1 << 6) +#define TSC2101_KCL2SPK1 (1 << 10) +#define TSC2101_KCL2SPK2 (1 << 4) +#define TSC2101_HDSCPTC (1 << 0) + +#define TSC2101_MUTLSPK (1 << 7) +#define TSC2101_MUTCELL (1 << 6) +#define TSC2101_LDSCPTC (1 << 5) +#define TSC2101_VGNDSCPTC (1 << 4) +#define TSC2101_CAPINTF (1 << 3) +#define TSC2101_SPL2LSK (1 << 15) + +#define TSC2101_HDDETFL (1 << 12) +#define TSC2101_MUTSPK1 (1 << 2) +#define TSC2101_MUTSPK2 (1 << 1) + +#define TSC2101_DETECT (1 << 15) +#define TSC2101_HDDEBNPG(x) ((x & 0x03) << 9) +#define TSC2101_DGPIO2 (1 << 4) + +#define TSC2101_MBIAS_HND (1 << 15) +#define TSC2101_MBIAS_HED (1 << 14) +#define TSC2101_ASTPWD (1 << 13) +#define TSC2101_SPI1PWDN (1 << 12) +#define TSC2101_SPI2PWDN (1 << 11) +#define TSC2101_DAPWDN (1 << 10) +#define TSC2101_ADPWDN (1 << 9) +#define TSC2101_VGPWDN (1 << 8) +#define TSC2101_COPWDN (1 << 7) +#define TSC2101_LSPWDN (1 << 6) +#define TSC2101_EFFCTL (1 << 1) + +#define TSC2101_MMPGA(x) ((x & 0x7F) << 9) +#define TSC2101_MDEBNS(x) ((x & 0x07) << 6) +#define TSC2101_MDEBSN(x) ((x & 0x07) << 3) + +#define FLAG_HEADPHONES 0x01 === sound/oss/Kconfig ================================================================== --- sound/oss/Kconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ sound/oss/Kconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -7,13 +7,13 @@ config SOUND_OMAP tristate "OMAP Sound Driver" - depends on SOUND_PRIME!=n && SOUND && ARCH_OMAP + depends on SOUND_PRIME!=n && SOUND && (ARCH_OMAP || ARCH_ITDM3XX) ---help--- OMAP Audio driver config SOUND_OMAP_TSC2101 tristate "TSC2101 Stereo Codec" - depends on SOUND_OMAP && ( MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4) + depends on SOUND_OMAP && ( MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4 || ARCH_ITDM3XX) select OMAP_TSC2101 if ( MACH_OMAP_H2 || MACH_OMAP_H3 ) select OMAP_UWIRE if ARCH_OMAP1 ---help--- === sound/oss/Makefile ================================================================== --- sound/oss/Makefile (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ sound/oss/Makefile (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -8,7 +8,6 @@ obj-$(CONFIG_SOUND_OSS) += sound.o obj-$(CONFIG_SOUND_CS4232) += cs4232.o ad1848.o -obj-$(CONFIG_SOUND_OMAP) += omap-audio-dma-intfc.o omap-audio.o obj-$(CONFIG_SOUND_OMAP_TSC2101)+= omap-audio-tsc2101.o obj-$(CONFIG_SOUND_OMAP_AIC23) += omap-audio-aic23.o === sound/oss/omap-audio-tsc2101.c ================================================================== --- sound/oss/omap-audio-tsc2101.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ sound/oss/omap-audio-tsc2101.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -41,21 +41,11 @@ #include #include -#include #include #include #include "omap-audio.h" #include "omap-audio-dma-intfc.h" -#include -#ifdef CONFIG_ARCH_OMAP16XX -#include <../drivers/ssi/omap-uwire.h> -#include -#elif defined(CONFIG_ARCH_OMAP24XX) -#else -#error "Unsupported configuration" -#endif - #include #include <../drivers/ssi/omap-tsc2101.h> @@ -91,10 +81,6 @@ /* Select the McBSP For Audio */ /* 16XX is MCBSP1 and 24XX is MCBSP2*/ /* see include/asm-arm/arch-omap/mcbsp.h */ -#ifndef AUDIO_MCBSP -#error "UnSupported Configuration" -#endif - #define REC_MASK (SOUND_MASK_LINE | SOUND_MASK_MIC) #define DEV_MASK (REC_MASK | SOUND_MASK_VOLUME) @@ -146,34 +132,6 @@ /***************************** Data Structures **********************************/ -static int audio_ifc_start(void) -{ - omap_mcbsp_start(AUDIO_MCBSP); - return 0; -} - -static int audio_ifc_stop(void) -{ - omap_mcbsp_stop(AUDIO_MCBSP); - return 0; -} - -static audio_stream_t output_stream = { - .id = "TSC2101 out", - .dma_dev = AUDIO_DMA_TX, - .input_or_output = FMODE_WRITE, - .hw_start = audio_ifc_start, - .hw_stop = audio_ifc_stop, -}; - -static audio_stream_t input_stream = { - .id = "TSC2101 in", - .dma_dev = AUDIO_DMA_RX, - .input_or_output = FMODE_READ, - .hw_start = audio_ifc_start, - .hw_stop = audio_ifc_stop, -}; - static int audio_dev_id, mixer_dev_id; typedef struct { @@ -228,33 +186,6 @@ {8000, 7, 0}, {7350, 7, 1}, }; - -static struct omap_mcbsp_reg_cfg initial_config = { - .spcr2 = FREE | FRST | GRST | XRST | XINTM(3), - .spcr1 = RINTM(3) | RRST, - .rcr2 = RPHASE | RFRLEN2(OMAP_MCBSP_WORD_8) | - RWDLEN2(OMAP_MCBSP_WORD_16) | RDATDLY(1), - .rcr1 = RFRLEN1(OMAP_MCBSP_WORD_8) | RWDLEN1(OMAP_MCBSP_WORD_16), - .xcr2 = XPHASE | XFRLEN2(OMAP_MCBSP_WORD_8) | - XWDLEN2(OMAP_MCBSP_WORD_16) | XDATDLY(1) | XFIG, - .xcr1 = XFRLEN1(OMAP_MCBSP_WORD_8) | XWDLEN1(OMAP_MCBSP_WORD_16), - .srgr1 = FWID(15), - .srgr2 = GSYNC | CLKSP | FSGM | FPER(31), - - /* platform specific initialization */ -#ifdef CONFIG_MACH_OMAP_H2 - .pcr0 = CLKXM | CLKRM | FSXP | FSRP | CLKXP | CLKRP, -#elif defined(CONFIG_MACH_OMAP_H3) || defined(CONFIG_MACH_OMAP_H4) - -#ifndef TSC_MASTER - .pcr0 = FSXM | FSRM | CLKXM | CLKRM | CLKXP | CLKRP, -#else - .pcr0 = CLKRM | SCLKME | FSXP | FSRP | CLKXP | CLKRP, -#endif /* tsc Master defs */ - -#endif /* platform specific inits */ -}; - /***************************** MODULES SPECIFIC FUNCTION PROTOTYPES ********************/ static void omap_tsc2101_initialize(void *dummy); @@ -315,9 +246,8 @@ /* To store characteristic info regarding the codec for the audio driver */ static audio_state_t tsc2101_state = { - .output_stream = &output_stream, - .input_stream = &input_stream, -/* .need_tx_for_rx = 1, //Once the Full Duplex works */ + .output_stream = NULL, + .input_stream = NULL, .need_tx_for_rx = 0, .hw_init = omap_tsc2101_initialize, .hw_shutdown = omap_tsc2101_shutdown, @@ -614,7 +544,6 @@ { u8 count = 0; u16 data = 0; - int clkgdv = 0; /* wait for any frame to complete */ udelay(125); @@ -676,13 +605,7 @@ initial_config.srgr2 = (CLKSM | FSGM | FPER(DEFAULT_BITPERSAMPLE * 2 - 1)); #else - initial_config.srgr1 = - (FWID(DEFAULT_BITPERSAMPLE - 1) | CLKGDV(clkgdv)); - initial_config.srgr2 = - ((GSYNC | CLKSP | FSGM | FPER(DEFAULT_BITPERSAMPLE * 2 - 1))); - #endif /* end of #ifdef TSC_MASTER */ - omap_mcbsp_config(AUDIO_MCBSP, &initial_config); return 0; } @@ -700,15 +623,8 @@ /* initialize with default sample rate */ audio_samplerate = AUDIO_RATE_DEFAULT; - omap_mcbsp_request(AUDIO_MCBSP); - - /* if configured, then stop mcbsp */ - omap_mcbsp_stop(AUDIO_MCBSP); - omap_tsc2101_enable(); - omap_mcbsp_config(AUDIO_MCBSP, &initial_config); - omap_mcbsp_start(AUDIO_MCBSP); tsc2101_configure(); #ifdef TEST_KEYCLICK @@ -741,9 +657,6 @@ set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(2); - omap_mcbsp_stop(AUDIO_MCBSP); - omap_mcbsp_free(AUDIO_MCBSP); - audio_tsc2101_write(TSC2101_CODEC_POWER_CTRL, ~(CPC_SP1PWDN | CPC_SP2PWDN | CPC_BASSBC)); @@ -944,13 +857,6 @@ { FN_IN; - /* Get the fops from audio oss driver */ - if (!(omap_audio_fops = audio_get_fops())) { - printk(KERN_ERR "Unable to Get the FOPs of Audio OSS driver\n"); - audio_unregister_codec(&tsc2101_state); - return -EPERM; - } - /* register devices */ audio_dev_id = register_sound_dsp(omap_audio_fops, -1); mixer_dev_id = register_sound_mixer(&omap_mixer_fops, -1); @@ -966,7 +872,7 @@ #endif /* Announcement Time */ - printk(KERN_INFO PLATFORM_NAME " " CODEC_NAME + printk(KERN_INFO " " CODEC_NAME " Audio support initialized\n"); FN_OUT(0); @@ -1031,11 +937,6 @@ if (machine_is_omap_osk() || machine_is_omap_innovator()) return -ENODEV; - /* register the codec with the audio driver */ - if ((err = audio_register_codec(&tsc2101_state))) { - printk(KERN_ERR - "Failed to register TSC driver with Audio OSS Driver\n"); - } FN_OUT(err); return err; } === sound/oss/omap-audio.c ================================================================== --- sound/oss/omap-audio.c (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ sound/oss/omap-audio.c (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -52,7 +52,7 @@ #include #include -#include "omap-audio-dma-intfc.h" +//#include "omap-audio-dma-intfc.h" #include "omap-audio.h" /***************************** MACROS ************************************/ @@ -126,7 +126,7 @@ static audio_state_t audio_state = { NULL }; /* DMA Call back function */ -static dma_callback_t audio_dma_callback = NULL; +//static dma_callback_t audio_dma_callback = NULL; /* File Ops structure */ static struct file_operations omap_audio_fops = { @@ -416,12 +416,13 @@ } /* Grab the dma Callback */ - audio_dma_callback = audio_get_dma_callback(); + + /* audio_dma_callback = audio_get_dma_callback(); if (!audio_dma_callback) { printk(KERN_ERR "Unable to get call back function\n"); return -EPERM; } - + */ /* Sanity checks */ if (!codec_state) { printk(KERN_ERR "NULL ARGUMENT!\n"); @@ -1046,11 +1047,12 @@ ((file->f_mode & FMODE_READ) && state->need_tx_for_rx)); if (state->wr_ref || (state->rd_ref && state->need_tx_for_rx)) need_tx_dma = 0; - if (need_tx_dma) { + /* if (need_tx_dma) { DMA_REQUEST(err, os, audio_dma_callback); if (err < 0) goto out; - } + }*/ + /* if (file->f_mode & FMODE_READ) { DMA_REQUEST(err, is, audio_dma_callback); if (err < 0) { @@ -1059,7 +1061,7 @@ goto out; } } - + */ /* now complete initialisation */ if (!AUDIO_ACTIVE(state)) { if (state->hw_init && !tsc2101_init_flag) { === sound/oss/omap-audio.h ================================================================== --- sound/oss/omap-audio.h (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ sound/oss/omap-audio.h (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -28,7 +28,7 @@ #define __OMAP_AUDIO_H /* Requires dma.h */ -#include +//#include /* * Buffer Management === mrobe_defconfig ================================================================== --- mrobe_defconfig (/neuros-bsp/trunk/kernels/linux-2.6.15) (revision 33) +++ mrobe_defconfig (/neuros-bsp/local-branches/mrobe-ts-fb-2/kernels/linux-2.6.15) (local) @@ -0,0 +1,763 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.15 +# Sun Jan 28 01:59:18 2007 +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_CALIBRATE_DELAY=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_HOTPLUG=y +CONFIG_KOBJECT_UEVENT=y +# CONFIG_IKCONFIG is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=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 +CONFIG_BASE_SMALL=0 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# 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_NTDEV_DM320 is not set +# CONFIG_ARCH_NTR3_DM320 is not set +CONFIG_ARCH_NTOSD_DM320=y +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_ITDM320_20 is not set +# CONFIG_ARCH_ITDM340_10 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_REALVIEW is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_TISOC is not set +CONFIG_ARCH_ITDM3XX=y + +# +# Neuros DMA Options +# +# CONFIG_DMA_NET is not set +CONFIG_DMA_HDD=y +CONFIG_INGENIENT_BSP=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set + +# +# Bus support +# +CONFIG_ISA_DMA_API=y + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_PREEMPT=y +# CONFIG_NO_IDLE_HZ is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +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_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y +# CONFIG_IPV6 is not set +# CONFIG_NETFILTER is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE DMA DaVinci Options +# +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_IDEDMA_PCI is not set +# CONFIG_BLK_DEV_IDE_PCI is not set +CONFIG_BLK_DEV_ITDM320_20_IDE_HDD=y +# CONFIG_BLK_DEV_ITDM320_20_IDE_CFC is not set +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_IDE_ARM is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_HD is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +# CONFIG_BLK_DEV_SD is not set +# 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 +# CONFIG_CHR_DEV_SCH 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 +# CONFIG_SCSI_SAS_ATTRS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=480 +CONFIG_INPUT_TSDEV_SCREEN_Y=640 +# CONFIG_INPUT_EVDEV is not set +CONFIG_INPUT_EVBUG=m + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +CONFIG_TOUCHSCREEN_OMAP=y +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_INGENIENT=y +CONFIG_SERIAL_INGENIENT_CONSOLE=y +# CONFIG_SERIAL_INGENIENT_IR is not set +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +# CONFIG_INGENIENT_LED is not set +CONFIG_INGENIENT_TIMER=y + +# +# I2C support +# +CONFIG_I2C=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOIT=y +CONFIG_I2C_ALGOIT_POLL=y +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set +# 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 + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# +CONFIG_MROBE_POWER_BUTTON=y + +# +# Multimedia Capabilities Port drivers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +CONFIG_FB=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_OMAP is not set +CONFIG_FB_COWON=y +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +# CONFIG_LOGO is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +# CONFIG_SND is not set + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=y +CONFIG_SOUND_OMAP=y +CONFIG_SOUND_OMAP_TSC2101=y +# CONFIG_OBSOLETE_OSS_DRIVER is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB is not set + +# +# Enable Host or Gadget support to see Inventra options +# + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD/Memory Stick Card support +# +# CONFIG_MMC is not set +# CONFIG_MSTICK is not set + +# +# Synchronous Serial Interfaces (SSI) +# +CONFIG_OMAP_TSC2101=y +# CONFIG_SOC_TSC2101 is not set + +# +# File systems +# +# CONFIG_EXT2_FS 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 +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_INOTIFY=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_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_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_RELAYFS_FS is not set + +# +# 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_CRAMFS=y +# 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 +CONFIG_UNION_FS=y + +# +# Network File Systems +# +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SMB_FS 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 +# CONFIG_9P_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=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# 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=y +# 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 + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y + +# +# 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 is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y