diff options
Diffstat (limited to 'include/linux/platform_data/serial-sccnxp.h')
| -rw-r--r-- | include/linux/platform_data/serial-sccnxp.h | 95 | 
1 files changed, 95 insertions, 0 deletions
diff --git a/include/linux/platform_data/serial-sccnxp.h b/include/linux/platform_data/serial-sccnxp.h new file mode 100644 index 00000000000..215574d1e81 --- /dev/null +++ b/include/linux/platform_data/serial-sccnxp.h @@ -0,0 +1,95 @@ +/* + *  NXP (Philips) SCC+++(SCN+++) serial driver + * + *  Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru> + * + *  Based on sc26xx.c, by Thomas Bogendörfer (tsbogend@alpha.franken.de) + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + */ + +#ifndef _PLATFORM_DATA_SERIAL_SCCNXP_H_ +#define _PLATFORM_DATA_SERIAL_SCCNXP_H_ + +#define SCCNXP_MAX_UARTS	2 + +/* Output lines */ +#define LINE_OP0		1 +#define LINE_OP1		2 +#define LINE_OP2		3 +#define LINE_OP3		4 +#define LINE_OP4		5 +#define LINE_OP5		6 +#define LINE_OP6		7 +#define LINE_OP7		8 + +/* Input lines */ +#define LINE_IP0		9 +#define LINE_IP1		10 +#define LINE_IP2		11 +#define LINE_IP3		12 +#define LINE_IP4		13 +#define LINE_IP5		14 +#define LINE_IP6		15 + +/* Signals */ +#define DTR_OP			0	/* DTR */ +#define RTS_OP			4	/* RTS */ +#define DSR_IP			8	/* DSR */ +#define CTS_IP			12	/* CTS */ +#define DCD_IP			16	/* DCD */ +#define RNG_IP			20	/* RNG */ + +#define DIR_OP			24	/* Special signal for control RS-485. +					 * Goes high when transmit, +					 * then goes low. +					 */ + +/* Routing control signal 'sig' to line 'line' */ +#define MCTRL_SIG(sig, line)	((line) << (sig)) + +/* + * Example board initialization data: + * + * static struct resource sc2892_resources[] = { + *	DEFINE_RES_MEM(UART_PHYS_START, 0x10), + *	DEFINE_RES_IRQ(IRQ_EXT2), + * }; + * + * static struct sccnxp_pdata sc2892_info = { + *	.frequency	= 3686400, + *	.mctrl_cfg[0]	= MCTRL_SIG(DIR_OP, LINE_OP0), + *	.mctrl_cfg[1]	= MCTRL_SIG(DIR_OP, LINE_OP1), + * }; + * + * static struct platform_device sc2892 = { + *	.name		= "sc2892", + *	.id		= -1, + *	.resource	= sc2892_resources, + *	.num_resources	= ARRAY_SIZE(sc2892_resources), + *	.dev = { + *		.platform_data	= &sc2892_info, + *	}, + * }; + */ + +/* SCCNXP platform data structure */ +struct sccnxp_pdata { +	/* Frequency (extrenal clock or crystal) */ +	int			frequency; +	/* Shift for A0 line */ +	const u8		reg_shift; +	/* Modem control lines configuration */ +	const u32		mctrl_cfg[SCCNXP_MAX_UARTS]; +	/* Timer value for polling mode (usecs) */ +	const unsigned int	poll_time_us; +	/* Called during startup */ +	void (*init)(void); +	/* Called before finish */ +	void (*exit)(void); +}; + +#endif  |