Skip to content

Commit

Permalink
drm/bridge: sii902x: Refactor init code into separate function
Browse files Browse the repository at this point in the history
commit 91b5e26 upstream.

Separate the hardware initialization code from setting up the data
structures and parsing the device tree. The purpose of this change is
to provide a single exit point and avoid a waterfall of 'goto's in
the subsequent patch.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20201020221501.260025-1-mr.nuke.me@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
mrnuke authored and gregkh committed Jan 19, 2021
1 parent 0a34add commit c0c34c5
Showing 1 changed file with 43 additions and 34 deletions.
77 changes: 43 additions & 34 deletions drivers/gpu/drm/bridge/sii902x.c
Expand Up @@ -954,41 +954,13 @@ static const struct drm_bridge_timings default_sii902x_timings = {
| DRM_BUS_FLAG_DE_HIGH,
};

static int sii902x_probe(struct i2c_client *client,
const struct i2c_device_id *id)
static int sii902x_init(struct sii902x *sii902x)
{
struct device *dev = &client->dev;
struct device *dev = &sii902x->i2c->dev;
unsigned int status = 0;
struct sii902x *sii902x;
u8 chipid[4];
int ret;

ret = i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_BYTE_DATA);
if (!ret) {
dev_err(dev, "I2C adapter not suitable\n");
return -EIO;
}

sii902x = devm_kzalloc(dev, sizeof(*sii902x), GFP_KERNEL);
if (!sii902x)
return -ENOMEM;

sii902x->i2c = client;
sii902x->regmap = devm_regmap_init_i2c(client, &sii902x_regmap_config);
if (IS_ERR(sii902x->regmap))
return PTR_ERR(sii902x->regmap);

sii902x->reset_gpio = devm_gpiod_get_optional(dev, "reset",
GPIOD_OUT_LOW);
if (IS_ERR(sii902x->reset_gpio)) {
dev_err(dev, "Failed to retrieve/request reset gpio: %ld\n",
PTR_ERR(sii902x->reset_gpio));
return PTR_ERR(sii902x->reset_gpio);
}

mutex_init(&sii902x->mutex);

sii902x_reset(sii902x);

ret = regmap_write(sii902x->regmap, SII902X_REG_TPI_RQB, 0x0);
Expand All @@ -1012,11 +984,11 @@ static int sii902x_probe(struct i2c_client *client,
regmap_read(sii902x->regmap, SII902X_INT_STATUS, &status);
regmap_write(sii902x->regmap, SII902X_INT_STATUS, status);

if (client->irq > 0) {
if (sii902x->i2c->irq > 0) {
regmap_write(sii902x->regmap, SII902X_INT_ENABLE,
SII902X_HOTPLUG_EVENT);

ret = devm_request_threaded_irq(dev, client->irq, NULL,
ret = devm_request_threaded_irq(dev, sii902x->i2c->irq, NULL,
sii902x_interrupt,
IRQF_ONESHOT, dev_name(dev),
sii902x);
Expand All @@ -1031,9 +1003,9 @@ static int sii902x_probe(struct i2c_client *client,

sii902x_audio_codec_init(sii902x, dev);

i2c_set_clientdata(client, sii902x);
i2c_set_clientdata(sii902x->i2c, sii902x);

sii902x->i2cmux = i2c_mux_alloc(client->adapter, dev,
sii902x->i2cmux = i2c_mux_alloc(sii902x->i2c->adapter, dev,
1, 0, I2C_MUX_GATE,
sii902x_i2c_bypass_select,
sii902x_i2c_bypass_deselect);
Expand All @@ -1044,6 +1016,43 @@ static int sii902x_probe(struct i2c_client *client,
return i2c_mux_add_adapter(sii902x->i2cmux, 0, 0, 0);
}

static int sii902x_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct device *dev = &client->dev;
struct sii902x *sii902x;
int ret;

ret = i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_BYTE_DATA);
if (!ret) {
dev_err(dev, "I2C adapter not suitable\n");
return -EIO;
}

sii902x = devm_kzalloc(dev, sizeof(*sii902x), GFP_KERNEL);
if (!sii902x)
return -ENOMEM;

sii902x->i2c = client;
sii902x->regmap = devm_regmap_init_i2c(client, &sii902x_regmap_config);
if (IS_ERR(sii902x->regmap))
return PTR_ERR(sii902x->regmap);

sii902x->reset_gpio = devm_gpiod_get_optional(dev, "reset",
GPIOD_OUT_LOW);
if (IS_ERR(sii902x->reset_gpio)) {
dev_err(dev, "Failed to retrieve/request reset gpio: %ld\n",
PTR_ERR(sii902x->reset_gpio));
return PTR_ERR(sii902x->reset_gpio);
}

mutex_init(&sii902x->mutex);

ret = sii902x_init(sii902x);
return ret;
}

static int sii902x_remove(struct i2c_client *client)

{
Expand Down

0 comments on commit c0c34c5

Please sign in to comment.