tiny4412 linux-4.2 移植(二)背光驱动

简介

tiny4412的LCD上有一个STM8单片机控制背光和传输触屏数据,4412通过一线协议跟它通讯

dts

/dts-v1/;
#include "exynos4412.dtsi"
#include <dt-bindings/gpio/gpio.h>


/ {
   
    model = "FriendlyARM TINY4412 board based on Exynos4412";
    compatible = "friendlyarm,tiny4412", "samsung,exynos4412", "samsung,exynos4";
    .......
    backlight_demo_dts@139D0000{
   
        compatible = "tiny4412,backlight_demo";
        reg = <0x139D0000 0x1000>;
        pinctrl-names = "backlight_in", "backlight_out";
        pinctrl-0 = <&backlight_in>;
        pinctrl-1 = <&backlight_out>;
        tiny4412,backlight = <&gpx1 2 GPIO_ACTIVE_HIGH>;
        clock-names = "timers";
        clocks = <&clock CLK_PWM>;
        interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; //GIC_SPI :共享中断 GIC_PPI  :每个处理器拥有独立中断
                //不同厂家的pwm的表示是不一样的,具体看厂家代码实现 https://www.cnblogs.com/pengdonglin137/p/5172155.html
                //第一个数 0:使用的那个PWM,这里我们传递的是0,表示获得PWM0对应的pwm_device
                //第二个数 1000000000:我们把PWM的周期设置为了1000000000纳秒,也就是1秒
               //第三个数 0:表示是否翻转
        pwms = <&pwm 0 1000000000 0>;   
    };
};

&pinctrl_1 {
   
    backlight_out: backlight_out {
   
      samsung,pins = "gpx1-2";
      samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
      samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
      samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
    };


    backlight_in: backlight_in {
   
      samsung,pins = "gpx1-2";
      samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
      samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
      samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
    };
};

tiny4412_1wire.c

//参考友善自带的 Tiny4412_1wire_host.c                                                                                 
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/bitops.h>
#include <linux/clk.h>
#include <linux/export.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/pwm.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/time.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/uaccess.h>


/*
    PWM 时钟频率 100M
    100M / 250 / 4 = 100000
    1/100000 = 10us
*/


static int              major;
static struct   cdev    backlight_cdev;
static struct   class   *cls;
static struct pinctrl   *pctrl;
static struct pinctrl_state *pstate_in;
static struct pinctrl_state *pstate_out;
static int              one_write_pin;


struct TIMER_BASE    /*对应PWM base地址 相关变量被赋值为0x139D_0000*/
{
   
    unsigned int TCFG0;
    unsigned int TCFG1;
    unsigned int TCON;
    unsigned int TCNTB0;
    unsigned int TCMPB0;
    unsigned int TCNTO0;
    unsigned int TCNTB1;
    unsigned int TCMPB1;
    unsigned int TCNTO1;
    unsigned int TCNTB2;
    unsigned int TCMPB2;
    unsigned int TCNTO2;
    unsigned int TCNTB3;
    unsigned int TCMPB3;
    unsigned int TCNTO3;
    unsigned int TCNTB4;
    unsigned int TCBTO4;
    unsigned int TINT_CSTAT;
};


volatile static struct TIMER_BASE *timer = NULL;


static volatile unsigned int io_bit_count;
static volatile unsigned int io_data;


enum
{
   
    IDLE,
    START,
    REQUEST,
    WAITING,
    RESPONSE,
    STOPING,
} one_wire_status = IDLE;


static inline void stop_timer_for_1wire(void)
{
   
    unsigned long tcon;
    tcon = timer->TCON;
    tcon &= ~(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值