fbdev: sh_mobile_hdmi: Don't access LCDC channel in notifier callback
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Thu, 24 Nov 2011 10:53:47 +0000 (11:53 +0100)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 12 Mar 2012 21:40:43 +0000 (22:40 +0100)
Instead of relying on info->par being a pointer to an LCDC channel, cast
the notifier block pointer to an sh_hdmi pointer.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/video/sh_mobile_hdmi.c

index 647ba984f00f6b890c0fc7b9960c0ece05c31c9f..a77bbc3e9e13e08e2bb3d7f1941e5cb6977e450f 100644 (file)
@@ -225,6 +225,8 @@ struct sh_hdmi {
        struct notifier_block notifier;
 };
 
+#define notifier_to_hdmi(n)    container_of(n, struct sh_hdmi, notifier)
+
 static void hdmi_write(struct sh_hdmi *hdmi, u8 data, u8 reg)
 {
        iowrite8(data, hdmi->base + reg);
@@ -1204,11 +1206,9 @@ static int sh_hdmi_notify(struct notifier_block *nb,
 {
        struct fb_event *event = data;
        struct fb_info *info = event->info;
-       struct sh_mobile_lcdc_chan *ch = info->par;
-       struct sh_mobile_lcdc_board_cfg *board_cfg = &ch->cfg.board_cfg;
-       struct sh_hdmi *hdmi = board_cfg->board_data;
+       struct sh_hdmi *hdmi = notifier_to_hdmi(nb);
 
-       if (!hdmi || nb != &hdmi->notifier || hdmi->info != info)
+       if (hdmi->info != info)
                return NOTIFY_DONE;
 
        switch(action) {