mdp_kms
void mdp4_set_irqmask(struct mdp_kms *mdp_kms, uint32_t irqmask,
mdp4_write(to_mdp4_kms(mdp_kms), REG_MDP4_INTR_CLEAR,
mdp4_write(to_mdp4_kms(mdp_kms), REG_MDP4_INTR_ENABLE, irqmask);
struct mdp_kms *mdp_kms = to_mdp_kms(kms);
struct mdp4_kms *mdp4_kms = to_mdp4_kms(mdp_kms);
mdp_irq_register(mdp_kms, error_handler);
struct mdp_kms *mdp_kms = to_mdp_kms(kms);
struct mdp4_kms *mdp4_kms = to_mdp4_kms(mdp_kms);
mdp_dispatch_irqs(mdp_kms, status);
void mdp4_set_irqmask(struct mdp_kms *mdp_kms, uint32_t irqmask,
struct mdp_kms base;
void mdp5_set_irqmask(struct mdp_kms *mdp_kms, uint32_t irqmask,
mdp5_write(to_mdp5_kms(mdp_kms), REG_MDP5_INTR_CLEAR,
mdp5_write(to_mdp5_kms(mdp_kms), REG_MDP5_INTR_EN, irqmask);
struct mdp_kms *mdp_kms = to_mdp_kms(kms);
struct mdp5_kms *mdp5_kms = to_mdp5_kms(mdp_kms);
mdp_irq_register(mdp_kms, error_handler);
struct mdp_kms *mdp_kms = to_mdp_kms(kms);
struct mdp5_kms *mdp5_kms = to_mdp5_kms(mdp_kms);
mdp_dispatch_irqs(mdp_kms, status);
struct mdp_kms base;
void mdp5_set_irqmask(struct mdp_kms *mdp_kms, uint32_t irqmask,
void mdp_irq_register(struct mdp_kms *mdp_kms, struct mdp_irq *irq)
list_add(&irq->node, &mdp_kms->irq_list);
needs_update = !mdp_kms->in_irq;
mdp_irq_update(mdp_kms);
void mdp_irq_unregister(struct mdp_kms *mdp_kms, struct mdp_irq *irq)
needs_update = !mdp_kms->in_irq;
mdp_irq_update(mdp_kms);
static void update_irq(struct mdp_kms *mdp_kms)
uint32_t irqmask = mdp_kms->vblank_mask;
list_for_each_entry(irq, &mdp_kms->irq_list, node)
mdp_kms->funcs->set_irqmask(mdp_kms, irqmask, mdp_kms->cur_irq_mask);
mdp_kms->cur_irq_mask = irqmask;
void mdp_irq_update(struct mdp_kms *mdp_kms)
update_irq(mdp_kms);
void mdp_dispatch_irqs(struct mdp_kms *mdp_kms, uint32_t status)
mdp_kms->in_irq = true;
list_for_each_entry_safe(handler, n, &mdp_kms->irq_list, node) {
mdp_kms->in_irq = false;
update_irq(mdp_kms);
void mdp_update_vblank_mask(struct mdp_kms *mdp_kms, uint32_t mask, bool enable)
mdp_kms->vblank_mask |= mask;
mdp_kms->vblank_mask &= ~mask;
update_irq(mdp_kms);
void mdp_irq_wait(struct mdp_kms *mdp_kms, uint32_t irqmask)
mdp_irq_register(mdp_kms, &wait.irq);
mdp_irq_unregister(mdp_kms, &wait.irq);
struct mdp_kms;
void (*set_irqmask)(struct mdp_kms *mdp_kms, uint32_t irqmask,
#define to_mdp_kms(x) container_of(x, struct mdp_kms, base)
static inline int mdp_kms_init(struct mdp_kms *mdp_kms,
mdp_kms->funcs = funcs;
INIT_LIST_HEAD(&mdp_kms->irq_list);
return msm_kms_init(&mdp_kms->base, &funcs->base);
static inline void mdp_kms_destroy(struct mdp_kms *mdp_kms)
msm_kms_destroy(&mdp_kms->base);
void mdp_dispatch_irqs(struct mdp_kms *mdp_kms, uint32_t status);
void mdp_update_vblank_mask(struct mdp_kms *mdp_kms, uint32_t mask, bool enable);
void mdp_irq_wait(struct mdp_kms *mdp_kms, uint32_t irqmask);
void mdp_irq_register(struct mdp_kms *mdp_kms, struct mdp_irq *irq);
void mdp_irq_unregister(struct mdp_kms *mdp_kms, struct mdp_irq *irq);
void mdp_irq_update(struct mdp_kms *mdp_kms);