static int s5p_cec_open(struct inode *inode, struct file *file) { int ret = 0; mutex_lock(&cec_lock); clk_enable(hdmi_cec_clk); if (atomic_read(&hdmi_on)) { tvout_dbg("do not allow multiple open for tvout cec\n"); ret = -EBUSY; goto err_multi_open; } else atomic_inc(&hdmi_on); s5p_cec_reset(); s5p_cec_set_divider(); s5p_cec_threshold(); s5p_cec_unmask_tx_interrupts(); s5p_cec_set_rx_state(STATE_RX); s5p_cec_unmask_rx_interrupts(); s5p_cec_enable_rx(); err_multi_open: mutex_unlock(&cec_lock); return ret; }
static int s5p_cec_open(struct inode *inode, struct file *file) { g_hdmi_on = true; s5p_cec_reset(); s5p_cec_set_divider(); s5p_cec_threshold(); s5p_cec_unmask_tx_interrupts(); s5p_cec_set_rx_state(STATE_RX); s5p_cec_unmask_rx_interrupts(); s5p_cec_enable_rx(); return 0; }
static int s5p_cec_adap_enable(struct cec_adapter *adap, bool enable) { struct s5p_cec_dev *cec = cec_get_drvdata(adap); if (enable) { pm_runtime_get_sync(cec->dev); s5p_cec_reset(cec); s5p_cec_set_divider(cec); s5p_cec_threshold(cec); s5p_cec_unmask_tx_interrupts(cec); s5p_cec_unmask_rx_interrupts(cec); s5p_cec_enable_rx(cec); } else { s5p_cec_mask_tx_interrupts(cec); s5p_cec_mask_rx_interrupts(cec); pm_runtime_disable(cec->dev); } return 0; }