linux显卡内核修改,iTOP-4412开发板-驱动-linux显卡驱动的修改方法

本文档介绍迅为4412开发板的显卡分辨率修改方法。

iTOP-4412 开发板支持 4.3 寸、7 寸和 9.7 寸等 lcd 显示屏。其中 4.3 寸屏是用的 cpu

直接出来的 RGB 信号,7 寸屏和 9.7 寸屏是用的 LVDS 信号,硬件上使用了一个 RGB 转

LVDS 的芯片实现的。我们来看下显示驱动,显示驱动在内核的“drivers/video/samsung”

目录下面,这个驱动是三星提供好的,只讲下需要修改的几个文件。

首先是关于屏幕的分辨率的修改,因为不同的屏幕分辨率,频率以及其他一些硬件参数是

不同的,所以我们需要根据这些参数去配置 cpu 的显示控制器,关于这些参数是在

“driversvideo/samsung/s3cfb_wa101s.c”这个文件,打开这个文件我们可以看到这个文

件主要就是定义了一个类型是 s3cfb_lcd 的变量 wa101,屏幕的硬件参数(分辨率,时钟频

率以及其它)就是保存在这个变量里面,现在我们来看下这个变量结构类型的定义:

struct s3cfb_lcd {

int width;

int height;

int bpp;

int freq;

struct s3cfb_lcd_timing timing;

struct s3cfb_lcd_polarity polarity;

void (*init_ldi)(void);

void (*deinit_ldi)(void);

};

其中的 width 和 height 指屏幕的分辨率,freq 是时钟频率,bpp 是数据位。timing 是

屏幕的其他一些参数,timing 的类型定义如下:

struct s3cfb_lcd_timing {

int h_fp;

int h_bp;

int h_sw;

int v_fp;

int v_fpe;

int v_bp;

int v_bpe;

int v_sw;

};

这个结构代表屏幕的左间距,右间距,水平同步信号宽度,垂直同步信号的有效行数等屏

幕的硬件参数,这些参数可以通过查看屏幕的数据手册获得。

下面是 polarity 变量,他的定义如下:

struct s3cfb_lcd_polarity {

int rise_vclk;

int inv_hsync;

int inv_vsync;

int inv_vden;

};

这个变量代表时钟行场的极性。

通过修改这个文件里面的这些参数就可以设置 cpu 的显示控制器来支持我们使用的 lcd

屏幕了。

下面我们来看一下 lcd 的控制文件:arch/arm/mach-exynos/setup-fb-s5p.c 在这个文

件的 s3cfb_cfg_gpio 函数完成 LCD 数据引脚初始化, 驱动能力设为最高

S5P_GPIO_DRVSTR_LV4;管脚驱动能力,S5P_GPIO_DRVSTR_LV1-4 四个等级选择,并且

设置 LVDS 芯片的使能引脚输出高:

void s3cfb_cfg_gpio(struct platform_device *pdev)

