spin_unlock_irqrestore(&data_lock, flags);
}
-int dss_mgr_set_device(struct omap_overlay_manager *mgr,
- struct omap_dss_device *dssdev)
-{
- int r;
-
- mutex_lock(&apply_lock);
-
- if (dssdev->manager) {
- DSSERR("display '%s' already has a manager '%s'\n",
- dssdev->name, dssdev->manager->name);
- r = -EINVAL;
- goto err;
- }
-
- if ((mgr->supported_displays & dssdev->type) == 0) {
- DSSERR("display '%s' does not support manager '%s'\n",
- dssdev->name, mgr->name);
- r = -EINVAL;
- goto err;
- }
-
- dssdev->manager = mgr;
- mgr->device = dssdev;
-
- mutex_unlock(&apply_lock);
-
- return 0;
-err:
- mutex_unlock(&apply_lock);
- return r;
-}
-
-int dss_mgr_unset_device(struct omap_overlay_manager *mgr)
-{
- int r;
-
- mutex_lock(&apply_lock);
-
- if (!mgr->device) {
- DSSERR("failed to unset display, display not set.\n");
- r = -EINVAL;
- goto err;
- }
-
- /*
- * Don't allow currently enabled displays to have the overlay manager
- * pulled out from underneath them
- */
- if (mgr->device->state != OMAP_DSS_DISPLAY_DISABLED) {
- r = -EINVAL;
- goto err;
- }
-
- mgr->device->manager = NULL;
- mgr->device = NULL;
-
- mutex_unlock(&apply_lock);
-
- return 0;
-err:
- mutex_unlock(&apply_lock);
- return r;
-}
-
int dss_mgr_set_output(struct omap_overlay_manager *mgr,
struct omap_dss_output *output)
{
break;
}
- mgr->set_device = &dss_mgr_set_device;
- mgr->unset_device = &dss_mgr_unset_device;
mgr->set_output = &dss_mgr_set_output;
mgr->unset_output = &dss_mgr_unset_output;
mgr->apply = &omap_dss_mgr_apply;
enum omap_dss_output_id supported_outputs;
/* dynamic fields */
- struct omap_dss_device *device;
struct omap_dss_output *output;
/*
* interrupt context
*/
- int (*set_device)(struct omap_overlay_manager *mgr,
- struct omap_dss_device *dssdev);
- int (*unset_device)(struct omap_overlay_manager *mgr);
int (*set_output)(struct omap_overlay_manager *mgr,
struct omap_dss_output *output);
int (*unset_output)(struct omap_overlay_manager *mgr);
enum omap_display_caps caps;
- struct omap_overlay_manager *manager;
struct omap_dss_output *output;
enum omap_dss_display_state state;