int mdfld_mot_cmd_mot_panel_power_remove(struct panel_power_props *props) { int r; int i; if (!props || !props->board) return -EINVAL; r = mot_panel_power_initial_config(props); if (!r) { PSB_DEBUG_INIT("Remove panel power start\n"); /* Disable all regulators */ for (i = 0; i < props->board->num_voltage_reg; i++) { if (props->board->reg[i].gpio != -1) gpio_set_value(props->board->reg[i].gpio, !props->board->reg[i].gpio_en_val); } /* Make sure panel in reset */ if (props->board->reset_gpio) gpio_set_value(props->board->reset_gpio, props->reset_gpio_en_val); PSB_DEBUG_INIT("Remove panel power complete\n"); } return r; }
int mdfld_mot_cmn_mot_panel_init(struct drm_device *dev, int pipe, struct mdfld_dsi_config *config, struct panel_funcs *p_funcs) { int r = 0; if (!p_funcs->mot_panel || pipe != 0) return 0; if (p_funcs->mot_panel->acl_update) { PSB_DEBUG_INIT("ACL mode supported\n"); acl_mode_state = p_funcs->mot_panel->acl_init_state; r = device_create_file(dev->dev, &dev_attr_acl_mode); if (r < 0) DRM_ERROR("Failed to create ACL entry, r = %d\n", r); } if (p_funcs->mot_panel->elvss_tth_supported) { PSB_DEBUG_INIT("ELVSS TTH supported\n"); elvss_tth_state = 0; r = device_create_file(dev->dev, &dev_attr_elvss_tth_status); if (r < 0) DRM_ERROR("Failed to create ELVSS TTH entry, r = %d\n", r); } return r; }
int32_t psb_msvdx_alloc_fw_bo(struct drm_psb_private *dev_priv) { uint32_t core_rev; int32_t ret = 0; struct msvdx_private *msvdx_priv = dev_priv->msvdx_private; core_rev = PSB_RMSVDX32(MSVDX_CORE_REV_OFFSET); if ((core_rev & 0xffffff) < 0x020000) msvdx_priv->mtx_mem_size = 16 * 1024; else msvdx_priv->mtx_mem_size = 56 * 1024; PSB_DEBUG_INIT("MSVDX: MTX mem size is 0x%08x bytes, allocate firmware BO size 0x%08x\n", msvdx_priv->mtx_mem_size, msvdx_priv->mtx_mem_size + 4096); #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)) ret = ttm_buffer_object_create(&dev_priv->bdev, msvdx_priv->mtx_mem_size + 4096, /* DMA may run over a page */ ttm_bo_type_kernel, DRM_PSB_FLAG_MEM_MMU | TTM_PL_FLAG_NO_EVICT, 0, 0, 0, NULL, &msvdx_priv->fw); #else ret = ttm_buffer_object_create(&dev_priv->bdev, msvdx_priv->mtx_mem_size + 4096, /* DMA may run over a page */ ttm_bo_type_kernel, DRM_PSB_FLAG_MEM_MMU | TTM_PL_FLAG_NO_EVICT, 0, 0, NULL, &msvdx_priv->fw); #endif if (ret) { DRM_ERROR("MSVDX: allocate firmware BO fail\n"); } return ret; }
int mdfld_mot_cmn_send_cmd_list(struct mdfld_dsi_config *dsi_config, struct mdfld_dsi_pkg_sender *sender, struct dsi_cmd_entry *list, int num_entry) { struct dsi_cmd_entry *entry; u8 *mcs_short_data; int i; int err = 0; for (i = 0; i < num_entry; i++) { entry = &list[i]; PSB_DEBUG_INIT("Sending command # %d, type = %d\n", i, entry->type); if (entry->type == CMD_MCS_LONG) { err = mdfld_dsi_send_mcs_long_hs(sender, entry->data, entry->len, MDFLD_DSI_SEND_PACKAGE); } else if ((entry->type == CMD_MCS_SHORT1) && (entry->len == 2)) { mcs_short_data = entry->data; err = mdfld_dsi_send_mcs_short_hs(sender, entry->data[0], entry->data[1], 1, MDFLD_DSI_SEND_PACKAGE); } else if (entry->type == CMD_MCS_SHORT0) { mcs_short_data = entry->data; err = mdfld_dsi_send_mcs_short_hs(sender, entry->data[0], 0, 0, MDFLD_DSI_SEND_PACKAGE); } else if (entry->type == CMD_SLEEP_MS) { msleep(entry->len); } else { DRM_ERROR("Invalid command entry type %d\n", entry->type); err = -EINVAL; } if (err) { DRM_ERROR("Failed sending command entry # %d\n", i); break; } } return err; }
int mdfld_mot_cmd_mot_panel_power_apply(struct panel_power_props *props) { int r; int i; if (!props || !props->board) return -EINVAL; r = mot_panel_power_initial_config(props); if (!r) { PSB_DEBUG_INIT("Apply panel power start\n"); /* Make sure panel in reset */ if (props->board->reset_gpio) gpio_set_value(props->board->reset_gpio, props->reset_gpio_en_val); /* Enable all regulators */ for (i = 0; i < props->board->num_voltage_reg; i++) { if (props->board->reg[i].gpio != -1) gpio_set_value(props->board->reg[i].gpio, props->board->reg[i].gpio_en_val); } msleep(props->reg_apply_post_delay); /* Bring panel out of reset */ if (props->board->reset_gpio) { gpio_set_value(props->board->reset_gpio, !props->reset_gpio_en_val); msleep(props->reset_post_delay); } PSB_DEBUG_INIT("Apply panel power complete\n"); } return r; }