On Sun, Nov 16, 2014 at 09:18:47AM -0500, Rob Clark wrote: > On Fri, Nov 14, 2014 at 5:42 PM, Hai Li <hali@xxxxxxxxxxxxxx> wrote: > > All the sub-systems in mdss share the same irq. This change provides > > the sub-systems with the interfaces to register/unregister their own > > irq handlers. > > > > With this change, struct mdp5_kms does not have to keep the hdmi or > > edp context. > > > > So, I think the point of this is to better deal w/ different hw > variants which do or do-not have hdmi, edp, dsi, etc.. > > But, just playing devil's advocate here, it seems like it would be > simpler to instead just do something like: > > if (priv->hdmi && (intr & MDP5_HW_INTR_STATUS_INTR_HDMI)) > hdmi_irq(0, priv->hdmi); > > if (priv->edp && (intr & MDP5_HW_INTR_STATUS_INTR_EDP)) > edp_irq(0, priv->edp); > > ... etc ... > > It is a little less elegant. But it is also less lines of code. I > guess there will be plenty of necessary complexity as we add support > for all mdp5 features. So avoiding some unnecessary complexity might > be a good thing in the long run. > > If we really did want to make it more dynamic, we could always extend > 'struct mdp_irq' to take both an irq mask and an initiator id, I > suppose. I'm not sure if that is overkill. AFAICT we really only > have 5 different subsystems to dispatch to (mdp5 itself, and > dsi0/dsi1/hdmi/edp), so simply adding some if-not-null checks in > mdp5_irq() seems pretty reasonable to me. To me this just seems like a regular interrupt multiplexer, so implementing it as an irq_chip would be the most appropriate. That way you get all the goodness of a well-tested code base for free and you can simply pass in the request_{threaded_,}irq()'s dev parameter. Thierry
Attachment:
pgp4jHNPMEIYy.pgp
Description: PGP signature