kfree(priv_state);
}
+static struct drm_private_state *
+ingenic_drm_create_state(struct drm_private_obj *obj)
+{
+ struct ingenic_drm_private_state *priv_state;
+
+ priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL);
+ if (!priv_state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_private_obj_create_state(obj, &priv_state->base);
+
+ return &priv_state->base;
+}
+
DEFINE_DRM_GEM_DMA_FOPS(ingenic_drm_fops);
static const struct drm_driver ingenic_drm_driver_data = {
};
static const struct drm_private_state_funcs ingenic_drm_private_state_funcs = {
+ .atomic_create_state = ingenic_drm_create_state,
.atomic_duplicate_state = ingenic_drm_duplicate_state,
.atomic_destroy_state = ingenic_drm_destroy_state,
};
static int ingenic_drm_bind(struct device *dev, bool has_components)
{
struct platform_device *pdev = to_platform_device(dev);
- struct ingenic_drm_private_state *private_state;
const struct jz_soc_info *soc_info;
struct ingenic_drm *priv;
struct clk *parent_clk;
goto err_devclk_disable;
}
- private_state = kzalloc(sizeof(*private_state), GFP_KERNEL);
- if (!private_state) {
- ret = -ENOMEM;
- goto err_clk_notifier_unregister;
- }
-
- drm_atomic_private_obj_init(drm, &priv->private_obj, &private_state->base,
+ drm_atomic_private_obj_init(drm, &priv->private_obj, NULL,
&ingenic_drm_private_state_funcs);
ret = drmm_add_action_or_reset(drm, ingenic_drm_atomic_private_obj_fini,
&priv->private_obj);
if (ret)
- goto err_private_state_free;
+ goto err_clk_notifier_unregister;
ret = drm_dev_register(drm, 0);
if (ret) {
return 0;
-err_private_state_free:
- kfree(private_state);
err_clk_notifier_unregister:
clk_notifier_unregister(parent_clk, &priv->clock_nb);
err_devclk_disable:
kfree(priv_state);
}
+static struct drm_private_state *
+ingenic_ipu_create_state(struct drm_private_obj *obj)
+{
+ struct ingenic_ipu_private_state *priv_state;
+
+ priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL);
+ if (!priv_state)
+ return ERR_PTR(-ENOMEM);
+
+ __drm_atomic_helper_private_obj_create_state(obj, &priv_state->base);
+
+ return &priv_state->base;
+}
+
static const struct drm_private_state_funcs ingenic_ipu_private_state_funcs = {
+ .atomic_create_state = ingenic_ipu_create_state,
.atomic_duplicate_state = ingenic_ipu_duplicate_state,
.atomic_destroy_state = ingenic_ipu_destroy_state,
};
static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d)
{
struct platform_device *pdev = to_platform_device(dev);
- struct ingenic_ipu_private_state *private_state;
const struct soc_info *soc_info;
struct drm_device *drm = d;
struct drm_plane *plane;
return err;
}
- private_state = kzalloc(sizeof(*private_state), GFP_KERNEL);
- if (!private_state) {
- err = -ENOMEM;
- goto err_clk_unprepare;
- }
-
- drm_atomic_private_obj_init(drm, &ipu->private_obj, &private_state->base,
+ drm_atomic_private_obj_init(drm, &ipu->private_obj, NULL,
&ingenic_ipu_private_state_funcs);
return 0;
-
-err_clk_unprepare:
- clk_unprepare(ipu->clk);
- return err;
}
static void ingenic_ipu_unbind(struct device *dev,