基於S3C2440的Linux-3.6.6移植——LCD背光的控制

來源:互聯網
上載者:User

 

在我的開發板上,通過S3C2440的GPG4引腳可以控制LCD的背光,即置1時LCD點亮,清零時LCD關閉。

 

Linux系統把LCD背光定義成LED平台裝置。在Mach-zhaocj2440.c檔案內,它的定義為:

static struct s3c24xx_led_platdata  zhaocj2440_led_backlight_pdata = {

       .name             = "backlight",

       .gpio              = S3C2410_GPG(4),

       .def_trigger    = "backlight",

};

 

static struct platform_device  zhaocj2440_led_backlight= {

       .name             = "s3c24xx_led",

       .id          = 5,

       .dev        = {

              .platform_data       = &zhaocj2440_led_backlight_pdata,

       },

};

 

如果要為系統添加控制LCD背光的功能,只需要在zhaocj2440_features_str數組內添加一個"b"欄位(b表示背光)即可,即:

static char zhaocj2440_features_str[12]__initdata = "4tb";

 

系統通過zhaocj2440_parse_features函數,把zhaocj2440_features_str數組內給出的各個裝置逐一放入到features結構中,然後再通過zhaocj2440_init函數中的下列語句把上述裝置添加到平台匯流排上:

if (features.count)   /* the optional features */

       platform_add_devices(features.optional,features.count);

 

由於系統是把LCD背光看成是LED裝置,因此它的平台驅動也和LED的平台驅動一樣,即:

static struct platform_driver  s3c24xx_led_driver = {

       .probe            = s3c24xx_led_probe,

       .remove          = s3c24xx_led_remove,

       .driver            = {

              .name             = "s3c24xx_led",

              .owner           = THIS_MODULE,

       },

};

 

關於LED的驅動,我在前面的文章中比較詳細的介紹過,這裡就不再贅述。

 

還有一點需要注意的是,系統初始化時,對控制LED的引腳設定是低電平的,因此系統啟動後LED是不亮的。同樣的,控制背光的GPG4引腳預設也是低電平,所以啟動系統的時候,LCD也是不亮的。這樣的設定對LED沒什麼不妥,但對LCD就不適合了。因此我們要改變對背光引腳的預設設定,讓它為高電平。為了實現上述功能,只需要在Leds-s3c24xx.c檔案內(drivers/leds目錄下)的s3c24xx_led_probe函數中的適當位置(大約在第107行附件)添加下列語句即可:

if(pdata->name == "backlight")

        gpio_set_value(pdata->gpio,1);

 

下面我們寫一段應用程式來控制LCD的背光:

/****************

****backlight.c****

*****************/

#include<stdint.h>

#include<string.h>

#include<fcntl.h>

#include<unistd.h>

#include<stdio.h>

#include<linux/input.h>

#include<unistd.h>

 

int main(int argc, char *argv[])

{

  int fd;

 

  fd =open("/sys/class/leds/backlight/brightness", O_RDWR);

 if(fd<0)

    {

      printf("can not open file.\n");

      return -1;

    }

 

 if(!strcmp(argv[1], "on"))  

     write(fd, “1”,1);

 else  if(!strcmp(argv[1], "off"))

write(fd, “0”, 1);

 

close(fd);

  return 0;

}

 

把程式編譯好後下載到temp目錄下,運行:

[root@zhaocj /temp]# ./backlight  on

開啟背光,LCD可以顯示

 

[root@zhaocj /temp]# ./backlight  off

關閉背光,LCD不能顯示

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.