mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
mfd: display-serdes: update driver version to v11
Signed-off-by: Luo Wei <lw@rock-chips.com> Change-Id: I29a6ff45df69858e5220e3f030061e86d6ca58fe
This commit is contained in:
@@ -106,7 +106,7 @@
|
||||
#define SERDES_DBG_CHIP(x...) no_printk(x)
|
||||
#endif
|
||||
|
||||
#define MFD_SERDES_DISPLAY_VERSION "serdes-mfd-displaly-v10-230901"
|
||||
#define MFD_SERDES_DISPLAY_VERSION "serdes-mfd-displaly-v11-240815"
|
||||
#define MAX_NUM_SERDES_SPLIT 8
|
||||
struct serdes;
|
||||
enum ser_link_mode {
|
||||
|
||||
@@ -560,6 +560,10 @@ static int max96745_pinctrl_set_mux(struct serdes *serdes,
|
||||
GPIO_A_REG(grp->pins[i] - pinctrl->pin_base),
|
||||
GPIO_OUT_DIS,
|
||||
FIELD_PREP(GPIO_OUT_DIS, data->gpio_out_dis));
|
||||
serdes_set_bits(serdes,
|
||||
GPIO_B_REG(grp->pins[i] - pinctrl->pin_base),
|
||||
OUT_TYPE,
|
||||
FIELD_PREP(OUT_TYPE, 1));
|
||||
if (data->gpio_tx_en_a || data->gpio_tx_en_b)
|
||||
serdes_set_bits(serdes,
|
||||
GPIO_B_REG(grp->pins[i] - pinctrl->pin_base),
|
||||
|
||||
@@ -15,7 +15,9 @@ static const struct regmap_range max96772_readable_ranges[] = {
|
||||
regmap_reg_range(0x1700, 0x1700),
|
||||
regmap_reg_range(0x4100, 0x4100),
|
||||
regmap_reg_range(0x6230, 0x6230),
|
||||
regmap_reg_range(0x7014, 0x7016),
|
||||
regmap_reg_range(0xe75e, 0xe75e),
|
||||
regmap_reg_range(0xe7c4, 0xe7c6),
|
||||
regmap_reg_range(0xe776, 0xe7bf),
|
||||
};
|
||||
|
||||
@@ -271,7 +273,7 @@ static struct serdes_chip_pinctrl_info max96772_pinctrl_info = {
|
||||
.num_functions = ARRAY_SIZE(max96772_functions_desc),
|
||||
};
|
||||
|
||||
static const struct reg_sequence max96772_clk_ref[3][14] = {
|
||||
static const struct reg_sequence max96772_clk_ref[4][14] = {
|
||||
{
|
||||
{ 0xe7b2, 0x50 },
|
||||
{ 0xe7b3, 0x00 },
|
||||
@@ -313,10 +315,25 @@ static const struct reg_sequence max96772_clk_ref[3][14] = {
|
||||
{ 0xe7b9, 0x00 },
|
||||
{ 0xe7ba, 0x2e },
|
||||
{ 0xe7bb, 0x00 },
|
||||
{ 0xe7bc, 0x00 },
|
||||
{ 0xe7bc, 0x02 },
|
||||
{ 0xe7bd, 0x01 },
|
||||
{ 0xe7be, 0x32 },
|
||||
{ 0xe7bf, 0x00 },
|
||||
}, {
|
||||
{ 0xe7b2, 0x30 },
|
||||
{ 0xe7b3, 0x00 },
|
||||
{ 0xe7b4, 0x00 },
|
||||
{ 0xe7b5, 0x40 },
|
||||
{ 0xe7b6, 0x6c },
|
||||
{ 0xe7b7, 0x20 },
|
||||
{ 0xe7b8, 0x14 },
|
||||
{ 0xe7b9, 0x00 },
|
||||
{ 0xe7ba, 0x2e },
|
||||
{ 0xe7bb, 0x00 },
|
||||
{ 0xe7bc, 0x00 },
|
||||
{ 0xe7bd, 0x00 },
|
||||
{ 0xe7be, 0x32 },
|
||||
{ 0xe7bf, 0x00 },
|
||||
}
|
||||
};
|
||||
|
||||
@@ -334,11 +351,6 @@ static int max96772_aux_dpcd_read(struct serdes *serdes, unsigned int reg, unsig
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int max96772_panel_init(struct serdes *serdes)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int max96772_panel_prepare(struct serdes *serdes)
|
||||
{
|
||||
const struct drm_display_mode *mode = &serdes->serdes_panel->mode;
|
||||
@@ -357,6 +369,10 @@ static int max96772_panel_prepare(struct serdes *serdes)
|
||||
serdes_reg_write(serdes, 0xe7b1, 0x00);
|
||||
}
|
||||
|
||||
dev_info(serdes->dev, "link_rate=0x%02x, lane_count=0x%02x, ssc=%d\n",
|
||||
serdes->serdes_panel->link_rate, serdes->serdes_panel->lane_count,
|
||||
serdes->serdes_panel->ssc);
|
||||
|
||||
switch (serdes->serdes_panel->link_rate) {
|
||||
case DP_LINK_BW_5_4:
|
||||
serdes_multi_reg_write(serdes, max96772_clk_ref[2],
|
||||
@@ -445,6 +461,8 @@ static int max96772_panel_enable(struct serdes *serdes)
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
msleep(50);
|
||||
|
||||
ret = max96772_aux_dpcd_read(serdes, DP_LANE0_1_STATUS, &status[0]);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -465,13 +483,31 @@ static int max96772_panel_disable(struct serdes *serdes)
|
||||
}
|
||||
|
||||
static struct serdes_chip_panel_ops max96772_panel_ops = {
|
||||
.init = max96772_panel_init,
|
||||
.prepare = max96772_panel_prepare,
|
||||
.unprepare = max96772_panel_unprepare,
|
||||
.enable = max96772_panel_enable,
|
||||
.disable = max96772_panel_disable,
|
||||
};
|
||||
|
||||
static int max96772_bridge_pre_enable(struct serdes *serdes)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
SERDES_DBG_CHIP("%s: serdes %s ret=%d\n", __func__,
|
||||
serdes->chip_data->name, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int max96772_bridge_post_disable(struct serdes *serdes)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct serdes_chip_bridge_ops max96772_bridge_ops = {
|
||||
.enable = max96772_bridge_pre_enable,
|
||||
.disable = max96772_bridge_post_disable,
|
||||
};
|
||||
|
||||
static int max96772_pinctrl_set_mux(struct serdes *serdes,
|
||||
unsigned int function, unsigned int group)
|
||||
{
|
||||
@@ -505,6 +541,10 @@ static int max96772_pinctrl_set_mux(struct serdes *serdes,
|
||||
FIELD_PREP(GPIO_RX_EN, fdata->gpio_rx_en) |
|
||||
FIELD_PREP(GPIO_TX_EN, fdata->gpio_tx_en) |
|
||||
FIELD_PREP(GPIO_OUT, fdata->gpio_out_level));
|
||||
serdes_set_bits(serdes,
|
||||
GPIO_B_REG(grp->pins[i] - pinctrl->pin_base),
|
||||
OUT_TYPE,
|
||||
FIELD_PREP(OUT_TYPE, 1));
|
||||
if (fdata->gpio_tx_en)
|
||||
serdes_set_bits(serdes,
|
||||
GPIO_B_REG(grp->pins[i] - pinctrl->pin_base),
|
||||
@@ -765,6 +805,7 @@ struct serdes_chip_data serdes_max96772_data = {
|
||||
.regmap_config = &max96772_regmap_config,
|
||||
.pinctrl_info = &max96772_pinctrl_info,
|
||||
.panel_ops = &max96772_panel_ops,
|
||||
.bridge_ops = &max96772_bridge_ops,
|
||||
.pinctrl_ops = &max96772_pinctrl_ops,
|
||||
.gpio_ops = &max96772_gpio_ops,
|
||||
.pm_ops = &max96772_pm_ops,
|
||||
|
||||
@@ -408,8 +408,8 @@ static int serdes_i2c_probe(struct i2c_client *client,
|
||||
__func__, dev->of_node->name, serdes->reg_hw, serdes->reg_use);
|
||||
ret = serdes_set_i2c_address(serdes, serdes->reg_hw,
|
||||
serdes->reg_use, serdes->link_use);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
if (ret)
|
||||
dev_err(dev, "%s failed to set i2c address\n", serdes->chip_data->name);
|
||||
}
|
||||
|
||||
serdes->use_delay_work = of_property_read_bool(dev->of_node, "use-delay-work");
|
||||
|
||||
Reference in New Issue
Block a user