{

int err;

s3cfb_gpio_setup_24bpp(EXYNOS4_GPF0(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);

s3cfb_gpio_setup_24bpp(EXYNOS4_GPF1(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);

s3cfb_gpio_setup_24bpp(EXYNOS4_GPF2(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);

s3cfb_gpio_setup_24bpp(EXYNOS4_GPF3(0), 4, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV4);

#if 1 // TC4

//LVDS_PWDN

err = gpio_request(EXYNOS4_GPL1(0), "GPL1_0");

if (err) {

printk(KERN_ERR "failed to request GPL1 for "

"lcd power control\n");

return err;

}

gpio_direction_output(EXYNOS4_GPL1(0), 1);

s3c_gpio_cfgpin(EXYNOS4_GPL1(0), S3C_GPIO_OUTPUT);

gpio_free(EXYNOS4_GPL1(0));

#endif

}

然后是时钟控制函数,完成时钟的使能和关闭:

int s3cfb_clk_on(struct platform_device *pdev, struct clk **s3cfb_clk)

{

struct clk *sclk = NULL;

struct clk *mout_mpll = NULL;

struct clk *lcd_clk = NULL;

u32 rate = 0;

int ret = 0;

lcd_clk = clk_get(&pdev->dev, "lcd");

if (IS_ERR(lcd_clk)) {

dev_err(&pdev->dev, "failed to get operation clk for fimd\n");

goto err_clk0;

}

ret = clk_enable(lcd_clk);

if (ret < 0) {

dev_err(&pdev->dev, "failed to clk_enable of lcd clk for fimd\n");

goto err_clk0;

}

clk_put(lcd_clk);

sclk = clk_get(&pdev->dev, "sclk_fimd");

if (IS_ERR(sclk)) {

dev_err(&pdev->dev, "failed to get sclk for fimd\n");

goto err_clk1;

}

if (soc_is_exynos4210())

mout_mpll = clk_get(&pdev->dev, "mout_mpll");

else

mout_mpll = clk_get(&pdev->dev, "mout_mpll_user");

if (IS_ERR(mout_mpll)) {

dev_err(&pdev->dev, "failed to get mout_mpll for fimd\n");

goto err_clk2;

}

ret = clk_set_parent(sclk, mout_mpll);

if (ret < 0) {

dev_err(&pdev->dev, "failed to clk_set_parent for fimd\n");

goto err_clk2;

}

ret = clk_set_rate(sclk, 800000000);

if (ret < 0) {

dev_err(&pdev->dev, "failed to clk_set_rate of sclk for fimd\n");

goto err_clk2;

}

dev_dbg(&pdev->dev, "set fimd sclk rate to %d\n", rate);

clk_put(mout_mpll);

ret = clk_enable(sclk);

if (ret < 0) {

dev_err(&pdev->dev, "failed to clk_enable of sclk for fimd\n");

goto err_clk2;

}

*s3cfb_clk = sclk;

return 0;

err_clk2:

clk_put(mout_mpll);

err_clk1:

clk_put(sclk);

err_clk0:

clk_put(lcd_clk);

return -EINVAL;

}

int s3cfb_clk_off(struct platform_device *pdev, struct clk **clk)

{

struct clk *lcd_clk = NULL;

lcd_clk = clk_get(&pdev->dev, "lcd");

if (IS_ERR(lcd_clk)) {

printk(KERN_ERR "failed to get ip clk for fimd0\n");

goto err_clk0;

}

clk_disable(lcd_clk);

clk_put(lcd_clk);

clk_disable(*clk);

clk_put(*clk);

*clk = NULL;

return 0;

err_clk0:

clk_put(lcd_clk);

return -EINVAL;

}

void s3cfb_get_clk_name(char *clk_name)

{

strcpy(clk_name, "sclk_fimd");

}

然后是 s3cfb_backlight_on 函数,这个是使能屏幕显示,s3cfb_backlight_off 关闭屏幕显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-如何限制普通用户的磁盘使用空间-磁盘配额quota,Linux系统下如何进行磁盘配额Quota的设置...

Linux如何进行磁盘配额quota的设置通过quota进行磁盘配额&#xff0c;可以控制用户对磁盘空间和文件的控制&#xff0c;我们以一个实例作为说明&#xff0c;对&#xff12;个用户user01、user02分别进行磁盘使用空间和创建文件的限制。首先&#xff0c;创建一个新的分区&#x…

linux一台机器如何安装两个mysql,在一台linux机器上启动两个mysql实例

环境&#xff1a;linux主机上已经yum安装了mysql&#xff0c;而且数据库正在运行。在不关闭/重启mysql的情况下&#xff0c;重新启动一个新的mysql实例&#xff0c;使用3307端口&#xff0c;实现一台机器上同时运行两个数据库实例。1、创建新的mysql实例数据存储目录&#xff1…

linux和windows启动,Linux和Windows双系统的启动

问题Linux和Windows双系统的启动解决方案在某些特殊情况下&#xff0c;服务器可能要安装双系统一个linux系统&#xff0c;一个windows系统这种情况下&#xff0c;安装顺序是&#xff0c;先装Windows系统&#xff0c;后装Linux这是因为&#xff0c;Linux的引导程序grub具备多系统…

体积最小桌面linux,Tiny Core Linux - 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB)...

Tiny Core Linux (TCL) 是一款极体积极小且高度可扩展的微型 Linux 发行版&#xff0c;它将一个 Linux 操作系统精简到仅有 10 多 MB 左右的大小&#xff0c;似乎小巧得有点让人叹为观止&#xff01;要知道无论是常见的 Ubuntu、CentOS、Debian 的体积动辄就是几百MB甚至要上GB…

linux下缓存命中测试,Linux 性能优化实战(倪朋飞)---查看缓存命中情况

cachestat 提供了整个操作系统缓存的读写命中情况。cachetop 提供了每个进程的缓存命中情况。但是&#xff0c;cachetop 并不把直接 I/O 算进来。安装 cachestat、cachetop&#xff1a;$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD$ ech…

linux suid提权原理,Linux SUID、SGID、sticky提权

S UID SGID SOID 核心就在 “S” &#xff0c;S就是允许本圈子 用户有r,w,x ;例如&#xff1a;1、chmod sg test.txt 只允许testex.txt所在的组 员可以执行r,w,x2、chmod us test.txt2 只允许test.txt2的属主 执行r,w,x温馨提示&#xff1a;对SUID只需要有个了解就行了&#xf…

linux新建samba账户,ubuntu上创建账户和samba用户

系统环境&#xff1a;Linux ubuntu152 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64x86_64 GNU/Linux系统用户登录创建linux账户:1. sudo adduser username --home /home/username执行该命令后需要两次输入账户密码&#xff0c;连续回车&…

linux xorg.0.log,Red Hat无法登录,Cannot open log file /var/log/Xorg.0.log

命令截面输入ROOT帐号无效&#xff0c;几秒后弹出报错页面I cannot start the X server (your graphical interface ) It is likely it is not setup correctlyWould you like to view the X server output diagrose the problem?然后按YES后跳出Fatal server error:Cannot o…

c程序语言习题解答对编程有帮助吗,给C语言编程初学者的10个学习建议,助你学习事半功倍,不要错过...

对于初学者应该如何学习C语言编程开发技术&#xff0c;纵观中国目前整体行业来说&#xff0c;互联网IT行业 成为了拔尖的行业&#xff0c;IT互联网程序开发成了靠自己能力可以多挣一点钱&#xff0c;所以各个行业都在转行&#xff0c;其实互联网不存在饱和&#xff0c;只不过大…

跟世界打个招呼c语言编程,(一)helloworld

Idea下用SBT搭建Spark Helloworld没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8 然后加入S ...菜鸟学Struts2——HelloWorld写在前面 自从工作后就过上了只有一个月记忆的生活,太健忘,很…

求一份100行左右的C语言程序,求4个C语言程序 每个100行左右 大一水平的

2008-06-30 回答//链表问题//电话薄实现:可以输入,输出,插入,删除联系人信息.#include#include#includetypedef struct student{char address[20];char name[20];char mail[7];;char phone[10];struct student *next;}LNode;void creat_list( LNode **h ) //请输入联系人信息{L…

c语言INT16与int,C中int,Uint,uint16等有什么区别以及用处

在C中&#xff0c;既然有了int&#xff0c;为什么还要有uint&#xff1f;特别是uint16&#xff0c;uint32等又有什么用&#xff1f;他们有什么区别&#xff1f;”----------------------------------------------------------------------------------------------------------…

指针使用c语言,指针的使用(C语言)

/*例8.1 通过指针变量访问整型变量*//*#include的作用是提供相关的信息(当在使用标准)*//*stdio.h&#xff1a;是C编译系统提供的一个文件名*//*只需要记住&#xff1a;在程序中用到系统提供的标准函数库中的输入输出函数时&#xff0c;需要在程序开头写上#include这一行*/#inc…

在c语言中优先级最低的是6,C语言中 *,<<,= ,->哪个优先级最低

满意答案nishiwodezmx推荐于 2016.03.13采纳率&#xff1a;46% 等级&#xff1a;12已帮助&#xff1a;6812人最高的是->(指向运算符)再到*再到>>(右移运算符)再到(赋值运算符)c语言运算符号:1级优先级 左结合() 圆括号[] 下标运算符-> 指向结构体成员运算符. 结…

队列的顺序数组c语言代码,队列-队列的顺序表示和实现

队列-队列的顺序表示和实现和顺序栈相类似&#xff0c;在利用顺序分配存储结构实现队列时&#xff0c;除了用一维数组描述队列中数据元素的存储区域之外&#xff0c;尚需设立两个指针front和rear分别指示“队头”和“队尾”的位置。为了在C语言中描述方便&#xff0c;在此我们约…

android代码打开数据库,Android打开和关闭数据库

与计算机编程中的许多事情一样,关闭SQLite数据库的时间没有单一的“正确进行”(如果您正在使用它,则通过SQLiteOpenHelper上的close(),否则对SQLiteDatabase执行close()).一个相当硬的规则是不要同时跨多个线程为同一个数据库使用多个SQLiteDatabase对象.这可能会让你遇到麻烦,…

android 链接分享到朋友圈,android 分享到微信朋友圈或微信好友

一、首先创建一个数字签名(keystore文件)这里不再讲述keystore的创建过程&#xff01;二、用keystore给app签名&#xff0c;注意最后如下图所示图中的md5就是 申请apkid时所需的 签名&#xff0c;这里需要注意MD5需要将其中的“&#xff1a;”去掉并将其中的大写字母改为小写三…

android studio开源代码,Android Studio Set of source 代码源集

一、源集1、定义&#xff1a;Android Studio 按逻辑关系将每个模块的源代码和资源进行分组&#xff0c;这个分组叫做源集。2、main Module 源集包括其所有构建变体共用的代码和资源。这句话很关键&#xff0c;意思是&#xff0c;所有的其他构建变体&#xff0c;src/main是其共同…

android怎样禁用整个布局点击,Android - 自动禁用布局里的所有子控件

很久没有写博客了&#xff0c;今天给大家分享一个刚写好的小功能&#xff0c;很实用。使用场景&#xff1a;禁用布局里所有的子控件&#xff0c;让界面只能看&#xff0c;但不能编辑&#xff0c;如果一个一个控件去设置肯定是很麻烦的&#xff0c;于是想了个好方法。可根据需要…

android nougat和安卓7.1,Android Nougat 7.1.2 先睹为快

Android Nougat 的下一个维护版本 7.1.2 即将发布&#xff01;为了让广大开发者有机会抢先尝鲜&#xff0c;我们从今天开始向已注册 Android Beta 计划、符合条件的设备(包括 Pixel 和 Pixel XL、Nexus 5X、Nexus Player 和 Pixel C 设备)推出公众测试版本。我们还在准备 Nexus…