国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 4515|回復(fù): 4
打印 上一主題 下一主題

iTOP-4412開(kāi)發(fā)板-驅(qū)動(dòng)-linux顯卡驅(qū)動(dòng)的修改方法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2018-10-30 10:41:50 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本文檔介紹迅為4412開(kāi)發(fā)板的顯卡分辨率修改方法。
iTOP-4412 開(kāi)發(fā)板支持 4.3 寸、7 寸和 9.7 寸等 lcd 顯示屏。其中 4.3 寸屏是用的 cpu
直接出來(lái)的 RGB 信號(hào),7 寸屏和 9.7 寸屏是用的 LVDS 信號(hào),硬件上使用了一個(gè) RGB 轉(zhuǎn)
LVDS 的芯片實(shí)現(xiàn)的。我們來(lái)看下顯示驅(qū)動(dòng),顯示驅(qū)動(dòng)在內(nèi)核的“drivers/video/samsung”
目錄下面,這個(gè)驅(qū)動(dòng)是三星提供好的,只講下需要修改的幾個(gè)文件。
首先是關(guān)于屏幕的分辨率的修改,因?yàn)椴煌钠聊环直媛剩l率以及其他一些硬件參數(shù)是
不同的,所以我們需要根據(jù)這些參數(shù)去配置 cpu 的顯示控制器,關(guān)于這些參數(shù)是在
“driversvideo/samsung/s3cfb_wa101s.c”這個(gè)文件,打開(kāi)這個(gè)文件我們可以看到這個(gè)文
件主要就是定義了一個(gè)類型是 s3cfb_lcd 的變量 wa101,屏幕的硬件參數(shù)(分辨率,時(shí)鐘頻
率以及其它)就是保存在這個(gè)變量里面,現(xiàn)在我們來(lái)看下這個(gè)變量結(jié)構(gòu)類型的定義:
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 是時(shí)鐘頻率,bpp 是數(shù)據(jù)位。timing 是
屏幕的其他一些參數(shù),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;
};
這個(gè)結(jié)構(gòu)代表屏幕的左間距,右間距,水平同步信號(hào)寬度,垂直同步信號(hào)的有效行數(shù)等屏
幕的硬件參數(shù),這些參數(shù)可以通過(guò)查看屏幕的數(shù)據(jù)手冊(cè)獲得。
下面是 polarity 變量,他的定義如下:
struct s3cfb_lcd_polarity {
int rise_vclk;
int inv_hsync;
int inv_vsync;
int inv_vden;
};
這個(gè)變量代表時(shí)鐘行場(chǎng)的極性。
通過(guò)修改這個(gè)文件里面的這些參數(shù)就可以設(shè)置 cpu 的顯示控制器來(lái)支持我們使用的 lcd
屏幕了。
下面我們來(lái)看一下 lcd 的控制文件:arch/arm/mach-exynos/setup-fb-s5p.c 在這個(gè)文
件的 s3cfb_cfg_gpio 函數(shù)完成 LCD 數(shù)據(jù)引腳初始化, 驅(qū)動(dòng)能力設(shè)為最高
S5P_GPIO_DRVSTR_LV4;管腳驅(qū)動(dòng)能力,S5P_GPIO_DRVSTR_LV1-4 四個(gè)等級(jí)選擇,并且
設(shè)置 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
}
然后是時(shí)鐘控制函數(shù),完成時(shí)鐘的使能和關(guān)閉:
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 函數(shù),這個(gè)是使能屏幕顯示,s3cfb_backlight_off 關(guān)閉屏幕
顯示。

沙發(fā)
 樓主| 發(fā)表于 2019-1-2 15:09:49 | 只看該作者
473143805qq.com 發(fā)表于 2018-12-4 10:20
為分享文章點(diǎn)贊

板凳
發(fā)表于 2018-12-4 10:20:02 | 只看該作者
為分享文章點(diǎn)贊
地板
發(fā)表于 2018-12-27 10:58:34 | 只看該作者
4412
地下室
發(fā)表于 2019-1-7 11:35:06 | 只看該作者
學(xué)習(xí)該篇文章,多謝分享內(nèi)容

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天堂在线91 | 在线看片 在线播放 | 久久只有精品 | 手机看片高清日韩精品 | 神马我不卡影视 | 日本系列 1页 亚洲系列 | 天天摸天天舔天天操 | 丝袜美腿视频一区二区三区 | 国产女同一区二区三区五区 | 欧美成人观看免费完全 | 影音先锋色先锋女同另类 | 幻女与人xx00毛片免费 | 毛片一级毛片 | 欧洲做视频在线观看 | 国产精品资源 | 第三人称复仇韩剧在线观看免费 | 成人欧美网站免费 | 五月天精品 | 亚洲欧美自拍一区 | 久久99蜜桃精品久久久久小说 | 特级毛片aaaa免费观看 | 日韩精品免费视频 | free俄罗斯性xxxx | 毛片免费视频 | 欧美一区二区三区高清不卡tv | 国产成人无精品久久久久国语 | 毛片视频网站 | 果冻传媒国产精品 | 香蕉国产综合久久猫咪 | 国产美女极品免费视频 | 欧美一区二区三区不卡视频 | 日韩欧美在线精品 | 失乐园日本电视剧第1集第8 | 91香蕉国产视频 | 青青综合在线 | 一区二区欧美视频 | 中文字幕热久久久久久久 | 91日韩视频 | 欧洲成人免费高清视频 | 国产香蕉尹人综合在线观 | 奶茶app下载网址进入下载 |