mt8735 andorid7.0 lcm Icn6202驱动(kernel)

这是一个关于mt8735平台Android 7.0系统中针对Icn6202液晶显示控制器(LCM)的驱动程序实现。该驱动包括了I2C通信接口,定义了设备名称、地址,并包含了初始化、注册和卸载的函数。此外,还包含了与GPIO交互的部分,用于电源管理和调试日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <linux/string.h>
#include <linux/wait.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/pinctrl/consumer.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>
#include <asm-generic/gpio.h>
#include "lcm_drv.h"
#include <linux/dma-mapping.h>

#include <asm/uaccess.h>
#ifdef CONFIG_MTK_BOOT
#include "mt_boot_common.h"
#endif

#include "upmu_common.h"
#include <linux/hrtimer.h>
#include <linux/vmalloc.h>
#include <linux/jiffies.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/slab.h>
#include <linux/bitops.h>
#include <linux/kernel.h>
#include <linux/time.h>


#include "lcm_drv.h"


#ifdef BUILD_LK
#include <platform/mt_gpio.h>
#include <platform/mt_i2c.h>

#include <string.h>
#elif defined(BUILD_UBOOT)
#include <asm/arch/mt_gpio.h>
#else

#endif

#ifdef BUILD_LK
#define LCD_DEBUG(fmt)  dprintf(CRITICAL, fmt)
#else
#define LCD_DEBUG(fmt)  pr_debug(fmt)
#endif


static size_t icn6202_iic_log_on = true;
#define icn6202_IIC_LOG(fmt, arg...) \
do { \
if (icn6202_iic_log_on) {printk("[icn6202]%s,#%d ", __func__, __LINE__); printk(fmt, ##arg);} \
}while (0)
        
#define icn6202_IIC_FUNC() \
    do { \
        if(icn6202_iic_log_on) printk("[icn6202] %s\n", __func__); \
    }while (0)


#define icn6202_DEVICE_NAME            "multibridge-icn6202"
#define icn6202_I2C_SLAVE_ADDR        0x58     
#define icn6202_I2C_DEVICE_ADDR_LEN   2
/*----------------------------------------------------------------------------*/
static int icn6202_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id);
static int icn6202_i2c_remove(struct i2c_client *client);
static struct i2c_client *icn6202_i2c_client = NULL;
static const struct i2c_device_id icn6202_i2c_id[] = { {icn6202_DEVICE_NAME,0},{}};
//static struct i2c_board_info __initdata i2c_icn6202 = { I2C_BOARD_INFO(icn6202_DEVICE_NAME, icn6202_I2C_SLAVE_ADDR>>1)};
/*----------------------------------------------------------------------------*/

#ifdef CONFIG_OF
static const struct of_device_id lcm_of_match[] = {
{ .compatible = "mediatek,ext_disp" },
{},            
};
#endif
struct i2c_driver icn6202_i2c_driver = {     
    .id_table = icn6202_i2c_id,                                 
    .probe = icn6202_i2c_probe,                                   
    .remove = icn6202_i2c_remove,    
.driver = {
.owner = THIS_MODULE,
.name = icn6202_DEVICE_NAME ,
#ifdef CONFIG_OF
.of_match_table = lcm_of_match,
        #en
### MT6762 芯片上的 Android 开发环境配置 #### 1. Java 环境准备 为了在 MT6762 上构建 Android 应用程序,首先需要确保系统中有合适的 JDK 安装。如果当前使用的 Java 版本不符合需求,则可以通过 `update-alternatives` 命令来调整所使用的 Java 和 Javac 的版本[^3]。 ```bash sudo update-alternatives --config java sudo update-alternatives --config javac ``` 这些命令允许开发者手动选择适合的 Java 运行时和编译器版本,从而满足特定开发工具链的需求。 --- #### 2. 配置虚拟机堆内存阈值 由于每个 Android 应用都在独立的 Dalvik/ART 虚拟机中运行,因此了解并设置合理的堆内存阈值非常重要。对于基于 MT6762 平台的应用来说,其堆内存大小通常由 `/system/build.prop` 文件中的参数决定: - **dalvik.vm.heapsize**: 表示最大可用堆内存。 - **dalvik.vm.heapstartsize**: 初始分配的堆内存大小。 例如,在某些设备上可能需要将该值设为更高的数值以支持复杂应用的运行[^2]: ```properties dalvik.vm.heapsize=256m dalvik.vm.heapstartsize=8m ``` 上述更改需谨慎操作,并且仅适用于具备 root 权限的情况。 --- #### 3. C++ 编程环境初始化 (CLion & NDK) 针对涉及底层功能实现的任务(比如游戏引擎或多媒体处理模块),推荐采用 CLion 结合 Android NDK 的方式进行开发。以下是具体步骤概述[^4]: - 打开 CLion 后创建一个新的项目 (`New Project`); - 设置目标语言为 C++14 或更高版本; - 创建完成后尝试运行默认代码片段验证环境是否正常工作; 一旦确认无误便可着手编写实际业务逻辑部分了! --- #### 4. ARM 工具链定制化安装 考虑到 MT6762 属于联发科旗下的 SoC 方案之一,它主要面向移动终端市场设计因而采用了 ARM 架构处理器作为核心计算单元。所以在部署相关 SDK / Toolchain 之前还需要特别留意几个选项的选择情况——尤其是关于安装路径方面的考量[^5] : 建议将软件包放置在一个简单易记的位置(如 C:\ARM),这样有助于后续维护过程中快速定位资源所在位置同时也便于修改对应 Makefile 中的相关定义项。 --- #### 总结说明 综上所述完成以上各环节准备工作之后就可以正式投入到基于 MediaTek Helio A22(MT6762)平台之上开展Android应用程序的研发活动当中去了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值