mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
Merge remote-tracking branch 'origin/dev-t256' into HEAD
Change-Id: I171cfd58fdb25c5ec158a0db11d97ada5603c578 Signed-off-by: Armandeep Singh <armandeeps@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3365262 Reviewed-by: Ishwarya Balaji Gururajan <igururajan@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
Jon Hunter
parent
a5b3a14cc8
commit
cb108984e1
@@ -65,6 +65,8 @@ struct nvdisp_serdes_priv {
|
|||||||
struct mutex mutex;
|
struct mutex mutex;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
int serdes_errb;
|
int serdes_errb;
|
||||||
|
int serdes_pwrdn; /* GPIO number for power down pin */
|
||||||
|
struct gpio_desc *gpiod_pwrdn; /* GPIO descriptor for power pin */
|
||||||
unsigned int ser_irq;
|
unsigned int ser_irq;
|
||||||
struct opcode_sequence init_seq, deinit_seq, errb_seq;
|
struct opcode_sequence init_seq, deinit_seq, errb_seq;
|
||||||
};
|
};
|
||||||
@@ -674,6 +676,24 @@ done:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvdisp_serdes_power_on(struct nvdisp_serdes_priv *priv)
|
||||||
|
{
|
||||||
|
struct device *dev = &priv->client->dev;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (priv->gpiod_pwrdn) {
|
||||||
|
dev_info(dev, "%s: Setting nvdisp-serdes-pwrdn pin high to power on serializer\n", __func__);
|
||||||
|
gpiod_set_value_cansleep(priv->gpiod_pwrdn, 1);
|
||||||
|
} else if (gpio_is_valid(priv->serdes_pwrdn)) {
|
||||||
|
dev_info(dev, "%s: Setting nvdisp-serdes-pwrdn pin high to power on serializer\n", __func__);
|
||||||
|
gpio_set_value_cansleep(priv->serdes_pwrdn, 1);
|
||||||
|
} else {
|
||||||
|
dev_info(dev, "%s: No valid nvdisp-serdes-pwrdn pin available\n", __func__);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int nvdisp_serdes_init(struct device *dev)
|
static int nvdisp_serdes_init(struct device *dev)
|
||||||
{
|
{
|
||||||
struct nvdisp_serdes_priv *priv;
|
struct nvdisp_serdes_priv *priv;
|
||||||
@@ -684,6 +704,13 @@ static int nvdisp_serdes_init(struct device *dev)
|
|||||||
client = to_i2c_client(dev);
|
client = to_i2c_client(dev);
|
||||||
priv = i2c_get_clientdata(client);
|
priv = i2c_get_clientdata(client);
|
||||||
|
|
||||||
|
/* First power on the serializer */
|
||||||
|
ret = nvdisp_serdes_power_on(priv);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(dev, "%s: Failed to power on serializer\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* opcode dispatcher code */
|
/* opcode dispatcher code */
|
||||||
while (init_pos < priv->init_seq.length) {
|
while (init_pos < priv->init_seq.length) {
|
||||||
ret = dispatch_opcode(client, priv, priv->init_seq.payload, &init_pos, priv->init_seq.length);
|
ret = dispatch_opcode(client, priv, priv->init_seq.payload, &init_pos, priv->init_seq.length);
|
||||||
@@ -710,6 +737,7 @@ static int nvdisp_serdes_probe(struct i2c_client *client)
|
|||||||
|
|
||||||
priv->client = client;
|
priv->client = client;
|
||||||
i2c_set_clientdata(client, priv);
|
i2c_set_clientdata(client, priv);
|
||||||
|
priv->gpiod_pwrdn = NULL; /* Initialize to NULL for safety */
|
||||||
|
|
||||||
dev = &priv->client->dev;
|
dev = &priv->client->dev;
|
||||||
|
|
||||||
@@ -725,6 +753,29 @@ static int nvdisp_serdes_probe(struct i2c_client *client)
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get the PWRDN GPIO pin */
|
||||||
|
priv->serdes_pwrdn = of_get_named_gpio(ser, "nvdisp-serdes-pwrdn", 0);
|
||||||
|
if (!gpio_is_valid(priv->serdes_pwrdn)) {
|
||||||
|
dev_err(dev, "%s: nvdisp-serdes-pwrdn GPIO not valid\n", __func__);
|
||||||
|
/* Continue even if GPIO is not valid - don't return error */
|
||||||
|
} else {
|
||||||
|
/* Request the GPIO pin with initial state LOW (powered down) */
|
||||||
|
ret = devm_gpio_request_one(&client->dev, priv->serdes_pwrdn,
|
||||||
|
GPIOF_OUT_INIT_LOW, "GPIO_PWRDN_NVDISP_SERDES");
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "%s: devm_gpio_request_one for nvdisp-serdes-pwrdn failed ret: %d\n",
|
||||||
|
__func__, ret);
|
||||||
|
/* Continue even if GPIO request fails - don't return error */
|
||||||
|
} else {
|
||||||
|
/* Create GPIO descriptor for later use */
|
||||||
|
priv->gpiod_pwrdn = gpio_to_desc(priv->serdes_pwrdn);
|
||||||
|
if (!priv->gpiod_pwrdn) {
|
||||||
|
dev_err(dev, "%s: Failed to get GPIO descriptor for nvdisp-serdes-pwrdn\n",
|
||||||
|
__func__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = nvdisp_serdes_init(&client->dev);
|
ret = nvdisp_serdes_init(&client->dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "%s: nvdisp serdes init failed\n", __func__);
|
dev_err(dev, "%s: nvdisp serdes init failed\n", __func__);
|
||||||
|
|||||||
Reference in New Issue
Block a user