| /* drivers/video/msm_fb/mddi_client_dummy.c |
| * |
| * Support for "dummy" mddi client devices which require no |
| * special initialization code. |
| * |
| * Copyright (C) 2007 Google Incorporated |
| * |
| * 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. |
| */ |
| |
| #include <linux/slab.h> |
| #include <linux/module.h> |
| #include <linux/kernel.h> |
| #include <linux/platform_device.h> |
| |
| #include <linux/platform_data/video-msm_fb.h> |
| |
| struct panel_info { |
| struct platform_device pdev; |
| struct msm_panel_data panel_data; |
| }; |
| |
| static int mddi_dummy_suspend(struct msm_panel_data *panel_data) |
| { |
| return 0; |
| } |
| |
| static int mddi_dummy_resume(struct msm_panel_data *panel_data) |
| { |
| return 0; |
| } |
| |
| static int mddi_dummy_blank(struct msm_panel_data *panel_data) |
| { |
| return 0; |
| } |
| |
| static int mddi_dummy_unblank(struct msm_panel_data *panel_data) |
| { |
| return 0; |
| } |
| |
| static int mddi_dummy_probe(struct platform_device *pdev) |
| { |
| struct msm_mddi_client_data *client_data = pdev->dev.platform_data; |
| struct panel_info *panel = |
| kzalloc(sizeof(struct panel_info), GFP_KERNEL); |
| int ret; |
| if (!panel) |
| return -ENOMEM; |
| platform_set_drvdata(pdev, panel); |
| panel->panel_data.suspend = mddi_dummy_suspend; |
| panel->panel_data.resume = mddi_dummy_resume; |
| panel->panel_data.blank = mddi_dummy_blank; |
| panel->panel_data.unblank = mddi_dummy_unblank; |
| panel->panel_data.caps = MSMFB_CAP_PARTIAL_UPDATES; |
| panel->pdev.name = "msm_panel"; |
| panel->pdev.id = pdev->id; |
| platform_device_add_resources(&panel->pdev, |
| client_data->fb_resource, 1); |
| panel->panel_data.fb_data = client_data->private_client_data; |
| panel->pdev.dev.platform_data = &panel->panel_data; |
| ret = platform_device_register(&panel->pdev); |
| if (ret) { |
| kfree(panel); |
| return ret; |
| } |
| return 0; |
| } |
| |
| static int mddi_dummy_remove(struct platform_device *pdev) |
| { |
| struct panel_info *panel = platform_get_drvdata(pdev); |
| kfree(panel); |
| return 0; |
| } |
| |
| static struct platform_driver mddi_client_dummy = { |
| .probe = mddi_dummy_probe, |
| .remove = mddi_dummy_remove, |
| .driver = { .name = "mddi_c_dummy" }, |
| }; |
| |
| static int __init mddi_client_dummy_init(void) |
| { |
| platform_driver_register(&mddi_client_dummy); |
| return 0; |
| } |
| |
| module_init(mddi_client_dummy_init); |
| |