dev_err(dev, "assert vout resets error.\n");
}
+static irqreturn_t dc_isr(int irq, void *data)
+{
+ struct vs_dc *dc = data;
+ struct vs_dc_info *dc_info = dc->hw.info;
+ u32 i, ret;
+
+ ret = dc_hw_get_interrupt(&dc->hw);
+
+ for (i = 0; i < dc_info->panel_num; i++)
+ vs_crtc_handle_vblank(&dc->crtc[i]->base, dc_hw_check_underflow(&dc->hw));
+
+ return IRQ_HANDLED;
+}
+
///////////////////////////////////////////////////////////
static int dc_init(struct device *dev)
struct dc_hw_display display;
int ret;
+
if (dc->init_finished == false) {
ret = dc_vout_clk_enable(dev, dc);
if (ret)
//regmap_update_bits(dc->dss_regmap, 0x8, BIT(3), 1 << 3);
dc_hw_setup_display(&dc->hw, &display);
+ ret = devm_request_irq(dev, dc->irq, dc_isr, 0, dev_name(dev), dc);
+ if (ret < 0) {
+ dev_err(dev, "Failed to install irq:%u.\n", dc->irq);
+ return;
+ }
+
}
static void vs_dc_disable(struct device *dev, struct drm_crtc *crtc)
true, true);
}
-static irqreturn_t dc_isr(int irq, void *data)
-{
- struct vs_dc *dc = data;
- struct vs_dc_info *dc_info = dc->hw.info;
- u32 i, ret;
- ret = dc_hw_get_interrupt(&dc->hw);
-
- for (i = 0; i < dc_info->panel_num; i++)
- vs_crtc_handle_vblank(&dc->crtc[i]->base, dc_hw_check_underflow(&dc->hw));
-
- return IRQ_HANDLED;
-}
static void vs_dc_commit(struct device *dev)
{
/*vout clk disable*/
vs_dc_clock_disable(dc);
+ printk("====> %s, %d--devm_request_irq.\n", __func__, __LINE__);
return 0;
if (IS_ERR(dc->hw.mmu_base))
return PTR_ERR(dc->hw.mmu_base);
#endif
-
- irq = platform_get_irq(pdev, 0);
- ret = devm_request_irq(dev, irq, dc_isr, 0, dev_name(dev), dc);
- if (ret < 0) {
- dev_err(dev, "Failed to install irq:%u.\n", irq);
- return ret;
- }
+ dc->irq = platform_get_irq(pdev, 0);
dev_set_drvdata(dev, dc);