static int jdi_cmd_panel_reset( struct mdfld_dsi_config *dsi_config) { int ret = 0; u8 *vaddr = NULL, *vaddr1 = NULL; int reg_value_scl = 0; PSB_DEBUG_ENTRY("\n"); /* Because when reset touchscreen panel, touchscreen will pull i2c bus * to low, sometime this operation will cause i2c bus enter into wrong * status, so before reset, switch i2c scl pin */ vaddr1 = ioremap(SECURE_I2C_FLIS_REG, 4); reg_value_scl = ioread32(vaddr1); reg_value_scl &= ~0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); __vpro2_power_ctrl(true); usleep_range(2000, 2500); if (bias_en_gpio == 0) { bias_en_gpio = 189; ret = gpio_request(bias_en_gpio, "bias_enable"); if (ret) { DRM_ERROR("Faild to request bias_enable gpio\n"); return -EINVAL; } gpio_direction_output(bias_en_gpio, 0); } _get_panel_reset_gpio(); gpio_direction_output(bias_en_gpio, 0); gpio_direction_output(mipi_reset_gpio, 0); gpio_set_value_cansleep(bias_en_gpio, 0); gpio_set_value_cansleep(mipi_reset_gpio, 0); usleep_range(2000, 2500); gpio_set_value_cansleep(bias_en_gpio, 1); usleep_range(2000, 2500); gpio_set_value_cansleep(mipi_reset_gpio, 1); usleep_range(3000, 3500); vaddr = ioremap(0xff0c2d00, 0x60); iowrite32(0x3221, vaddr + 0x1c); usleep_range(2000, 2500); iounmap(vaddr); /* switch i2c scl pin back */ reg_value_scl |= 0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); iounmap(vaddr1); return 0; }
static int mdfld_dsi_jdi_panel_reset(struct mdfld_dsi_config *dsi_config) { u8 *vaddr1 = NULL; int reg_value_scl = 0; int ret = 0; PSB_DEBUG_ENTRY("\n"); /* Because when reset touchscreen panel, touchscreen will pull i2c bus * to low, sometime this operation will cause i2c bus enter into wrong * status, so before reset, switch i2c scl pin */ vaddr1 = ioremap(SECURE_I2C_FLIS_REG, 4); reg_value_scl = ioread32(vaddr1); reg_value_scl &= ~0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); intel_scu_ipc_msic_vprog2(true); /* For meeting tRW1 panel spec */ usleep_range(2000, 2500); if (bias_en_gpio == 0) { bias_en_gpio = 189; ret = gpio_request(bias_en_gpio, "bias_enable"); if (ret) { DRM_ERROR("Faild to request bias_enable gpio\n"); return -EINVAL; } gpio_direction_output(bias_en_gpio, 0); } if (mipi_reset_gpio == 0) { ret = get_gpio_by_name("disp0_rst"); if (ret < 0) { DRM_ERROR("Faild to get panel reset gpio, " \ "use default reset pin\n"); return -EINVAL; } mipi_reset_gpio = ret; ret = gpio_request(mipi_reset_gpio, "mipi_display"); if (ret) { DRM_ERROR("Faild to request panel reset gpio\n"); return -EINVAL; } gpio_direction_output(mipi_reset_gpio, 0); } gpio_direction_output(bias_en_gpio, 0); gpio_direction_output(mipi_reset_gpio, 0); gpio_set_value_cansleep(bias_en_gpio, 0); gpio_set_value_cansleep(mipi_reset_gpio, 0); usleep_range(2000, 2500); gpio_set_value_cansleep(bias_en_gpio, 1); usleep_range(2000, 2500); gpio_set_value_cansleep(mipi_reset_gpio, 1); usleep_range(2000, 2500); /* switch i2c scl pin back */ reg_value_scl |= 0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); iounmap(vaddr1); return 0; }
static int sharp10x19_cmd_panel_reset(struct mdfld_dsi_config *dsi_config) { int ret = 0; u8 *vaddr = NULL, *vaddr1 = NULL; struct drm_device *dev = dsi_config->dev; int reg_value_scl = 0; PSB_DEBUG_ENTRY("\n"); if (is_dual_panel(dev)) { struct i2c_adapter *adapter; u8 i2_data[4]; adapter = i2c_get_adapter(EXPANDER_BUS_NUMBER); if (adapter) { i2_data[0] = 0x4; i2_data[1] = 0x0; i2c_clients_command(adapter, 1, i2_data); i2_data[0] = 0x5; i2_data[1] = 0x3; i2c_clients_command(adapter, 1, i2_data); } } /* Because when reset touchscreen panel, touchscreen will pull i2c bus * to low, sometime this operation will cause i2c bus enter into wrong * status, so before reset, switch i2c scl pin */ vaddr1 = ioremap(SECURE_I2C_FLIS_REG, 4); reg_value_scl = ioread32(vaddr1); reg_value_scl &= ~0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); __vpro2_power_ctrl(true); usleep_range(2000, 2500); if (bias_en_gpio == 0) { bias_en_gpio = 189; ret = gpio_request(bias_en_gpio, "bias_enable"); if (ret) { DRM_ERROR("Faild to request bias_enable gpio\n"); return -EINVAL; } gpio_direction_output(bias_en_gpio, 0); pr_info("gpio_bias_enable=%d\n", bias_en_gpio); } _get_panel_reset_gpio(is_dual_panel(dev)); gpio_direction_output(bias_en_gpio, 0); gpio_direction_output(mipi_reset_gpio, 0); if (is_dual_panel(dev)) gpio_direction_output(mipic_reset_gpio, 0); gpio_set_value_cansleep(bias_en_gpio, 0); gpio_set_value_cansleep(mipi_reset_gpio, 0); if (is_dual_panel(dev)) gpio_set_value_cansleep(mipic_reset_gpio, 0); usleep_range(2000, 2500); gpio_set_value_cansleep(bias_en_gpio, 1); usleep_range(2000, 2500); gpio_set_value_cansleep(mipi_reset_gpio, 1); usleep_range(2000, 2500); if (is_dual_panel(dev)) { gpio_set_value_cansleep(mipic_reset_gpio, 1); usleep_range(3000, 3500); } vaddr = ioremap(0xff0c2d00, 0x60); iowrite32(0x3221, vaddr + 0x1c); usleep_range(2000, 2500); iounmap(vaddr); /* switch i2c scl pin back */ reg_value_scl |= 0x1000; rpmsg_send_generic_raw_command(RP_INDIRECT_WRITE, 0, (u8 *)®_value_scl, 4, NULL, 0, SECURE_I2C_FLIS_REG, 0); iounmap(vaddr1); return 0; }