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.pswp.cn/news/443042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443042.shtml
英文地址,請注明出處:http://en.pswp.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…