1e4ac92df2791c1a3912643e9547941f430fda726Joe Perches#ifndef __SAMSUNG_H 2e4ac92df2791c1a3912643e9547941f430fda726Joe Perches#define __SAMSUNG_H 3e4ac92df2791c1a3912643e9547941f430fda726Joe Perches 499edb3d10a9d384d69557bd09cc39b9ec62aa04eJovi Zhang/* 5b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * Driver for Samsung SoC onboard UARTs. 6b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * 7ccae941ee2de58b9391f4e166b1bad33fcbfc119Ben Dooks * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics 8b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * http://armlinux.simtec.co.uk/ 9b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * 10b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * This program is free software; you can redistribute it and/or modify 11b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * it under the terms of the GNU General Public License version 2 as 12b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks * published by the Free Software Foundation. 13b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks*/ 14b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 15b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooksstruct s3c24xx_uart_info { 16b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks char *name; 17b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned int type; 18b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned int fifosize; 19b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long rx_fifomask; 20b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long rx_fifoshift; 21b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long rx_fifofull; 22b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long tx_fifomask; 23b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long tx_fifoshift; 24b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned long tx_fifofull; 255f5a7a5578c5885201cf9c85856f023fe8b81765Thomas Abraham unsigned int def_clk_sel; 265f5a7a5578c5885201cf9c85856f023fe8b81765Thomas Abraham unsigned long num_clks; 275f5a7a5578c5885201cf9c85856f023fe8b81765Thomas Abraham unsigned long clksel_mask; 285f5a7a5578c5885201cf9c85856f023fe8b81765Thomas Abraham unsigned long clksel_shift; 29b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 30090f848da000083bf6c1a052222396970e53b4d7Ben Dooks /* uart port features */ 31090f848da000083bf6c1a052222396970e53b4d7Ben Dooks 32090f848da000083bf6c1a052222396970e53b4d7Ben Dooks unsigned int has_divslot:1; 33090f848da000083bf6c1a052222396970e53b4d7Ben Dooks 34b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks /* uart controls */ 35b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *); 36b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks}; 37b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 38da121506eb03ee5daea55404709110b798bd61d9Thomas Abrahamstruct s3c24xx_serial_drv_data { 39da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham struct s3c24xx_uart_info *info; 40da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham struct s3c2410_uartcfg *def_cfg; 41da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham unsigned int fifosize[CONFIG_SERIAL_SAMSUNG_UARTS]; 42da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham}; 43da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham 44b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooksstruct s3c24xx_uart_port { 45b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned char rx_claimed; 46b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks unsigned char tx_claimed; 47305554768011707f33f437b96f999f812ba2a7e4Ben Dooks unsigned int pm_level; 48305554768011707f33f437b96f999f812ba2a7e4Ben Dooks unsigned long baudclk_rate; 49b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 50b73c289cc90138e9f78d487434df0f8eeb2daf9bBen Dooks unsigned int rx_irq; 51b73c289cc90138e9f78d487434df0f8eeb2daf9bBen Dooks unsigned int tx_irq; 52b73c289cc90138e9f78d487434df0f8eeb2daf9bBen Dooks 53b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks struct s3c24xx_uart_info *info; 54b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks struct clk *clk; 55b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks struct clk *baudclk; 56b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks struct uart_port port; 57da121506eb03ee5daea55404709110b798bd61d9Thomas Abraham struct s3c24xx_serial_drv_data *drv_data; 58305554768011707f33f437b96f999f812ba2a7e4Ben Dooks 594d84e970d0faec772a9eaa818feee38aeca121b2Thomas Abraham /* reference to platform data */ 604d84e970d0faec772a9eaa818feee38aeca121b2Thomas Abraham struct s3c2410_uartcfg *cfg; 614d84e970d0faec772a9eaa818feee38aeca121b2Thomas Abraham 62305554768011707f33f437b96f999f812ba2a7e4Ben Dooks#ifdef CONFIG_CPU_FREQ 63305554768011707f33f437b96f999f812ba2a7e4Ben Dooks struct notifier_block freq_transition; 64305554768011707f33f437b96f999f812ba2a7e4Ben Dooks#endif 65b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks}; 66b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 67b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks/* conversion functions */ 68b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 69d4aab2064adbd0660ab9cbfc3e93eae8216b41aaJingoo Han#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev) 70b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 71b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks/* register access controls */ 72b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 73b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#define portaddr(port, reg) ((port)->membase + (reg)) 749fdedf5d16d04238833d1d45a8e303fdb86bee3aJingoo Han#define portaddrl(port, reg) \ 759fdedf5d16d04238833d1d45a8e303fdb86bee3aJingoo Han ((unsigned long *)(unsigned long)((port)->membase + (reg))) 76b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 77b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#define rd_regb(port, reg) (__raw_readb(portaddr(port, reg))) 78b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#define rd_regl(port, reg) (__raw_readl(portaddr(port, reg))) 79b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 80b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg)) 81b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#define wr_regl(port, reg, val) __raw_writel(val, portaddr(port, reg)) 82b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks 83b497549a035c2a81b71c7a27f2b00c8a16c09423Ben Dooks#endif 84