root/include/linux/sm501.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /* include/linux/sm501.h
   3  *
   4  * Copyright (c) 2006 Simtec Electronics
   5  *      Ben Dooks <ben@simtec.co.uk>
   6  *      Vincent Sanders <vince@simtec.co.uk>
   7 */
   8 
   9 extern int sm501_unit_power(struct device *dev,
  10                             unsigned int unit, unsigned int to);
  11 
  12 extern unsigned long sm501_set_clock(struct device *dev,
  13                                      int clksrc, unsigned long freq);
  14 
  15 extern unsigned long sm501_find_clock(struct device *dev,
  16                                       int clksrc, unsigned long req_freq);
  17 
  18 /* sm501_misc_control
  19  *
  20  * Modify the SM501's MISC_CONTROL register
  21 */
  22 
  23 extern int sm501_misc_control(struct device *dev,
  24                               unsigned long set, unsigned long clear);
  25 
  26 /* sm501_modify_reg
  27  *
  28  * Modify a register in the SM501 which may be shared with other
  29  * drivers.
  30 */
  31 
  32 extern unsigned long sm501_modify_reg(struct device *dev,
  33                                       unsigned long reg,
  34                                       unsigned long set,
  35                                       unsigned long clear);
  36 
  37 
  38 /* Platform data definitions */
  39 
  40 #define SM501FB_FLAG_USE_INIT_MODE      (1<<0)
  41 #define SM501FB_FLAG_DISABLE_AT_EXIT    (1<<1)
  42 #define SM501FB_FLAG_USE_HWCURSOR       (1<<2)
  43 #define SM501FB_FLAG_USE_HWACCEL        (1<<3)
  44 #define SM501FB_FLAG_PANEL_NO_FPEN      (1<<4)
  45 #define SM501FB_FLAG_PANEL_NO_VBIASEN   (1<<5)
  46 #define SM501FB_FLAG_PANEL_INV_FPEN     (1<<6)
  47 #define SM501FB_FLAG_PANEL_INV_VBIASEN  (1<<7)
  48 
  49 struct sm501_platdata_fbsub {
  50         struct fb_videomode     *def_mode;
  51         unsigned int             def_bpp;
  52         unsigned long            max_mem;
  53         unsigned int             flags;
  54 };
  55 
  56 enum sm501_fb_routing {
  57         SM501_FB_OWN            = 0,    /* CRT=>CRT, Panel=>Panel */
  58         SM501_FB_CRT_PANEL      = 1,    /* Panel=>CRT, Panel=>Panel */
  59 };
  60 
  61 /* sm501_platdata_fb flag field bit definitions */
  62 
  63 #define SM501_FBPD_SWAP_FB_ENDIAN       (1<<0)  /* need to endian swap */
  64 
  65 /* sm501_platdata_fb
  66  *
  67  * configuration data for the framebuffer driver
  68 */
  69 
  70 struct sm501_platdata_fb {
  71         enum sm501_fb_routing            fb_route;
  72         unsigned int                     flags;
  73         struct sm501_platdata_fbsub     *fb_crt;
  74         struct sm501_platdata_fbsub     *fb_pnl;
  75 };
  76 
  77 /* gpio i2c
  78  *
  79  * Note, we have to pass in the bus number, as the number used will be
  80  * passed to the i2c-gpio driver's platform_device.id, subsequently used
  81  * to register the i2c bus.
  82 */
  83 
  84 struct sm501_platdata_gpio_i2c {
  85         unsigned int            bus_num;
  86         unsigned int            pin_sda;
  87         unsigned int            pin_scl;
  88         int                     udelay;
  89         int                     timeout;
  90 };
  91 
  92 /* sm501_initdata
  93  *
  94  * use for initialising values that may not have been setup
  95  * before the driver is loaded.
  96 */
  97 
  98 struct sm501_reg_init {
  99         unsigned long           set;
 100         unsigned long           mask;
 101 };
 102 
 103 #define SM501_USE_USB_HOST      (1<<0)
 104 #define SM501_USE_USB_SLAVE     (1<<1)
 105 #define SM501_USE_SSP0          (1<<2)
 106 #define SM501_USE_SSP1          (1<<3)
 107 #define SM501_USE_UART0         (1<<4)
 108 #define SM501_USE_UART1         (1<<5)
 109 #define SM501_USE_FBACCEL       (1<<6)
 110 #define SM501_USE_AC97          (1<<7)
 111 #define SM501_USE_I2S           (1<<8)
 112 #define SM501_USE_GPIO          (1<<9)
 113 
 114 #define SM501_USE_ALL           (0xffffffff)
 115 
 116 struct sm501_initdata {
 117         struct sm501_reg_init   gpio_low;
 118         struct sm501_reg_init   gpio_high;
 119         struct sm501_reg_init   misc_timing;
 120         struct sm501_reg_init   misc_control;
 121 
 122         unsigned long           devices;
 123         unsigned long           mclk;           /* non-zero to modify */
 124         unsigned long           m1xclk;         /* non-zero to modify */
 125 };
 126 
 127 /* sm501_init_gpio
 128  *
 129  * default gpio settings
 130 */
 131 
 132 struct sm501_init_gpio {
 133         struct sm501_reg_init   gpio_data_low;
 134         struct sm501_reg_init   gpio_data_high;
 135         struct sm501_reg_init   gpio_ddr_low;
 136         struct sm501_reg_init   gpio_ddr_high;
 137 };
 138 
 139 #define SM501_FLAG_SUSPEND_OFF          (1<<4)
 140 
 141 /* sm501_platdata
 142  *
 143  * This is passed with the platform device to allow the board
 144  * to control the behaviour of the SM501 driver(s) which attach
 145  * to the device.
 146  *
 147 */
 148 
 149 struct sm501_platdata {
 150         struct sm501_initdata           *init;
 151         struct sm501_init_gpio          *init_gpiop;
 152         struct sm501_platdata_fb        *fb;
 153 
 154         int                              flags;
 155         int                              gpio_base;
 156 
 157         int     (*get_power)(struct device *dev);
 158         int     (*set_power)(struct device *dev, unsigned int on);
 159 
 160         struct sm501_platdata_gpio_i2c  *gpio_i2c;
 161         unsigned int                     gpio_i2c_nr;
 162 };
 163 
 164 #if defined(CONFIG_PPC32)
 165 #define smc501_readl(addr)              ioread32be((addr))
 166 #define smc501_writel(val, addr)        iowrite32be((val), (addr))
 167 #else
 168 #define smc501_readl(addr)              readl(addr)
 169 #define smc501_writel(val, addr)        writel(val, addr)
 170 #endif

/* [<][>][^][v][top][bottom][index][help] */