Changeset 74db5a1 in mainline
- Timestamp:
- 2013-01-20T20:47:02Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9cc4b2b4
- Parents:
- 163bc23
- Location:
- uspace/drv/fb/amdm37x_dispc
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h
r163bc23 r74db5a1 1 1 /* 2 * Copyright (c) 201 2Jan Vesely2 * Copyright (c) 2013 Jan Vesely 3 3 * All rights reserved. 4 4 * … … 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 /** @addtogroup genarch 28 29 /** @addtogroup kgraph 29 30 * @{ 30 31 */ 31 32 /** 32 33 * @file 33 * @brief Texas Instruments AM/DM37x SDRAM Memory Scheduler.34 34 */ 35 35 36 #ifndef KERN_AMDM37x_DISPC_H_37 #define KERN_AMDM37x_DISPC_H_36 #ifndef AMDM37X_DISPC_H_ 37 #define AMDM37X_DISPC_H_ 38 38 39 /* AMDM37x TRM p. 1813 */ 40 #define AMDM37x_DISPC_BASE_ADDRESS 0x48050400 41 #define AMDM37x_DISPC_SIZE 1024 42 43 #define __paddname(line) PADD32_ ## line 44 #define _paddname(line) __paddname(line) 45 #define PADD32(count) uint32_t _paddname(__LINE__)[count] 46 47 #include <typedefs.h> 39 #include "amdm37x_dispc_regs.h" 48 40 49 41 typedef struct { 50 const ioport32_t revision; 51 #define AMDM37X_DISPC_REVISION_MASK 0xff 42 amdm37x_dispc_regs_t *regs; 43 void *fb_data; 44 } amdm37x_dispc_t; 52 45 53 PADD32(3); 54 ioport32_t sysconfig; 55 #define AMDM37X_DISPC_SYSCONFIG_AUTOIDLE_FLAG (1 << 0) 56 #define AMDM37X_DISPC_SYSCONFIG_SOFTRESET_FLAG (1 << 1) 57 #define AMDM37X_DISPC_SYSCONFIG_ENWAKEUP_FLAG (1 << 2) 58 #define AMDM37X_DISPC_SYSCONFIG_SIDLEMODE_MASK 0x3 59 #define AMDM37X_DISPC_SYSCONFIG_SIDLEMODE_SHIFT 3 60 #define AMDM37X_DISPC_SYSCONFIG_CLOCKACTIVITY_MASK 0x3 61 #define AMDM37X_DISPC_SYSCONFIG_CLOCKACTIVITY_SHIFT 8 62 #define AMDM37X_DISPC_SYSCONFIG_MIDLEMODE_MASK 0x3 63 #define AMDM37X_DISPC_SYSCONFIG_MIDLEMODE_SHIFT 12 64 65 const ioport32_t sysstatus; 66 #define AMDM37X_DISPC_SYSSTATUS_RESETDONE_FLAG (1 << 0) 67 68 ioport32_t irqstatus; 69 ioport32_t irqenable; 70 #define AMDM37X_DISPC_IRQ_FRAMEDONE_FLAG (1 << 0) 71 #define AMDM37X_DISPC_IRQ_VSYNC_FLAG (1 << 1) 72 #define AMDM37X_DISPC_IRQ_EVSYNCEVEN_FLAG (1 << 2) 73 #define AMDM37X_DISPC_IRQ_EVSYNCODD_FLAG (1 << 3) 74 #define AMDM37X_DISPC_IRQ_ACBIASCOUNTSTATUS_FLAG (1 << 4) 75 #define AMDM37X_DISPC_IRQ_PROGRAMMEDLINENUMBER_FLAG (1 << 5) 76 #define AMDM37X_DISPC_IRQ_GFXFIFOUNDERFLOW_FLAG (1 << 6) 77 #define AMDM37X_DISPC_IRQ_GFXENDWINDOW_FLAG (1 << 7) 78 #define AMDM37X_DISPC_IRQ_PALETTEGAMMALOADING_FLAG (1 << 8) 79 #define AMDM37X_DISPC_IRQ_OPCERROR_FLAG (1 << 9) 80 #define AMDM37X_DISPC_IRQ_VID1FIFOUNDERFLOW_FLAG (1 << 10) 81 #define AMDM37X_DISPC_IRQ_VID1ENDWINDOW_FLAG (1 << 11) 82 #define AMDM37X_DISPC_IRQ_VID2FIFOUNDERFLOW_FLAG (1 << 12) 83 #define AMDM37X_DISPC_IRQ_VID2ENDWINDOW_FLAG (1 << 13) 84 #define AMDM37X_DISPC_IRQ_SYNCLOST_FLAG (1 << 14) 85 #define AMDM37X_DISPC_IRQ_SYNCLOSTDIGITAL_FLAG (1 << 15) 86 #define AMDM37X_DISPC_IRQ_WAKEUP_FLAG (1 << 16) 87 88 PADD32(8); 89 ioport32_t control; 90 #define AMDM37X_DISPC_CONTROL_LCD_ENABLE_FLAG (1 << 0) 91 #define AMDM37X_DISPC_CONTROL_DIGITAL_ENABLE_FLAG (1 << 1) 92 #define AMDM37X_DISPC_CONTROL_MONOCOLOR_FLAG (1 << 2) 93 #define AMDM37X_DISPC_CONTROL_STNTFT_FLAG (1 << 3) 94 #define AMDM37X_DISPC_CONTROL_M8B_FLAG (1 << 4) 95 #define AMDM37X_DISPC_CONTROL_GOLCD_FLAG (1 << 5) 96 #define AMDM37X_DISPC_CONTROL_GODIGITAL_FLAG (1 << 6) 97 #define AMDM37X_DISPC_CONTROL_STDITHERENABLE_FLAG (1 << 7) 98 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_MASK 0x3 99 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_SHIFT 8 100 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_12B 0 101 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_16B 1 102 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_18B 2 103 #define AMDM37X_DISPC_CONTROL_TFTDATALINES_24B 3 104 #define AMDM37X_DISPC_CONTROL_STALLMODE_FLAG (1 << 11) 105 #define AMDM37X_DISPC_CONTROL_OVERLAYOPTIMIZATION_FLAG (1 << 12) 106 #define AMDM37X_DISPC_CONTROL_GPIN0_FLAG (1 << 13) 107 #define AMDM37X_DISPC_CONTROL_GPIN1_FLAG (1 << 14) 108 #define AMDM37X_DISPC_CONTROL_GPOUT0_FLAG (1 << 15) 109 #define AMDM37X_DISPC_CONTROL_GPOUT1_FLAG (1 << 16) 110 #define AMDM37X_DISPC_CONTROL_HT_MASK 0x7 111 #define AMDM37X_DISPC_CONTROL_HT_SHIFT 17 112 #define AMDM37X_DISPC_CONTROL_TDMENABLE_FLAG (1 << 20) 113 #define AMDM37X_DISPC_CONTROL_TDMPARALLELMODE_MASK 0x3 114 #define AMDM37X_DISPC_CONTROL_TDMPARELLELMODE_SHIFT 21 115 #define AMDM37X_DISPC_CONTROL_TDMCYCLEFORMAT_MASK 0x3 116 #define AMDM37X_DISPC_CONTROL_TDMCYCLEFORMAT_SHIFT 23 117 #define AMDM37X_DISPC_CONTROL_TDMUNUSEDBITS_MASK 0x3 118 #define AMDM37X_DISPC_CONTROL_TDMUNUSEDBITS_SHIFT 25 119 #define AMDM37X_DISPC_CONTROL_PCKFREEENABLE_FLAG (1 << 27) 120 #define AMDM37X_DISPC_CONTROL_LCDENABLESIGNAL_FLAG (1 << 28) 121 #define AMDM37X_DISPC_CONTROL_KCDENABLEPOL_FLAG (1 << 29) 122 #define AMDM37X_DISPC_CONTROL_SPATIALTEMPORALDITHERINGFRAMES_MASK 0x3 123 #define AMDM37X_DISPC_CONTROL_SPATIALTEMPORALDITHERINGFRAMES_SHIFT 30 124 125 ioport32_t config; 126 #define AMDM37X_DISPC_CONFIG_PIXELGATED_FLAG (1 << 0) 127 #define AMDM37X_DISPC_CONFIG_LOADMODE_MASK 0x3 128 #define AMDM37X_DISPC_CONFIG_LOADMODE_SHIFT 1 129 #define AMDM37X_DISPC_CONFIG_LOADMODE_PGDATAEVERYFRAME 0x0 130 #define AMDM37X_DISPC_CONFIG_LOADMODE_PGUSER 0x1 131 #define AMDM37X_DISPC_CONFIG_LOADMODE_DATAEVERYFRAME 0x2 132 #define AMDM37X_DISPC_CONFIG_LOADMODE_PGDFIRSTFRAME 0x3 133 #define AMDM37X_DISPC_CONFIG_PALETTEGAMMATABLE_FLAG (1 << 3) 134 #define AMDM37X_DISPC_CONFIG_PIXELDATAGATED_FLAG (1 << 4) 135 #define AMDM37X_DISPC_CONFIG_PIXELCLOCKGATED_FLAG (1 << 5) 136 #define AMDM37X_DISPC_CONFIG_HSYNCGATED_FLAG (1 << 6) 137 #define AMDM37X_DISPC_CONFIG_VSYNCGATED_FLAG (1 << 7) 138 #define AMDM37X_DISPC_CONFIG_ACBIASGATED_FLAG (1 << 8) 139 #define AMDM37X_DISPC_CONFIG_FUNCGATED_FLAG (1 << 9) 140 #define AMDM37X_DISPC_CONFIG_TCKLCDENABLE_FLAG (1 << 10) 141 #define AMDM37X_DISPC_CONFIG_TCKLCDSELECTION_FLAG (1 << 11) 142 #define AMDM37X_DISPC_CONFIG_TCKDIGENABLE_FLAG (1 << 12) 143 #define AMDM37X_DISPC_CONFIG_TCKDIGSELECTION_FLAG (1 << 13) 144 #define AMDM37X_DISPC_CONFIG_FIFOMERGE_FLAG (1 << 14) 145 #define AMDM37X_DISPC_CONFIG_CPR_FLAG (1 << 15) 146 #define AMDM37X_DISPC_CONFIG_FIFOHANDCHECK_FLAG (1 << 16) 147 #define AMDM37X_DISPC_CONFIG_FIFOFILLING_FLAG (1 << 17) 148 #define AMDM37X_DISPC_CONFIG_LCDPALPHABLENDERENABLDE_FLAG (1 << 18) 149 #define AMDM37X_DISPC_CONFIG_TVALPHABLENDERENABLE_FLAG (1 << 19) 150 151 PADD32(1); 152 ioport32_t default_color[2]; 153 ioport32_t trans_color[2]; 154 #define AMDM37X_DISPC_COLOR_MASK 0xffffff 155 156 const ioport32_t line_status; 157 ioport32_t line_number; 158 #define AMDM37X_DISPC_LINE_NUMBER_MASK 0x3ff 159 160 ioport32_t timing_h; 161 #define AMDM37X_DISPC_TIMING_H_HSW_MASK 0xff 162 #define AMDM37X_DISPC_TIMING_H_HSW_SHIFT 0 163 #define AMDM37X_DISPC_TIMING_H_HFP_MASK 0xfff 164 #define AMDM37X_DISPC_TIMING_H_HFP_SHIFT 8 165 #define AMDM37X_DISPC_TIMING_H_HBP_MASK 0xfff 166 #define AMDM37X_DISPC_TIMING_H_HBP_SHIFT 20 167 168 ioport32_t timing_v; 169 #define AMDM37X_DISPC_TIMING_V_VSW_MASK 0xff 170 #define AMDM37X_DISPC_TIMING_V_VSW_SHIFT 0 171 #define AMDM37X_DISPC_TIMING_V_VFP_MASK 0xfff 172 #define AMDM37X_DISPC_TIMING_V_VFP_SHIFT 8 173 #define AMDM37X_DISPC_TIMING_V_VBP_MASK 0xfff 174 #define AMDM37X_DISPC_TIMING_V_VBP_SHIFT 20 175 176 ioport32_t pol_freq; 177 #define AMDM37X_DISPC_POL_FREQ_ACB_MASK 0xff 178 #define AMDM37X_DISPC_POL_FREQ_ACB_SHIFT 0 179 #define AMDM37X_DISPC_POL_FREQ_ACBI_MASK 0xf 180 #define AMDM37X_DISPC_POL_FREQ_ACBI_SHIFT 8 181 #define AMDM37X_DISPC_POL_FREQ_IVS_FLAG (1 << 12) 182 #define AMDM37X_DISPC_POL_FREQ_IHS_FLAG (1 << 13) 183 #define AMDM37X_DISPC_POL_FREQ_IPC_FLAG (1 << 14) 184 #define AMDM37X_DISPC_POL_FREQ_IEO_FLAG (1 << 15) 185 #define AMDM37X_DISPC_POL_FREQ_RF_FLAG (1 << 16) 186 #define AMDM37X_DISPC_POL_FREQ_ONOFF_FLAG (1 << 17) 187 188 ioport32_t divisor; 189 #define AMDM37X_DISPC_DIVISOR_PCD_MASK 0xff 190 #define AMDM37X_DISPC_DIVISOR_PCD_SHIFT 0 191 #define AMDM37X_DISPC_DIVISOR_LCD_MASK 0xff 192 #define AMDM37X_DISPC_DIVISOR_LCD_SHIFT 16 193 194 ioport32_t global_alpha; 195 #define AMDM37X_DISPC_GLOBAL_ALPHA_GFXGLOBALALPHA_MASK 0xff 196 #define AMDM37X_DISPC_GLOBAL_ALPHA_GFXGLOBALALPHA_SHIFT 0 197 #define AMDM37X_DISPC_GLOBAL_ALPHA_VID2GLOBALALPHA_MASK 0xff 198 #define AMDM37X_DISPC_GLOBAL_ALPHA_VID2GLOBALALPHA_SHIFT 16 199 200 ioport32_t size_dig; 201 ioport32_t size_lcd; 202 203 struct { 204 ioport32_t ba[2]; 205 ioport32_t position; 206 #define AMDM37X_DISPC_GFX_POSITION_GFXPOSX_MASK 0x7ff 207 #define AMDM37X_DISPC_GFX_POSITION_GFXPOSX_SHIFT 0 208 #define AMDM37X_DISPC_GFX_POSITION_GFXPOSY_MASK 0x7ff 209 #define AMDM37X_DISPC_GFX_POSITION_GFXPOSY_SHIFT 16 210 211 ioport32_t size; 212 #define AMDM37X_DISPC_SIZE_WIDTH_MASK 0x7ff 213 #define AMDM37X_DISPC_SIZE_WIDTH_SHIFT 0 214 #define AMDM37X_DISPC_SIZE_HEIGHT_MASK 0x7ff 215 #define AMDM37X_DISPC_SIZE_HEIGHT_SHIFT 16 216 217 PADD32(4); 218 ioport32_t attributes; 219 #define AMDM37X_DISPC_GFX_ATTRIBUTES_ENABLE_FLAG (1 << 0) 220 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_MASK 0xf 221 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_SHIFT 1 222 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_ARGB16 0x5 223 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGB16 0x6 224 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGB24_32 0x8 225 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGB24 0x9 226 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_ARGB 0xc 227 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGBA 0xd 228 #define AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGBX 0xe 229 #define AMDM37X_DISPC_GFX_ATTRIBUTES_REPLICATIONENABLE_FLAG (1 << 5) 230 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXBURSTSIZE_MASK 0x3 231 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXBURSTSIZE_SHIFT 6 232 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXCHANNELOUT_FLAG (1 << 8) 233 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXNIBBLEMODE_FLAG (1 << 9) 234 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXENDIANNES_FLAG (1 << 10) 235 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXFIFOPRELOAD_FLAG (1 << 11) 236 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXROTATION_MASK 0x3 237 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXROTATION_SHIFT 12 238 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXARBITRATION_FLAG (1 << 14) 239 #define AMDM37X_DISPC_GFX_ATTRIBUTES_GFXSELFREFRESH_FLAG (1 << 15) 240 #define AMDM37X_DISPC_GFX_ATTRIBUTES_PREMULTIALPHA_FLAG (1 << 28) 241 242 243 ioport32_t fifo_threshold; 244 const ioport32_t fifo_size_status; 245 ioport32_t row_inc; 246 ioport32_t pixel_inc; 247 ioport32_t window_skip; 248 ioport32_t table_ba; 249 } gfx; 250 251 struct { 252 ioport32_t ba[2]; 253 ioport32_t position; 254 ioport32_t size; 255 ioport32_t attributes; 256 ioport32_t fifo_threshold; 257 const ioport32_t fifo_size_status; 258 ioport32_t row_inc; 259 ioport32_t pixel_inc; 260 ioport32_t fir; 261 ioport32_t picture_size; 262 ioport32_t accui[2]; 263 struct { 264 ioport32_t hi; 265 ioport32_t hvi; 266 } fir_coef[8]; 267 ioport32_t conv_coef[5]; 268 PADD32(2); 269 } vid[2]; 270 /* 0x1d4 */ 271 ioport32_t data_cycle[3]; 272 /* 0x1e0 */ 273 ioport32_t vid_fir_coef_v[8]; 274 /* 0x200 */ 275 PADD32(8); 276 /* 0x220 */ 277 ioport32_t cpr_coef_r; 278 ioport32_t cpr_coef_g; 279 ioport32_t cpr_coef_b; 280 ioport32_t gfx_preload; 281 282 /* 0x230 */ 283 ioport32_t vid_preload[2]; 284 285 } __attribute__((packed)) amdm37x_dispc_regs_t; 286 287 288 static inline void amdm37x_dispc_setup_fb(amdm37x_dispc_regs_t *regs, 289 unsigned x, unsigned y, unsigned bpp, uintptr_t pa) 46 static inline int amdm37x_dispc_init(amdm37x_dispc_t *instance) 290 47 { 291 ASSERT(regs); 292 /* Init sequence for dispc is in chapter 7.6.5.1.4 p. 1810, 293 * no idea what parts of that work. */ 294 295 /* Disable all interrupts */ 296 regs->irqenable = 0; 297 298 /* Pixel format specifics*/ 299 uint32_t attrib_pixel_format = 0; 300 uint32_t control_data_lanes = 0; 301 switch (bpp) 302 { 303 case 32: 304 attrib_pixel_format = AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGBX; 305 control_data_lanes = AMDM37X_DISPC_CONTROL_TFTDATALINES_24B; 306 break; 307 case 24: 308 attrib_pixel_format = AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGB24; 309 control_data_lanes = AMDM37X_DISPC_CONTROL_TFTDATALINES_24B; 310 break; 311 case 16: 312 attrib_pixel_format = AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_RGB16; 313 control_data_lanes = AMDM37X_DISPC_CONTROL_TFTDATALINES_16B; 314 break; 315 default: 316 ASSERT(false); 317 } 318 319 /* Prepare sizes */ 320 const uint32_t size_reg = 321 (((x - 1) & AMDM37X_DISPC_SIZE_WIDTH_MASK) 322 << AMDM37X_DISPC_SIZE_WIDTH_SHIFT) | 323 (((y - 1) & AMDM37X_DISPC_SIZE_HEIGHT_MASK) 324 << AMDM37X_DISPC_SIZE_HEIGHT_SHIFT); 325 326 /* modes taken from u-boot, for 1024x768 */ 327 // TODO replace magic values with actual correct values 328 // regs->timing_h = 0x1a4024c9; 329 // regs->timing_v = 0x02c00509; 330 // regs->pol_freq = 0x00007028; 331 // regs->divisor = 0x00010001; 332 333 /* setup output */ 334 regs->size_lcd = size_reg; 335 regs->size_dig = size_reg; 336 337 /* Nice blue default color */ 338 regs->default_color[0] = 0x0000ff; 339 regs->default_color[1] = 0x0000ff; 340 341 /* Setup control register */ 342 uint32_t control = 0 | 343 AMDM37X_DISPC_CONTROL_PCKFREEENABLE_FLAG | 344 (control_data_lanes << AMDM37X_DISPC_CONTROL_TFTDATALINES_SHIFT) | 345 AMDM37X_DISPC_CONTROL_GPOUT0_FLAG | 346 AMDM37X_DISPC_CONTROL_GPOUT1_FLAG; 347 regs->control = control; 348 349 /* No gamma stuff only data */ 350 uint32_t config = (AMDM37X_DISPC_CONFIG_LOADMODE_DATAEVERYFRAME 351 << AMDM37X_DISPC_CONFIG_LOADMODE_SHIFT); 352 regs->config = config; 353 354 355 /* Set framebuffer base address */ 356 regs->gfx.ba[0] = pa; 357 regs->gfx.ba[1] = pa; 358 regs->gfx.position = 0; 359 360 /* Setup fb size */ 361 regs->gfx.size = size_reg; 362 363 /* Set pixel format */ 364 uint32_t attribs = 0 | 365 (attrib_pixel_format << AMDM37X_DISPC_GFX_ATTRIBUTES_FORMAT_SHIFT); 366 regs->gfx.attributes = attribs; 367 368 /* 0x03ff03c0 is the default */ 369 regs->gfx.fifo_threshold = 0x03ff03c0; 370 /* This value should be stride - width, 1 means next pixel i.e. 371 * stride == width */ 372 regs->gfx.row_inc = 1; 373 /* number of bytes to next pixel in BPP multiples */ 374 regs->gfx.pixel_inc = 1; 375 /* only used if video is played over fb */ 376 regs->gfx.window_skip = 0; 377 /* Gamma and palette table */ 378 regs->gfx.table_ba = 0; 379 380 /* enable frame buffer graphics */ 381 regs->gfx.attributes |= AMDM37X_DISPC_GFX_ATTRIBUTES_ENABLE_FLAG; 382 /* Update register values */ 383 regs->control |= AMDM37X_DISPC_CONTROL_GOLCD_FLAG; 384 regs->control |= AMDM37X_DISPC_CONTROL_GODIGITAL_FLAG; 385 /* Enable output */ 386 regs->control |= AMDM37X_DISPC_CONTROL_LCD_ENABLE_FLAG; 387 regs->control |= AMDM37X_DISPC_CONTROL_DIGITAL_ENABLE_FLAG; 388 } 389 48 return EOK; 49 }; 50 static inline int amdm37x_dispc_fini(amdm37x_dispc_t *instance) 51 { 52 return EOK; 53 }; 390 54 391 55 #endif 392 /** 393 56 57 /** @} 394 58 */ 395 -
uspace/drv/fb/amdm37x_dispc/main.c
r163bc23 r74db5a1 28 28 */ 29 29 30 /** @addtogroup kfb30 /** @addtogroup amdm37x 31 31 * @{ 32 32 */ … … 35 35 */ 36 36 37 #include <ddf/log.h> 37 38 #include <errno.h> 39 #include <str_error.h> 38 40 #include <stdio.h> 41 #include <ops/graph_dev.h> 42 #include <graph.h> 39 43 #include "port.h" 44 45 #include "amdm37x_dispc.h" 40 46 41 47 #define NAME "amdm37x_dispc" 42 48 49 static graph_dev_ops_t graph_vsl_dev_ops = { 50 .connect = (connect_func) &graph_visualizer_connection 51 }; 52 53 static ddf_dev_ops_t graph_fun_ops = { 54 .interfaces[GRAPH_DEV_IFACE] = &graph_vsl_dev_ops 55 }; 56 43 57 static int amdm37x_dispc_dev_add(ddf_dev_t *dev) 44 58 { 45 port_init(dev); 46 printf("%s: Accepting connections\n", NAME); 59 ddf_fun_t *fun = ddf_fun_create(dev, fun_exposed, "dispc"); 60 if (!fun) { 61 ddf_log_error("Failed to create visualizer function\n"); 62 return ENOMEM; 63 } 64 amdm37x_dispc_t *dispc = 65 ddf_fun_data_alloc(fun, sizeof(amdm37x_dispc_t)); 66 if (!dispc) { 67 ddf_log_error("Failed to allocate dispc structure\n"); 68 ddf_fun_destroy(fun); 69 return ENOMEM; 70 } 71 ddf_fun_set_ops(fun, &graph_fun_ops); 72 int ret = amdm37x_dispc_init(dispc); 73 if (ret != EOK) { 74 ddf_log_error("Failed to init dispc: %s\n", str_error(ret)); 75 ddf_fun_destroy(fun); 76 return ret; 77 } 78 ret = ddf_fun_bind(fun); 79 if (ret != EOK) { 80 ddf_log_error("Failed to bind function: %s\n", str_error(ret)); 81 amdm37x_dispc_fini(dispc); 82 ddf_fun_destroy(fun); 83 return ret; 84 } 47 85 return EOK; 48 86 } … … 60 98 { 61 99 printf("%s: HelenOS AM/DM37x framebuffer driver\n", NAME); 100 ddf_log_init(NAME); 62 101 return ddf_driver_main(&amdm37x_dispc_driver); 63 102 }
Note:
See TracChangeset
for help on using the changeset viewer.