mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
misc: rk628: Supports different versions of the rk628
Signed-off-by: Algea Cao <algea.cao@rock-chips.com> Signed-off-by: Guochun Huang <hero.huang@rock-chips.com> Change-Id: I7f5102a81648abbacfbd90caf3e186649e219d2b
This commit is contained in:
@@ -1087,6 +1087,34 @@ static const struct file_operations rk628_debugfs_summary_fops = {
|
||||
|
||||
};
|
||||
|
||||
static int rk628_version_info(struct rk628 *rk628)
|
||||
{
|
||||
int ret;
|
||||
char *version;
|
||||
|
||||
ret = rk628_i2c_read(rk628, GRF_SOC_VERSION, &rk628->version);
|
||||
if (ret) {
|
||||
dev_err(rk628->dev, "failed to access register: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
switch (rk628->version) {
|
||||
case RK628D_VERSION:
|
||||
version = "D/E";
|
||||
break;
|
||||
case RK628F_VERSION:
|
||||
version = "F/H";
|
||||
break;
|
||||
default:
|
||||
version = "unknown";
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
dev_info(rk628->dev, "the driver version is %s of RK628-%s\n", DRIVER_VERSION, version);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
rk628_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
{
|
||||
@@ -1097,8 +1125,6 @@ rk628_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
unsigned long irq_flags;
|
||||
struct dentry *debug_dir;
|
||||
|
||||
dev_info(dev, "RK628 misc driver version: %s\n", DRIVER_VERSION);
|
||||
|
||||
rk628 = devm_kzalloc(dev, sizeof(*rk628), GFP_KERNEL);
|
||||
if (!rk628)
|
||||
return -ENOMEM;
|
||||
@@ -1174,17 +1200,18 @@ rk628_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
}
|
||||
}
|
||||
|
||||
/* selete int io function */
|
||||
ret = rk628_i2c_write(rk628, GRF_GPIO3AB_SEL_CON, 0x30002000);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to access register: %d\n", ret);
|
||||
ret = rk628_version_info(rk628);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* select int io function */
|
||||
rk628_i2c_write(rk628, GRF_GPIO3AB_SEL_CON, 0x30002000);
|
||||
|
||||
#ifdef CONFIG_FB
|
||||
rk628->fb_nb.notifier_call = rk628_fb_notifier_callback;
|
||||
fb_register_client(&rk628->fb_nb);
|
||||
#endif
|
||||
|
||||
rk628->monitor_wq = alloc_ordered_workqueue("%s",
|
||||
WQ_MEM_RECLAIM | WQ_FREEZABLE, "rk628-monitor-wq");
|
||||
INIT_DELAYED_WORK(&rk628->delay_work, rk628_display_work);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#define DRIVER_VERSION "0.0.1"
|
||||
#define DRIVER_VERSION "0.1.0"
|
||||
#define UPDATE(x, h, l) (((x) << (l)) & GENMASK((h), (l)))
|
||||
#define HIWORD_UPDATE(v, h, l) ((((v) << (l)) & GENMASK((h), (l))) | \
|
||||
(GENMASK((h), (l)) << 16))
|
||||
@@ -180,6 +180,7 @@
|
||||
#define GRF_GPIO3A_D1_CON 0x00e4
|
||||
#define GRF_GPIO3B_D_CON 0x00e8
|
||||
#define GRF_GPIO_SR_CON 0x00ec
|
||||
#define GRF_SW_HDMIRXPHY_CRTL 0x00f4
|
||||
#define GRF_INTR0_EN 0x0100
|
||||
#define GRF_INTR0_CLR_EN 0x0104
|
||||
#define GRF_INTR0_STATUS 0x0108
|
||||
@@ -197,7 +198,7 @@
|
||||
#define GRF_OS_REG1 0x0144
|
||||
#define GRF_OS_REG2 0x0148
|
||||
#define GRF_OS_REG3 0x014c
|
||||
#define GRF_SOC_VERSION 0x0150
|
||||
#define GRF_SOC_VERSION 0x0200
|
||||
#define GRF_MAX_REGISTER GRF_SOC_VERSION
|
||||
|
||||
#define DRM_MODE_FLAG_PHSYNC (1<<0)
|
||||
@@ -205,6 +206,9 @@
|
||||
#define DRM_MODE_FLAG_PVSYNC (1<<2)
|
||||
#define DRM_MODE_FLAG_NVSYNC (1<<3)
|
||||
|
||||
#define RK628D_VERSION 0x20200326
|
||||
#define RK628F_VERSION 0x20230321
|
||||
|
||||
enum {
|
||||
COMBTXPHY_MODULEA_EN = BIT(0),
|
||||
COMBTXPHY_MODULEB_EN = BIT(1),
|
||||
@@ -454,6 +458,7 @@ struct rk628 {
|
||||
int sync_pol;
|
||||
void *csi;
|
||||
struct notifier_block fb_nb;
|
||||
u32 version;
|
||||
};
|
||||
|
||||
static inline int rk628_i2c_write(struct rk628 *rk628, u32 reg, u32 val)
|
||||
|
||||
Reference in New Issue
Block a user