Blame view

kernel/linux-imx6_3.14.28/drivers/tty/serial/samsung.h 2.32 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  /*
   * Driver for Samsung SoC onboard UARTs.
   *
   * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
   *	http://armlinux.simtec.co.uk/
   *
   * 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.
  */
  
  struct s3c24xx_uart_info {
  	char			*name;
  	unsigned int		type;
  	unsigned int		fifosize;
  	unsigned long		rx_fifomask;
  	unsigned long		rx_fifoshift;
  	unsigned long		rx_fifofull;
  	unsigned long		tx_fifomask;
  	unsigned long		tx_fifoshift;
  	unsigned long		tx_fifofull;
  	unsigned int		def_clk_sel;
  	unsigned long		num_clks;
  	unsigned long		clksel_mask;
  	unsigned long		clksel_shift;
  
  	/* uart port features */
  
  	unsigned int		has_divslot:1;
  
  	/* uart controls */
  	int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *);
  };
  
  struct s3c24xx_serial_drv_data {
  	struct s3c24xx_uart_info	*info;
  	struct s3c2410_uartcfg		*def_cfg;
  	unsigned int			fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
  };
  
  struct s3c24xx_uart_port {
  	unsigned char			rx_claimed;
  	unsigned char			tx_claimed;
  	unsigned int			pm_level;
  	unsigned long			baudclk_rate;
  
  	unsigned int			rx_irq;
  	unsigned int			tx_irq;
  
  	struct s3c24xx_uart_info	*info;
  	struct clk			*clk;
  	struct clk			*baudclk;
  	struct uart_port		port;
  	struct s3c24xx_serial_drv_data	*drv_data;
  
  	/* reference to platform data */
  	struct s3c2410_uartcfg		*cfg;
  
  #ifdef CONFIG_CPU_FREQ
  	struct notifier_block		freq_transition;
  #endif
  };
  
  /* conversion functions */
  
  #define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
  
  /* register access controls */
  
  #define portaddr(port, reg) ((port)->membase + (reg))
  #define portaddrl(port, reg) \
  	((unsigned long *)(unsigned long)((port)->membase + (reg)))
  
  #define rd_regb(port, reg) (__raw_readb(portaddr(port, reg)))
  #define rd_regl(port, reg) (__raw_readl(portaddr(port, reg)))
  
  #define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg))
  #define wr_regl(port, reg, val) __raw_writel(val, portaddr(port, reg))
  
  #if defined(CONFIG_SERIAL_SAMSUNG_DEBUG) && \
      defined(CONFIG_DEBUG_LL) && \
      !defined(MODULE)
  
  extern void printascii(const char *);
  
  static void dbg(const char *fmt, ...)
  {
  	va_list va;
  	char buff[256];
  
  	va_start(va, fmt);
  	vsprintf(buff, fmt, va);
  	va_end(va);
  
  	printascii(buff);
  }
  
  #else
  #define dbg(x...) do { } while (0)
  #endif