int create_decon_mic(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct display_driver *dispdrv; struct decon_mic *mic; struct resource *res; dispdrv = get_display_driver(); mic = devm_kzalloc(dev, sizeof(struct decon_mic), GFP_KERNEL); if (!mic) { dev_err(dev, "no memory for mic driver"); return -ENOMEM; } mic->dev = dev; mic->lcd = decon_get_lcd_info(); mic->mic_config = dispdrv->dt_ops.get_display_mic_config(); mic->decon_mic_on = false; res = dispdrv->mic_driver.regs; if (!res) { dev_err(dev, "failed to find resource\n"); return -ENOENT; } mic->reg_base = ioremap(res->start, resource_size(res)); if (!mic->reg_base) { dev_err(dev, "failed to map registers\n"); return -ENXIO; } decon_mic_set_sys_reg(mic, DECON_MIC_ON); decon_mic_set_image_size(mic); decon_mic_set_2d_bit_stream_size(mic); decon_mic_set_mic_base_operation(mic, DECON_MIC_ON); mic_for_decon = mic; mic->decon_mic_on = true; dispdrv->mic_driver.mic = mic; #ifdef CONFIG_FB_HIBERNATION_DISPLAY dispdrv->mic_driver.ops->pwr_on = decon_mic_hibernation_power_on; dispdrv->mic_driver.ops->pwr_off = decon_mic_hibernation_power_off; #endif dev_info(dev, "MIC driver has been probed\n"); return 0; }
int decon_mic_hibernation_power_off(struct display_driver *dispdrv) { struct decon_mic *mic = dispdrv->mic_driver.mic; decon_mic_set_mic_base_operation(mic, DECON_MIC_OFF); decon_mic_set_sys_reg(mic, DECON_MIC_OFF); mic->decon_mic_on = false; return 0; }
int decon_mic_hibernation_power_on(struct display_driver *dispdrv) { struct decon_mic *mic = dispdrv->mic_driver.mic; decon_mic_set_sys_reg(mic, DECON_MIC_ON); decon_mic_set_image_size(mic); decon_mic_set_2d_bit_stream_size(mic); decon_mic_set_mic_base_operation(mic, DECON_MIC_ON); mic->decon_mic_on = true; return 0; }
int decon_mic_disable(struct decon_mic *mic) { if (mic->decon_mic_on == false) return 0; decon_mic_set_sys_reg(mic, DECON_MIC_OFF); decon_mic_set_mic_base_operation(mic, DECON_MIC_OFF); mic->decon_mic_on = false; dev_info(mic->dev, "MIC driver is OFF;\n"); return 0; }
int decon_mic_hibernation_power_on(struct display_driver *dispdrv) { struct decon_mic *mic = dispdrv->mic_driver.mic; decon_mic_sw_reset(mic); decon_mic_set_sys_reg(mic, DECON_MIC_ON); decon_mic_set_porch_timing(mic); decon_mic_set_image_size(mic); decon_mic_set_output_timing(mic); decon_mic_set_alg_param(mic); decon_mic_set_mic_base_operation(mic, DECON_MIC_ON); mic->decon_mic_on = true; return 0; }
int decon_mic_enable(struct decon_mic *mic) { if (!mic->lcd->mic) return 0; if (mic->decon_mic_on == true) return 0; decon_mic_set_sys_reg(mic, DECON_MIC_ON); mic_reg_start(mic->lcd); mic->decon_mic_on = true; dev_dbg(mic->dev, "MIC driver is ON;\n"); return 0; }
int decon_mic_enable(struct decon_mic *mic) { if (mic->decon_mic_on == true) return 0; decon_mic_sw_reset(mic); decon_mic_set_sys_reg(mic, DECON_MIC_ON); decon_mic_set_porch_timing(mic); decon_mic_set_image_size(mic); decon_mic_set_output_timing(mic); decon_mic_set_alg_param(mic); decon_mic_set_mic_base_operation(mic, DECON_MIC_ON); mic->decon_mic_on = true; dev_info(mic->dev, "MIC driver is ON;\n"); return 0; }
int decon_mic_enable(struct decon_mic *mic) { if (mic->decon_mic_on == true) return 0; decon_mic_set_sys_reg(mic, DECON_MIC_ON); decon_mic_set_image_size(mic); decon_mic_set_2d_bit_stream_size(mic); decon_mic_set_mic_base_operation(mic, DECON_MIC_ON); mic->decon_mic_on = true; dev_info(mic->dev, "MIC driver is ON;\n"); return 0; }
int decon_mic_hibernation_power_on(struct display_driver *dispdrv) { struct decon_mic *mic = dispdrv->mic_driver.mic; /* from here, it must be same with decon_mic_enable function */ if (!mic->lcd->mic) return 0; if (mic->decon_mic_on == true) return 0; decon_mic_set_sys_reg(mic, DECON_MIC_ON); mic_reg_start(mic->lcd_update); mic->decon_mic_on = true; dev_dbg(mic->dev, "MIC driver is ON;\n"); return 0; }
int decon_mic_disable(struct decon_mic *mic) { if (!mic->lcd->mic) return 0; if (mic->decon_mic_on == false) return 0; mic_reg_stop(mic->lcd); decon_mic_set_sys_reg(mic, DECON_MIC_OFF); mic->decon_mic_on = false; #ifdef CONFIG_FB_HIBERNATION_DISPLAY mic->lcd_update->xres = mic->lcd->xres; mic->lcd_update->yres = mic->lcd->yres; #endif dev_dbg(mic->dev, "MIC driver is OFF;\n"); return 0; }