iTOP 4412開發板LCD的螢幕驅動

2021-08-18 10:54:27 字數 3872 閱讀 4861

開發板 

lcd 

的螢幕驅動, 

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 ;

其中的 width 

和 height 

指螢幕的解析度,

freq 

是時鐘頻率,

bpp 

是資料位。

timing 

是螢幕的其他一些引數,

timing 的型別定義如下:

struct s3cfb_lcd_timing ;

這個結構代表螢幕的左間距,右間距,水平同步訊號寬度,垂直同步訊號的有效行數等螢幕的硬體引數,這些

引數可以通過檢視螢幕的資料手冊獲得。

下面是 polarity 

變數,他的定義如下:

struct s3cfb_lcd_polarity ;

這個變數代表時鐘行場的極性。

通過修改這個檔案裡面的這些引數就可以設定 cpu 

的顯示控制器來支援我們使用的 

lcd 

螢幕了。

itio-4412 開發板核心啟動時 

lcd 

會顯示 

logo

,關於這個 

logo 

是儲存在「

drivers/video/samsung/

itop-4412.h」檔案,開啟這個檔案,會看到裡面指示定義了乙個陣列 

ibitmapdata_q

,這個陣列的內容就是

要顯示的 logo

。我們修改 

logo

,就需要準備一張 

480x640 

的 bmp 

然後使用 

image2lcd 

軟體轉換成

陣列,把 ibitmapdata_q 

裡面的內容用新生成的陣列替換掉。

有 可 能 我 們 自 己 制 作 的 logo 

沒 有 顯 示 在 屏 幕 的 最 中 央 , 那 我 們 需 要 修 改 下 文 件

「drivers/video/samsung/ s3cfb_ops.c

」 ,在這個檔案找到函式:

s3cfb_draw_logo

int s3cfb_draw_logo(struct fb_info *fb)

else

top = 170;

left = 230;

index = 0;

for (i = 0; i < 480; i++) 

}#endif

#endif

return 0;

}修改這個函式裡面的 top 

和 left 

就可以控制在螢幕顯示的位置了。

下面我們來看一下 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)

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)

ret = clk_enable(lcd_clk);

if (ret < 0) 

clk_put(lcd_clk);

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

if (is_err(sclk)) 

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)) 

ret = clk_set_parent(sclk, mout_mpll);

if (ret < 0) 

ret = clk_set_rate(sclk, 800000000);

if (ret < 0) 

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

clk_put(mout_mpll);

ret = clk_enable(sclk);

if (ret < 0) 

*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)

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)

然後是 s3cfb_backlight_on 

函式,這個是使能螢幕顯示,

s3cfb_backlight_off 

關閉螢幕顯示。

iTOP 4412開發板刷ubuntu

此文章講解了itop 4412開發板上刷寫ubuntu的流程。android qt 最小linux系統的刷寫也可以此為參考,但這三個系統更建議使用fastboot刷寫方式,速度更快,更簡單。準備工具 2g以上大小tf卡乙個 ubuntu虛擬機器 其他linux虛擬機器也可 乙個 超級終端 secur...

迅為iTOP 4412開發板精英版

核心板引數 核心板尺寸 60mm 70mm 高度 連同聯結器在內2.6mm cpu exynos4412,四核cortex a9,主頻為1.4ghz 1.6ghz 記憶體 1gb 雙通道 ddr3 2gb可選 儲存 4gb emmc 16gb可選 電源管理 低功耗動態三星s5m8767電源管理,最優...

iTOP 4412開發板 mqtt移植教程(二)

基於迅為itop 4412開發板在 ubuntu 的 home topeet 下建立乙個 mqtt arm 的資料夾,如下圖所示 我們進入我們安裝的 mosquitto 1.5 目錄下,作者這裡是安裝在了 opt mosquitto arm 下,如下圖所示 我們把當前路徑下的 etc mosquit...