static struct drm_encoder * mdp4_lvds_connector_best_encoder(struct drm_connector *connector) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); return mdp4_lvds_connector->encoder; }
static void mdp4_lvds_connector_destroy(struct drm_connector *connector) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); drm_connector_cleanup(connector); kfree(mdp4_lvds_connector); }
static enum drm_connector_status mdp4_lvds_connector_detect( struct drm_connector *connector, bool force) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); return mdp4_lvds_connector->panel ? connector_status_connected : connector_status_disconnected; }
static int mdp4_lvds_connector_get_modes(struct drm_connector *connector) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); struct drm_panel *panel = mdp4_lvds_connector->panel; int ret = 0; if (panel) ret = panel->funcs->get_modes(panel); return ret; }
static void mdp4_lvds_connector_destroy(struct drm_connector *connector) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); struct drm_panel *panel = mdp4_lvds_connector->panel; if (panel) drm_panel_detach(panel); drm_connector_unregister(connector); drm_connector_cleanup(connector); kfree(mdp4_lvds_connector); }
static enum drm_connector_status mdp4_lvds_connector_detect( struct drm_connector *connector, bool force) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); if (!mdp4_lvds_connector->panel) { mdp4_lvds_connector->panel = of_drm_find_panel(mdp4_lvds_connector->panel_node); if (IS_ERR(mdp4_lvds_connector->panel)) mdp4_lvds_connector->panel = NULL; } return mdp4_lvds_connector->panel ? connector_status_connected : connector_status_disconnected; }
static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) { struct mdp4_lvds_connector *mdp4_lvds_connector = to_mdp4_lvds_connector(connector); struct drm_encoder *encoder = mdp4_lvds_connector->encoder; long actual, requested; requested = 1000 * mode->clock; actual = mdp4_lcdc_round_pixclk(encoder, requested); DBG("requested=%ld, actual=%ld", requested, actual); if (actual != requested) return MODE_CLOCK_RANGE; return MODE_OK; }