Ben,I attach the current patch that I use for my machine. The machine is a SX-560 module from Silex ( http://www.silexeurope.com/en/home/products/embedded-modules/sx-560.html ).
Meanwhile I think I've spotted the (first) problem. In arch/arm/mach-s3c2412/s3c2412.c the SPI device is renamed "s3c2412-spi" (it was set in arch/arm/plat-s3c24xx/devs.c with "s3c2410-spi") but the spi_s3c24xx driver expects a platform driver named "s3c2410-spi", so it fails to initialize. Commenting the driving renaming I get a little bit further:
s3c2410-spi s3c2410-spi.0: No platform data supplied s3c2410-spi: probe of s3c2410-spi.0 failed with error -2 modprobe: failed to load module spi_s3c24xx: No such device Now it seems I need some architecture dependent initialization, correct? Regards, José Gonçalves José Miguel Gonçalves wrote:
Hi,I am trying to setup Linux 2.6.27 on an embedded board with a S3C2412 SoC. After setting some architecture specific configuration on /arch/arm/mach-s3c2412/, I have finally booted my board with success. Now I am trying to access a temperature sensor that is connected to the SPI bus. For this I am thinking to use the spidev userspace API. I have compiled spidev and spi_s3c24xx as modules. I'm able to load spidev but, when I modprobe spi_s3c24xx, I'm getting the following error:modprobe: failed to load module spi_s3c24xx: No such device Any idea of what could be the problem? Regards, José Miguel Gonçalves
diff -Naur linux-2.6.27.38.original/arch/arm/mach-s3c2412/Kconfig linux-2.6.27.38/arch/arm/mach-s3c2412/Kconfig --- linux-2.6.27.38.original/arch/arm/mach-s3c2412/Kconfig 2009-10-22 08:22:46.000000000 +0100 +++ linux-2.6.27.38/arch/arm/mach-s3c2412/Kconfig 2009-11-04 09:15:46.000000000 +0000 @@ -60,13 +60,10 @@ selected config MACH_SMDK2412 - bool "SMDK2412" - select MACH_SMDK2413 + bool "SX560" + select CPU_S3C2412 help - Say Y here if you are using an SMDK2412 - - Note, this shares support with SMDK2413, so will automatically - select MACH_SMDK2413. + Say Y here if you are using a Silex SX-560 embedded WLAN module. config MACH_VSTMS bool "VMSTMS" diff -Naur linux-2.6.27.38.original/arch/arm/mach-s3c2412/mach-sx560.c linux-2.6.27.38/arch/arm/mach-s3c2412/mach-sx560.c --- linux-2.6.27.38.original/arch/arm/mach-s3c2412/mach-sx560.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.27.38/arch/arm/mach-s3c2412/mach-sx560.c 2009-11-04 10:03:27.000000000 +0000 @@ -0,0 +1,135 @@ +/* linux/arch/arm/mach-s3c2412/mach-sx560.c + * + * Copyright (c) 2009 INOV - INESC Inovacao + * Jose Goncalves <jose.goncalves@xxxxxxx> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/interrupt.h> +#include <linux/list.h> +#include <linux/timer.h> +#include <linux/init.h> +#include <linux/serial_core.h> +#include <linux/platform_device.h> + +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <asm/mach/irq.h> + +#include <mach/hardware.h> +#include <asm/hardware/iomd.h> +#include <asm/setup.h> +#include <asm/io.h> +#include <asm/irq.h> +#include <asm/mach-types.h> + +#include <asm/plat-s3c/regs-serial.h> +#include <mach/regs-gpio.h> + +#include <mach/idle.h> + +#include <asm/plat-s3c24xx/s3c2410.h> +#include <asm/plat-s3c24xx/s3c2412.h> +#include <asm/plat-s3c24xx/clock.h> +#include <asm/plat-s3c24xx/devs.h> +#include <asm/plat-s3c24xx/cpu.h> + +static struct map_desc sx560_iodesc[] __initdata = { +}; + +static struct s3c2410_uartcfg sx560_uartcfgs[] __initdata = { + [0] = { + .hwport = 0, + .flags = 0, + .ucon = 0x3c5, + .ulcon = 0x03, + .ufcon = 0x51, + }, + [1] = { + .hwport = 1, + .flags = 0, + .ucon = 0x3c5, + .ulcon = 0x03, + .ufcon = 0x51, + }, + [2] = { + .hwport = 2, + .flags = 0, + .ucon = 0x3c5, + .ulcon = 0x03, + .ufcon = 0x51, + } +}; + +static struct platform_device *sx560_devices[] __initdata = { + &s3c_device_usb, + &s3c_device_wdt, + &s3c_device_rtc, + &s3c_device_i2c, + &s3c_device_spi0, + &s3c_device_usbgadget, + &s3c_device_sdi, +}; + +static void __init sx560_fixup(struct machine_desc *desc, + struct tag *tags, char **cmdline, + struct meminfo *mi) +{ + if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) { + mi->nr_banks=1; + mi->bank[0].start = 0x30000000; + mi->bank[0].size = SZ_16M; + mi->bank[0].node = 0; + } +} + +static void __init sx560_map_io(void) +{ + s3c24xx_init_io(sx560_iodesc, ARRAY_SIZE(sx560_iodesc)); + s3c24xx_init_clocks(0); + s3c24xx_init_uarts(sx560_uartcfgs, ARRAY_SIZE(sx560_uartcfgs)); +} + +static void __init sx560_machine_init(void) +{ + /* Configure temperature sensor chip enable pin + * as output and disable the sensor */ + s3c2410_gpio_setpin(S3C2410_GPF3, 0); + s3c2410_gpio_cfgpin(S3C2410_GPF3, S3C2410_GPIO_OUTPUT); + + /* Configure SPI0 usage on pins GPE11, 12 and 13 */ + s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPE13_SPICLK0); + s3c2410_gpio_cfgpin(S3C2410_GPE12, S3C2410_GPE12_SPIMOSI0); + s3c2410_gpio_cfgpin(S3C2410_GPE11, S3C2410_GPE11_SPIMISO0); + s3c2410_gpio_pullup(S3C2410_GPE11, 0); + s3c2410_gpio_pullup(S3C2410_GPE13, 0); + + /* Turn off suspend for the selectable USB port and + * switch it to USB host mode. Turn on suspend for the + * host port since it is not connected on the SX-560. */ + s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | + S3C2410_MISCCR_USBSUSPND0 | + S3C2410_MISCCR_USBSUSPND1, + S3C2410_MISCCR_USBHOST | + S3C2410_MISCCR_USBSUSPND0); + + platform_add_devices(sx560_devices, ARRAY_SIZE(sx560_devices)); +} + +MACHINE_START(SMDK2412, "SMDK2412") + /* Maintainer: Jose Goncalves <jose.goncalves@xxxxxxx> */ + .phys_io = S3C2410_PA_UART, + .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, + .boot_params = S3C2410_SDRAM_PA + 0x100, + + .fixup = sx560_fixup, + .init_irq = s3c24xx_init_irq, + .map_io = sx560_map_io, + .init_machine = sx560_machine_init, + .timer = &s3c24xx_timer, +MACHINE_END diff -Naur linux-2.6.27.38.original/arch/arm/mach-s3c2412/Makefile linux-2.6.27.38/arch/arm/mach-s3c2412/Makefile --- linux-2.6.27.38.original/arch/arm/mach-s3c2412/Makefile 2009-10-22 08:22:46.000000000 +0100 +++ linux-2.6.27.38/arch/arm/mach-s3c2412/Makefile 2009-11-04 09:15:46.000000000 +0000 @@ -21,3 +21,4 @@ obj-$(CONFIG_MACH_JIVE) += mach-jive.o obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o +obj-$(CONFIG_MACH_SMDK2412) += mach-sx560.o
_______________________________________________ linux-arm mailing list linux-arm@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-arm
- Follow-Ups:
- Re: Problem with SPI on S3C2412
- From: Rusev
- Re: Problem with SPI on S3C2412
- From: Ben Dooks
- Re: Problem with SPI on S3C2412
- References:
- Problem with SPI on S3C2412
- From: José Miguel Gonçalves
- Problem with SPI on S3C2412
- Prev by Date: Re: Problem with SPI on S3C2412
- Next by Date: Re: Problem with SPI on S3C2412
- Previous by thread: Re: Problem with SPI on S3C2412
- Next by thread: Re: Problem with SPI on S3C2412
- Index(es):