18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * File: arch/arm/plat-omap/fb.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Framebuffer device registration for TI OMAP platforms 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Copyright (C) 2006 Nokia Corporation 88c2ecf20Sopenharmony_ci * Author: Imre Deak <imre.deak@nokia.com> 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/module.h> 128c2ecf20Sopenharmony_ci#include <linux/kernel.h> 138c2ecf20Sopenharmony_ci#include <linux/mm.h> 148c2ecf20Sopenharmony_ci#include <linux/init.h> 158c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 168c2ecf20Sopenharmony_ci#include <linux/memblock.h> 178c2ecf20Sopenharmony_ci#include <linux/io.h> 188c2ecf20Sopenharmony_ci#include <linux/omapfb.h> 198c2ecf20Sopenharmony_ci#include <linux/dma-mapping.h> 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#include <asm/mach/map.h> 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_FB_OMAP) 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistatic bool omapfb_lcd_configured; 268c2ecf20Sopenharmony_cistatic struct omapfb_platform_data omapfb_config; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistatic u64 omap_fb_dma_mask = ~(u32)0; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistatic struct platform_device omap_fb_device = { 318c2ecf20Sopenharmony_ci .name = "omapfb", 328c2ecf20Sopenharmony_ci .id = -1, 338c2ecf20Sopenharmony_ci .dev = { 348c2ecf20Sopenharmony_ci .dma_mask = &omap_fb_dma_mask, 358c2ecf20Sopenharmony_ci .coherent_dma_mask = DMA_BIT_MASK(32), 368c2ecf20Sopenharmony_ci .platform_data = &omapfb_config, 378c2ecf20Sopenharmony_ci }, 388c2ecf20Sopenharmony_ci .num_resources = 0, 398c2ecf20Sopenharmony_ci}; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_civoid __init omapfb_set_lcd_config(const struct omap_lcd_config *config) 428c2ecf20Sopenharmony_ci{ 438c2ecf20Sopenharmony_ci omapfb_config.lcd = *config; 448c2ecf20Sopenharmony_ci omapfb_lcd_configured = true; 458c2ecf20Sopenharmony_ci} 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic int __init omap_init_fb(void) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci /* 508c2ecf20Sopenharmony_ci * If the board file has not set the lcd config with 518c2ecf20Sopenharmony_ci * omapfb_set_lcd_config(), don't bother registering the omapfb device 528c2ecf20Sopenharmony_ci */ 538c2ecf20Sopenharmony_ci if (!omapfb_lcd_configured) 548c2ecf20Sopenharmony_ci return 0; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci return platform_device_register(&omap_fb_device); 578c2ecf20Sopenharmony_ci} 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciarch_initcall(omap_init_fb); 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#else 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_civoid __init omapfb_set_lcd_config(const struct omap_lcd_config *config) 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci} 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci#endif 68