| /* linux/arch/arm/mach-msm/board-swordfish-panel.c |
| * |
| * Copyright (c) 2009 Google Inc. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * Author: Dima Zavin <dima@android.com> |
| */ |
| |
| #include <linux/kernel.h> |
| #include <linux/init.h> |
| #include <linux/platform_device.h> |
| #include <linux/err.h> |
| |
| #include <asm/io.h> |
| #include <asm/mach-types.h> |
| |
| #include <mach/msm_fb.h> |
| |
| #include "board-swordfish.h" |
| #include "devices.h" |
| |
| #define CLK_NS_TO_RATE(ns) (1000000000UL / (ns)) |
| |
| int swordfish_panel_blank(struct msm_lcdc_panel_ops *ops) |
| { |
| /* TODO: Turn backlight off? */ |
| return 0; |
| } |
| |
| int swordfish_panel_unblank(struct msm_lcdc_panel_ops *ops) |
| { |
| /* TODO: Turn backlight on? */ |
| return 0; |
| } |
| |
| int swordfish_panel_init(struct msm_lcdc_panel_ops *ops) |
| { |
| return 0; |
| } |
| |
| static struct resource resources_msm_fb[] = { |
| { |
| .start = MSM_FB_BASE, |
| .end = MSM_FB_BASE + MSM_FB_SIZE, |
| .flags = IORESOURCE_MEM, |
| }, |
| }; |
| |
| static struct msm_lcdc_timing swordfish_lcdc_timing = { |
| .clk_rate = CLK_NS_TO_RATE(26), |
| .hsync_pulse_width = 60, |
| .hsync_back_porch = 81, |
| .hsync_front_porch = 81, |
| .hsync_skew = 0, |
| .vsync_pulse_width = 2, |
| .vsync_back_porch = 20, |
| .vsync_front_porch = 27, |
| .vsync_act_low = 0, |
| .hsync_act_low = 0, |
| .den_act_low = 0, |
| }; |
| |
| static struct msm_fb_data swordfish_lcdc_fb_data = { |
| .xres = 800, |
| .yres = 480, |
| .width = 94, |
| .height = 57, |
| .output_format = 0, |
| }; |
| |
| static struct msm_lcdc_panel_ops swordfish_lcdc_panel_ops = { |
| .init = swordfish_panel_init, |
| .blank = swordfish_panel_blank, |
| .unblank = swordfish_panel_unblank, |
| }; |
| |
| static struct msm_lcdc_platform_data swordfish_lcdc_platform_data = { |
| .panel_ops = &swordfish_lcdc_panel_ops, |
| .timing = &swordfish_lcdc_timing, |
| .fb_id = 0, |
| .fb_data = &swordfish_lcdc_fb_data, |
| .fb_resource = &resources_msm_fb[0], |
| }; |
| |
| static struct platform_device swordfish_lcdc_device = { |
| .name = "msm_mdp_lcdc", |
| .id = -1, |
| .dev = { |
| .platform_data = &swordfish_lcdc_platform_data, |
| }, |
| }; |
| |
| int __init swordfish_init_panel(void) |
| { |
| int rc; |
| if (!machine_is_swordfish()) |
| return 0; |
| |
| if ((rc = platform_device_register(&msm_device_mdp)) != 0) |
| return rc; |
| |
| if ((rc = platform_device_register(&swordfish_lcdc_device)) != 0) |
| return rc; |
| |
| return 0; |
| } |
| |
| device_initcall(swordfish_init_panel); |