第一章 基于linux 3.4.2内核的S3C24xx的LED程序学习笔记

在学习这位作者对S3C24xx的LED驱动程序笔记的基础上,整理下自己的学习笔记,加深理解。
参考:https://blog.csdn.net/woshidahuaidan2011/article/details/51695106

首先common-smdk.c函数位于linux-3.4.2\arch\arm\mach-s3c24xx目录下
1.构建设备信息结构体

static struct s3c24xx_led_platdata smdk_pdata_led4 = {
    .gpio       = S3C2410_GPF(4),
    .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
    .name       = "led4",
    .def_trigger    = "timer",
};

struct s3c24xx_led_platdata {
    unsigned int         gpio;
    unsigned int         flags;

    char            *name;
    char            *def_trigger;
};

该结构体中包含设备的名称、设备的引脚、标志(低电平有效也就是低电平灯亮,三态无效)以及触发方式。
目前有以下几种触发方式:
“backlight” – 受帧缓存器系统的控制,led此时作为背光灯LED
“default-on” – 此时led亮灭受对应LED引脚的控制
“heartbeat” –led收到其控制频率的双倍的闪动
“ide-disk” - LED 指示磁盘有活动
“timer” - LED 以设定的频率闪动

2.定义平台设备信息

static struct platform_device smdk_led4 = {
    .name       = "s3c24xx_led",
    .id     = 0,
    .dev        = {
        .platform_data = &smdk_pdata_led4,
    },
};

struct platform_device {
    const char  * name;
    int     id;
    struct device   dev;
    u32     num_resources;
    struct resource * resource;

    const struct platform_device_id *id_entry;

    /* MFD cell pointer */
    struct mfd_cell *mfd_cell;

    /* arch specific additions */
    struct pdev_archdata    archdata;
};

这里定义平台设备信息,这里的三个led的平台设备名称为s3c24xx_led,改名字用作sys/device下显示的目录名,这个名字很重要,后期设备信息与驱动的匹配就依靠该设备名;接下来是id号码,id用于给具有相同平台设备名的几个设备各自不同的编号,如果只有一个设备,通常填-1;然后是一个设备结构体,这里只填写该结构体的platform_data信息,在结构体device中,platform_data就是linux为了适应不同的单板(比如单板的封装、硬件的引脚的连线等不同),告诉系统本单板是如何连线等硬件结构的。比如led通过platform_data指出了其连接led的引脚,工作状态,led单个设备的名字和触发方式等信息。系统通过调用dev_get_platdata函数来获取platform_data的信息。
从c语言定义上来理解platform_data的话,其定义 void *platform_data,也就是一个void类型的指针,可以指向任何类型,因此可以理解为platform_data可以是人为任意定义的东西,这个东西只是让驱动设计者传递驱动程序想要传入进去的信息而已。

3.若平台设备信息有多个,则定义一个platform_device结构体数组指针

/* devices we initialise */
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值