T507 CIR接收器
平台:OKT507
系统:Android10.0
CIR 接收器具有以下特点:
· 全物理层实现
· 支持CIR遥控或无线键盘
·64x8 位 FIFO 用于数据缓冲区
· 可编程FIFO阈值
· 中断支持
· 采样时钟高达 1 MHz
结构框图:
硬件原理如下:
设备树配置:
s_cir0: s_cir@07040000 {
compatible = "allwinner,s_cir";
reg = <0x0 0x07040000 0x0 0x400>;
interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&s_cir0_pins_a>;
clocks = <&clk_hosc>,<&clk_cpurcir>;
supply = "vcc-pl";
supply_vol = "3300000";
status = "okay";
};
s_cir0_pins_a: s_cir0@0{
allwinner,pins = "PH10";
allwinner,function = "ir";
allwinner,muxsel = <3>;
allwinner,drive = <2>;
allwinner,pull = <1>;
};
驱动文件
kernel/linux-4.9/drivers/media/rc/sunxi-ir-dev.c
static int sunxi_ir_recv_probe(struct platform_device *pdev)
/* get dt and sysconfig */
sunxi_ir_startup(pdev, ir_data);
//rc dev allocate
allocate memory for new input device
rc_allocate_device
struct rc_dev //结构体赋值
sunxi_rcdev->map_name = RC_MAP_SUNXI;
init_sunxi_ir_map
rc_map_register // 将rc_map注册到rc_map_list 链表中
//register rc device
rc_register_device(sunxi_rcdev);
//ir request i2c gpio,配置时钟寄存器
ir_setup(ir_data)
//存储申请的内存区域的指针
platform_set_drvdata(pdev, ir_data);
申请中断
参考链接
https://blog.csdn.net/skycover/article/details/69950727
static inline void platform_set_drvdata(struct platform_device *pdev, void *data)目的存储用户在probe()中主动申请的内存区域的指针以防止丢失
static inline void *platform_get_drvdata(const struct platform_device *pdev)则是将其取出。
=======================================================================
平台:OKxx18
系统:Android5.1
驱动文件
linux/kernel/kernel-3.4.39/drivers/media/rc/ppm-nxp.c