~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-s3c64xx/dev-backlight.c

Version: ~ [ linux-4.15-rc3 ] ~ [ linux-4.14.5 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.68 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.105 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.47 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.87 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.51 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.96 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.27.62 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
  3  *              http://www.samsung.com
  4  *
  5  * Common infrastructure for PWM Backlight for Samsung boards
  6  *
  7  * This program is free software; you can redistribute it and/or modify
  8  * it under the terms of the GNU General Public License version 2 as
  9  * published by the Free Software Foundation.
 10  */
 11 
 12 #include <linux/gpio.h>
 13 #include <linux/platform_device.h>
 14 #include <linux/slab.h>
 15 #include <linux/io.h>
 16 #include <linux/pwm_backlight.h>
 17 
 18 #include <plat/devs.h>
 19 #include <plat/gpio-cfg.h>
 20 
 21 #include "backlight.h"
 22 
 23 struct samsung_bl_drvdata {
 24         struct platform_pwm_backlight_data plat_data;
 25         struct samsung_bl_gpio_info *gpio_info;
 26 };
 27 
 28 static int samsung_bl_init(struct device *dev)
 29 {
 30         int ret = 0;
 31         struct platform_pwm_backlight_data *pdata = dev->platform_data;
 32         struct samsung_bl_drvdata *drvdata = container_of(pdata,
 33                                         struct samsung_bl_drvdata, plat_data);
 34         struct samsung_bl_gpio_info *bl_gpio_info = drvdata->gpio_info;
 35 
 36         ret = gpio_request(bl_gpio_info->no, "Backlight");
 37         if (ret) {
 38                 printk(KERN_ERR "failed to request GPIO for LCD Backlight\n");
 39                 return ret;
 40         }
 41 
 42         /* Configure GPIO pin with specific GPIO function for PWM timer */
 43         s3c_gpio_cfgpin(bl_gpio_info->no, bl_gpio_info->func);
 44 
 45         return 0;
 46 }
 47 
 48 static void samsung_bl_exit(struct device *dev)
 49 {
 50         struct platform_pwm_backlight_data *pdata = dev->platform_data;
 51         struct samsung_bl_drvdata *drvdata = container_of(pdata,
 52                                         struct samsung_bl_drvdata, plat_data);
 53         struct samsung_bl_gpio_info *bl_gpio_info = drvdata->gpio_info;
 54 
 55         s3c_gpio_cfgpin(bl_gpio_info->no, S3C_GPIO_OUTPUT);
 56         gpio_free(bl_gpio_info->no);
 57 }
 58 
 59 /* Initialize few important fields of platform_pwm_backlight_data
 60  * structure with default values. These fields can be overridden by
 61  * board-specific values sent from machine file.
 62  * For ease of operation, these fields are initialized with values
 63  * used by most samsung boards.
 64  * Users has the option of sending info about other parameters
 65  * for their specific boards
 66  */
 67 
 68 static struct samsung_bl_drvdata samsung_dfl_bl_data __initdata = {
 69         .plat_data = {
 70                 .max_brightness = 255,
 71                 .dft_brightness = 255,
 72                 .enable_gpio    = -1,
 73                 .init           = samsung_bl_init,
 74                 .exit           = samsung_bl_exit,
 75         },
 76 };
 77 
 78 static struct platform_device samsung_dfl_bl_device __initdata = {
 79         .name           = "pwm-backlight",
 80 };
 81 
 82 /* samsung_bl_set - Set board specific data (if any) provided by user for
 83  * PWM Backlight control and register specific PWM and backlight device.
 84  * @gpio_info:  structure containing GPIO info for PWM timer
 85  * @bl_data:    structure containing Backlight control data
 86  */
 87 void __init samsung_bl_set(struct samsung_bl_gpio_info *gpio_info,
 88         struct platform_pwm_backlight_data *bl_data)
 89 {
 90         int ret = 0;
 91         struct platform_device *samsung_bl_device;
 92         struct samsung_bl_drvdata *samsung_bl_drvdata;
 93         struct platform_pwm_backlight_data *samsung_bl_data;
 94 
 95         samsung_bl_device = kmemdup(&samsung_dfl_bl_device,
 96                         sizeof(struct platform_device), GFP_KERNEL);
 97         if (!samsung_bl_device)
 98                 return;
 99 
100         samsung_bl_drvdata = kmemdup(&samsung_dfl_bl_data,
101                                 sizeof(samsung_dfl_bl_data), GFP_KERNEL);
102         if (!samsung_bl_drvdata)
103                 goto err_data;
104 
105         samsung_bl_device->dev.platform_data = &samsung_bl_drvdata->plat_data;
106         samsung_bl_drvdata->gpio_info = gpio_info;
107         samsung_bl_data = &samsung_bl_drvdata->plat_data;
108 
109         /* Copy board specific data provided by user */
110         samsung_bl_device->dev.parent = &samsung_device_pwm.dev;
111 
112         if (bl_data->max_brightness)
113                 samsung_bl_data->max_brightness = bl_data->max_brightness;
114         if (bl_data->dft_brightness)
115                 samsung_bl_data->dft_brightness = bl_data->dft_brightness;
116         if (bl_data->lth_brightness)
117                 samsung_bl_data->lth_brightness = bl_data->lth_brightness;
118         if (bl_data->enable_gpio >= 0)
119                 samsung_bl_data->enable_gpio = bl_data->enable_gpio;
120         if (bl_data->init)
121                 samsung_bl_data->init = bl_data->init;
122         if (bl_data->notify)
123                 samsung_bl_data->notify = bl_data->notify;
124         if (bl_data->notify_after)
125                 samsung_bl_data->notify_after = bl_data->notify_after;
126         if (bl_data->exit)
127                 samsung_bl_data->exit = bl_data->exit;
128         if (bl_data->check_fb)
129                 samsung_bl_data->check_fb = bl_data->check_fb;
130 
131         /* Register the Backlight dev */
132         ret = platform_device_register(samsung_bl_device);
133         if (ret) {
134                 printk(KERN_ERR "failed to register backlight device: %d\n", ret);
135                 goto err_plat_reg2;
136         }
137 
138         return;
139 
140 err_plat_reg2:
141         kfree(samsung_bl_data);
142 err_data:
143         kfree(samsung_bl_device);
144 }
145 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp