static bool validate_lfp_data_ptrs(const void *bdb,
                                   const struct bdb_lvds_lfp_data_ptrs *ptrs)
 {
-       int fp_timing_size, dvo_timing_size, panel_pnp_id_size;
+       int fp_timing_size, dvo_timing_size, panel_pnp_id_size, panel_name_size;
        int data_block_size, lfp_data_size;
        int i;
 
        fp_timing_size = ptrs->ptr[0].fp_timing.table_size;
        dvo_timing_size = ptrs->ptr[0].dvo_timing.table_size;
        panel_pnp_id_size = ptrs->ptr[0].panel_pnp_id.table_size;
+       panel_name_size = ptrs->panel_name.table_size;
 
        /* fp_timing has variable size */
        if (fp_timing_size < 32 ||
            panel_pnp_id_size != sizeof(struct lvds_pnp_id))
                return false;
 
+       /* panel_name is not present in old VBTs */
+       if (panel_name_size != 0 &&
+           panel_name_size != sizeof(struct lvds_lfp_panel_name))
+               return false;
+
        lfp_data_size = ptrs->ptr[1].fp_timing.offset - ptrs->ptr[0].fp_timing.offset;
        if (16 * lfp_data_size > data_block_size)
                return false;
                        return false;
        }
 
+       if (ptrs->panel_name.offset + 16 * panel_name_size > data_block_size)
+               return false;
+
        return true;
 }
 
                ptrs->ptr[i].panel_pnp_id.offset -= offset;
        }
 
+       if (ptrs->panel_name.table_size) {
+               if (ptrs->panel_name.offset < offset)
+                       return false;
+
+               ptrs->panel_name.offset -= offset;
+       }
+
        return validate_lfp_data_ptrs(bdb, ptrs);
 }
 
 
 struct bdb_lvds_lfp_data_ptrs {
        u8 lvds_entries; /* followed by one or more lvds_data_ptr structs */
        struct lvds_lfp_data_ptr ptr[16];
+       struct lvds_lfp_data_ptr_table panel_name; /* 156-163? */
 } __packed;
 
 /*
        struct lvds_lfp_data_entry data[16];
 } __packed;
 
+struct lvds_lfp_panel_name {
+       u8 name[13];
+} __packed;
+
 /*
  * Block 43 - LFP Backlight Control Data Block
  */