ITOP4412----基于4.19.99Linux内核的4.3寸显示屏驱动(三)

本章开始,主要检查第一章中编写的驱动代码,并记录检查的流程,讲从4412寄存器的中开始,不放过一点一滴的细节。

设备树源码

	/* LCD设备 */
	lcd_4_3@11C00000 {
   
		compatible = "itop4412, lcd_4_3";
		reg = <0x11C00000 0x20c0 0x10010210 0x08 0x10023c80 0x04 0x1003c000 0x1000>;
		pinctrl-names = "default";
		pinctrl-0 = <&lcd_4_3>;
		clocks = <&clock CLK_FIMD0 &clock CLK_ACLK160>;
		clock-names = "fimd0","aclk160";
	};

设备树源码对应寄存器

从设备树的LCD节点中,可以知道,4412的LCD设备主要使用了四个寄存器。这四个寄存器分别是:

系统控制寄存器、供电管理寄存器、时钟管理寄存器、FIMD外设寄存器,在手册的Memory Map章节中可以找到,在P84页。
在这里插入图片描述
在这里插入图片描述

系统控制寄存器----LCD内容:

主要配置接口、FIMD外设时钟是否供给。下图在手册P876页。
在这里插入图片描述
在这里插入图片描述

供电管理控制寄存器----LCD内容:

主要负责使能LCD电源输出。下图在P729页
在这里插入图片描述

时钟管理寄存器----LCD内容:

时钟管理寄存器主要配置几个方面:SRC寄存器时钟源选择、SRC_MASK寄存器决定时钟给不给外设、DIV时钟分频、GATE寄存器。

SRC寄存器时钟源选择,P501。
在这里插入图片描述
SRC_MASK寄存器,P514。
在这里插入图片描述
DIV时钟分频,P526。
在这里插入图片描述
GATE寄存器,P552。
在这里插入图片描述

FIMD外设寄存器

过长就不展开
在这里插入图片描述

驱动源码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/fb.h>
#include <linux/init.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>
#include <linux/wait.h>
#include <linux/platform_device.h>
#include <linux/clk.h>

#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/div64.h>

#include <asm/mach/map.h>
#include <linux/fb.h>
#include <asm/types.h>

#define         VIDCON0                 0x00//视频寄存器0
#define         VIDCON1                 0x04//视频寄存器1
#define         VIDCON2                 0x08//视频寄存器2
#define         VIDCON3                 0x0c//视频寄存器3
#define         VIDTCON0                0x10//LCD时序控制寄存器0
#define         VIDTCON1                0x14//LCD时序控制寄存器1
#define         VIDTCON2                0x18//LCD时序控制寄存器2
#define         VIDTCON3                0x1c//LCD时序控制寄存器3
#define         WINCON0                 0x20//窗口控制寄存器0
#define         SHADOWCON               0x34//阴影控制寄存器
#define         WINCHMAP2               0x3c//窗口和通道映射寄存器
#define         VIDOSD0A                0x40//窗口0位置控制寄存器
#define         VIDOSD0B                0x44//窗口0位置控制寄存器
#define         VIDOSD0C                0x48//窗口0大小控制寄存器

#define         VIDW00ADD0B0    0xA0//指定窗口起始地址寄存器
#define         VIDW00ADD1B0    0xD0//指定窗口借宿地址寄存器

#define         CLK_SRC_LCD0            0x234//时钟源配置寄存器偏移
#define         CLK_SRC_MASK_LCD        0x334//时钟复用器输出掩码,掩着就不输出
#define         CLK_DIV_LCD             0x534//FIMD时钟分频
#define         CLK_GATE_IP_LCD         0x934//时钟输出掩码

#define         LCDBLK_CFG                      0x00//系统控制LCD寄存器偏移,配置RGB接口或80接口等
#define         LCDBLK_CFG2                     0x04//PWM配置

#define         LCD_LENTH                       480
#define         LCD_WIDTH                       272
#define         BITS_PER_PIXEL          16



static int s3c_lcdfb_setcolreg(unsigned int regno, unsigned int red,
                               unsigned int green, unsigned int blue,
                               unsigned int transp, struct fb_info *info);


static struct fb_ops s3c_lcdfb_ops =
{
   
    .owner              = THIS_MODULE,
    .fb_setcolreg       = s3c_lcdfb_setcolreg,
    
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值