⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common-smdk.c

📁 socket can driver, for s3c2440 using sja100, enjoy it!
💻 C
字号:
/* linux/arch/arm/plat-s3c24xx/common-smdk.c * * Copyright (c) 2006 Simtec Electronics *	Ben Dooks <ben@simtec.co.uk> * * Common code for SMDK2410 and SMDK2440 boards * * http://www.fluff.org/ben/smdk2440/ * * 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.**daihj07@thu**/#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/sysdev.h>#include <linux/platform_device.h>#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/partitions.h>#include <asm/mach/arch.h>#include <asm/mach/map.h>#include <asm/mach/irq.h>#include <asm/mach-types.h>#include <asm/hardware.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/arch/regs-gpio.h>#include <asm/arch/leds-gpio.h>#include <asm/plat-s3c/nand.h>#include <asm/plat-s3c24xx/common-smdk.h>#include <asm/plat-s3c24xx/devs.h>#include <asm/plat-s3c24xx/pm.h>#if defined(CONFIG_DM9000) ||defined (CONFIG_DM9000_MODULE)#include <linux/dm9000.h>#endif#include <linux/can/platform/sja1000.h>/* LED devices *//*for t3h2440 led daihj*/static struct s3c24xx_led_platdata smdk_pdata_led4 = {	.gpio		= S3C2410_GPB5,	.flags		= S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,	.name		= "led4",	.def_trigger	= "timer",};static struct s3c24xx_led_platdata smdk_pdata_led5 = {	.gpio		= S3C2410_GPB6,	.flags		= S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,	.name		= "led5",	.def_trigger	= "nand-disk",};static struct s3c24xx_led_platdata smdk_pdata_led6 = {	.gpio		= S3C2410_GPB7,	.flags		= S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,	.name		= "led6",};static struct s3c24xx_led_platdata smdk_pdata_led7 = {	.gpio		= S3C2410_GPB8,	.flags		= S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,	.name		= "led7",};static struct platform_device smdk_led4 = {	.name		= "s3c24xx_led",	.id		= 0,	.dev		= {		.platform_data = &smdk_pdata_led4,	},};static struct platform_device smdk_led5 = {	.name		= "s3c24xx_led",	.id		= 1,	.dev		= {		.platform_data = &smdk_pdata_led5,	},};static struct platform_device smdk_led6 = {	.name		= "s3c24xx_led",	.id		= 2,	.dev		= {		.platform_data = &smdk_pdata_led6,	},};static struct platform_device smdk_led7 = {	.name		= "s3c24xx_led",	.id		= 3,	.dev		= {		.platform_data = &smdk_pdata_led7,	},};/* NAND parititon from 2.4.18-swl5 *//*static struct mtd_partition smdk_default_nand_part[] = {	[0] = {		.name	= "Boot Agent",		.size	= SZ_16K,		.offset	= 0,	},	[1] = {		.name	= "S3C2410 flash partition 1",		.offset = 0,		.size	= SZ_2M,	},	[2] = {		.name	= "S3C2410 flash partition 2",		.offset = SZ_4M,		.size	= SZ_4M,	},	[3] = {		.name	= "S3C2410 flash partition 3",		.offset	= SZ_8M,		.size	= SZ_2M,	},	[4] = {		.name	= "S3C2410 flash partition 4",		.offset = SZ_1M * 10,		.size	= SZ_4M,	},	[5] = {		.name	= "S3C2410 flash partition 5",		.offset	= SZ_1M * 14,		.size	= SZ_1M * 10,	},	[6] = {		.name	= "S3C2410 flash partition 6",		.offset	= SZ_1M * 24,		.size	= SZ_1M * 24,	},	[7] = {		.name	= "S3C2410 flash partition 7",		.offset = SZ_1M * 48,		.size	= SZ_16M,	}};	*//*NAND parititon for T3H2440, 4M nand flash*/static struct mtd_partition t3h2440_nand_part[] = {	[0] = {		.name	= "bios",		.offset	= 0,			.size	= SZ_1M,	},	[1] = {		.name	= "kernel",		.offset = SZ_1M,		.size	= SZ_1M*3,	},	[2] = {		.name	= "rootfs",		.offset = SZ_4M,		.size	= SZ_4M*10,		},	[3] = {		.name	= "ext",		.offset	= SZ_4M*11,		.size	= SZ_4M*5,	}};static struct s3c2410_nand_set smdk_nand_sets[] = {	[0] = {		.name		= "NAND",		.nr_chips	= 1,		.nr_partitions	= ARRAY_SIZE(t3h2440_nand_part),		.partitions	= t3h2440_nand_part,	},};/* choose a set of timings which should suit most 512Mbit * chips and beyond.*//*static struct s3c2410_platform_nand smdk_nand_info = {	.tacls		= 20,	.twrph0		= 60,	.twrph1		= 20,	.nr_sets	= ARRAY_SIZE(smdk_nand_sets),	.sets		= smdk_nand_sets,};*///daihjstatic struct s3c2410_platform_nand smdk_nand_info = {	.tacls		= 0,	.twrph0		= 30,	.twrph1		= 0,	.nr_sets	= ARRAY_SIZE(smdk_nand_sets),	.sets		= smdk_nand_sets,};/* devices we initialise *//* DM9000 	reference linux/arch/arm/mach-s3c2410/mach-bast.c	*/#if defined (CONFIG_DM9000) ||defined(CONFIG_DM9000_MODULE)#include <linux/dm9000.h> //daihj#ifndef BAST_PA_DM9000#define  BAST_PA_DM9000 0#endif#ifndef IRQ_DM9000#define  IRQ_DM9000 IRQ_EINT13#endifstatic struct resource t3h_dm9k_resource[] = {	[0] = {		.start = S3C2410_CS5 + BAST_PA_DM9000,		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 3,		.flags = IORESOURCE_MEM,	},	[1] = {		.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x4,		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 0x4 + 0x3,		.flags = IORESOURCE_MEM,	},	[2] = {		.start = IRQ_DM9000,		.end   = IRQ_DM9000,		.flags = IORESOURCE_IRQ ,	//?	| IRQF_TRIGGER_HIGH	//dm9000a trigger level: high active by default, but use the rising trigger in driver,daihj07	}};/* for the moment we limit ourselves to 16bit IO until some * better IO routines can be written and tested*/static struct dm9000_plat_data t3h_dm9k_platdata = {	.flags		= DM9000_PLATF_16BITONLY,};struct platform_device t3h_device_dm9k = {		//not static	.name		= "dm9000",	.id		= 0,	.num_resources	= ARRAY_SIZE(t3h_dm9k_resource),	.resource	= t3h_dm9k_resource,	.dev		= {		.platform_data = &t3h_dm9k_platdata,	}};#endif  /*config dm9000*//* sja1000 support, *	nGCS4:CAN_CS*	EINTCAN:EINT0/GPF0*	8BIT*/#if defined (CONFIG_CAN_SJA1000_PLATFORM) ||defined(CONFIG_CAN_SJA1000_PLATFORM_MODULE)//#include <linux/dm9000.h> //daihj#ifndef IRQ_SJA1000#define  IRQ_SJA1000 IRQ_EINT0#endifstatic struct resource t3h_SJA1000_resource[] = {	[0] = {		.start = S3C2410_CS4 + 0,	/*for  addr3 == high and addr2 == low*/		.end   = S3C2410_CS4+ 0x10,		.flags = IORESOURCE_MEM,	},	[1] = {		.start = IRQ_SJA1000,		.end   = IRQ_SJA1000,		.flags = IORESOURCE_IRQ| IRQF_TRIGGER_FALLING,	//	},};/*  * now use the data from PIPCAN*/#define PIPCAN_CAN_CLOCK  (16000000 / 2)	/*intel mode, CDR CD.2~CD.0 fosc/2 */#define PIPCAN_OCR        (OCR_TX1_PUSHPULL)#define PIPCAN_CDR        (CDR_CBP | CDR_CLK_OFF)	/*CBP==1, RX1½ÓÈëVss	CLKOUT off*/static struct sja1000_platform_data t3h_SJA1000_platdata = {	.clock	= 	PIPCAN_CAN_CLOCK,	.ocr	=	PIPCAN_OCR,	.cdr	=	PIPCAN_CDR,};struct platform_device t3h_device_SJA1000 = {		//not static	.name		= "sja1000_platform",	.id		= 0,	.num_resources	= ARRAY_SIZE(t3h_SJA1000_resource),	.resource	= t3h_SJA1000_resource,	.dev		= {		.platform_data = &t3h_SJA1000_platdata,	//?	}};#endif  /*config (CONFIG_CAN_SJA1000_PLATFORM) ||defined(CONFIG_CAN_SJA1000_PLATFORM_MODULE)*/static struct platform_device __initdata *smdk_devs[] = {	&s3c_device_nand,	&smdk_led4,	&smdk_led5,	&smdk_led6,	&smdk_led7,#if defined (CONFIG_DM9000) ||defined (CONFIG_DM9000_MODULE)	&t3h_device_dm9k,#endif#if defined (CONFIG_CAN_SJA1000_PLATFORM) ||defined(CONFIG_CAN_SJA1000_PLATFORM_MODULE)	&t3h_device_SJA1000,#endif};void __init smdk_machine_init(void){	/* Configure the LEDs (even if we have no LED support)*/	s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP);	s3c2410_gpio_cfgpin(S3C2410_GPB6, S3C2410_GPB6_OUTP);	s3c2410_gpio_cfgpin(S3C2410_GPB7, S3C2410_GPB7_OUTP);	s3c2410_gpio_cfgpin(S3C2410_GPB8, S3C2410_GPB8_OUTP);	s3c2410_gpio_setpin(S3C2410_GPB5, 1);	s3c2410_gpio_setpin(S3C2410_GPB6, 1);	s3c2410_gpio_setpin(S3C2410_GPB7, 1);	s3c2410_gpio_setpin(S3C2410_GPB8, 1);	if (machine_is_smdk2443())		smdk_nand_info.twrph0 = 50;	s3c_device_nand.dev.platform_data = &smdk_nand_info;	platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));	s3c2410_pm_init();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -