drm/i2c: tda998x: allocate tda998x_priv inside tda998x_create()
Move the tda998x_priv allocation inside tda998x_create() and simplify the tda998x_create()'s arguments. Pass the same to tda998x_destroy(). Tested-by: Peter Rosin <peda@axentia.se> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
Родитель
30bd8b862f
Коммит
2143adb04b
|
@ -1576,8 +1576,10 @@ static const struct drm_bridge_funcs tda998x_bridge_funcs = {
|
||||||
.enable = tda998x_bridge_enable,
|
.enable = tda998x_bridge_enable,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void tda998x_destroy(struct tda998x_priv *priv)
|
static void tda998x_destroy(struct device *dev)
|
||||||
{
|
{
|
||||||
|
struct tda998x_priv *priv = dev_get_drvdata(dev);
|
||||||
|
|
||||||
drm_bridge_remove(&priv->bridge);
|
drm_bridge_remove(&priv->bridge);
|
||||||
|
|
||||||
/* disable all IRQs and free the IRQ handler */
|
/* disable all IRQs and free the IRQ handler */
|
||||||
|
@ -1662,13 +1664,21 @@ static void tda998x_set_config(struct tda998x_priv *priv,
|
||||||
priv->audio_params = p->audio_params;
|
priv->audio_params = p->audio_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
|
static int tda998x_create(struct device *dev)
|
||||||
{
|
{
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
struct device_node *np = client->dev.of_node;
|
struct device_node *np = client->dev.of_node;
|
||||||
struct i2c_board_info cec_info;
|
struct i2c_board_info cec_info;
|
||||||
|
struct tda998x_priv *priv;
|
||||||
u32 video;
|
u32 video;
|
||||||
int rev_lo, rev_hi, ret;
|
int rev_lo, rev_hi, ret;
|
||||||
|
|
||||||
|
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
if (!priv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
dev_set_drvdata(dev, priv);
|
||||||
|
|
||||||
mutex_init(&priv->mutex); /* protect the page access */
|
mutex_init(&priv->mutex); /* protect the page access */
|
||||||
mutex_init(&priv->audio_mutex); /* protect access from audio thread */
|
mutex_init(&priv->audio_mutex); /* protect access from audio thread */
|
||||||
mutex_init(&priv->edid_mutex);
|
mutex_init(&priv->edid_mutex);
|
||||||
|
@ -1843,7 +1853,7 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
tda998x_destroy(priv);
|
tda998x_destroy(dev);
|
||||||
err_irq:
|
err_irq:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1895,24 +1905,16 @@ err_encoder:
|
||||||
|
|
||||||
static int tda998x_bind(struct device *dev, struct device *master, void *data)
|
static int tda998x_bind(struct device *dev, struct device *master, void *data)
|
||||||
{
|
{
|
||||||
struct i2c_client *client = to_i2c_client(dev);
|
|
||||||
struct drm_device *drm = data;
|
struct drm_device *drm = data;
|
||||||
struct tda998x_priv *priv;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
ret = tda998x_create(dev);
|
||||||
if (!priv)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
dev_set_drvdata(dev, priv);
|
|
||||||
|
|
||||||
ret = tda998x_create(client, priv);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = tda998x_encoder_init(dev, drm);
|
ret = tda998x_encoder_init(dev, drm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
tda998x_destroy(priv);
|
tda998x_destroy(dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1924,7 +1926,7 @@ static void tda998x_unbind(struct device *dev, struct device *master,
|
||||||
struct tda998x_priv *priv = dev_get_drvdata(dev);
|
struct tda998x_priv *priv = dev_get_drvdata(dev);
|
||||||
|
|
||||||
drm_encoder_cleanup(&priv->encoder);
|
drm_encoder_cleanup(&priv->encoder);
|
||||||
tda998x_destroy(priv);
|
tda998x_destroy(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct component_ops tda998x_ops = {
|
static const struct component_ops tda998x_ops = {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче