kernel:Bringup ti SN65DSI83-Q1/SN65DSI84-Q1

SN65DSI83是一个mipi转lvds的单路对单路转换器。-Q1个人认为是车规级产品

#SN65DSI84是mipi转lvds单路对双路转换器

#需要注意的是mipi clock以及lvds clock的计算方法. [github的imx6qp.sh上面有详解https://github.com/mazelinux/PATEO/blob/master/imx/imx6qp_readme.sh]

#一路mipi转两路lvds,需要注意h方向的分辨率:mipi是lvds的两倍.显示部分和隐藏部分均是.

 

支持I2c 挂载。i2c的从地址通过

将bit1的addr上拉或者下拉来判断.我们的电路图是下拉。所以address是0x58。

bringup的逻辑简单来说分几部分:dts声明设备的存在,对应驱动来驱动设备,硬件上接好设备。

1.dts

 &i2c_5 { /* BLSP2 QUP1 */
+         tixx@2c { /*ti csr ic:SN65DSI83-Q1 dsi2lvds*/
+                 compatible = "ti,tixx";
+                 reg = <0x2c>;
+         };
 };

 

2.驱动


/*!
 * @file tixx.c
 *
 * @brief tixx GMSL1 DSI Serializer driver
 *
 * @ingroup LCD
 */
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <linux/pinctrl/consumer.h>
#include <linux/regulator/consumer.h>
#include <linux/workqueue.h>
#include <linux/jiffies.h>
#include <linux/notifier.h>
#include <linux/mutex.h>

/***********************************************************************
 * WORKQUEUE .
 ***********************************************************************/
//static struct workqueue_struct * queue = NULL;
//static struct delayed_work work;
//static int work_handler(struct work_struct *data);
//static int notifier_handler(void);
extern int mpu_ctrl_dsi84_enable(int enable);
extern int mpu_ctrl_dsi84_show(void);   //获取屏幕的lcd_fault脚.用来标识屏幕是否收到lvds的PCLK

extern int mpu_lcd_version_check(void);
//extern int get_wakeup_irq_num(void);
//static int resume_time  = 0;
void reset_dsi84(void);

struct sensor {
	struct i2c_client *i2c_client;
} tixx_data;
struct mutex dsi84_lock;
/***********************************************************************
 * NOFITIER .
 ***********************************************************************/
//static BLOCKING_NOTIFIER_HEAD(dsi84_reinit_chain);
//static struct notifier_block dsi84_reinit_notifier =
//{
//    .notifier_call = notifier_handler,
//};

//int dsi84_reinit_notifier_call_chain(unsigned long val, void *v)
//{
//    return blocking_notifier_call_chain(&dsi84_reinit_chain, val, v);
//}
//EXPORT_SYMBOL(dsi84_reinit_notifier_call_chain);
/***********************************************************************
 * I2C transfert.
 ***********************************************************************/

/*! Read one register from a tixx i2c slave device.
 *
 *	@param *reg		register in the device we wish to access.
 *
 *	@return			   0 if success, an error code otherwise.
 */
static inline int tixx_read_reg(u8 reg)
{
	int val;
	val = i2c_smbus_read_byte_data(tixx_data.i2c_client, reg);
	return val;
}

/*! Write one register of a tixx i2c slave device.
 *
 *	@param *reg		register in the device we wish to access.
 *
 *	@return			   0 if success, an error code otherwise.
 */
static int tixx_write_reg(u8 reg, u8 val)
{
	s32 ret;
	ret = i2c_smbus_write_byte_data(tixx_data.i2c_client, reg, val);
	if (ret < 0) {
		pr_err("%s:write reg er
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值