Re: [PATCH V2 2/6] OMAPDSS: DISPC: Move DISPC specific dss_reg_fields to dispc_features

2012-12-19 Thread Chandrabhanu Mahapatra
On Monday 17 December 2012 06:07 PM, Tomi Valkeinen wrote:
 On 2012-12-05 12:16, Chandrabhanu Mahapatra wrote:
 The register fields in dss_reg_fields specific to DISPC are moved from struct
 omap_dss_features to corresponding dispc_reg_fields, initialized in struct
 dispc_features, thereby enabling local access.

 Signed-off-by: Chandrabhanu Mahapatra cmahapa...@ti.com
 ---
  drivers/video/omap2/dss/dispc.c|  114 
 
  drivers/video/omap2/dss/dss.h  |4 ++
  drivers/video/omap2/dss/dss_features.c |   28 
  drivers/video/omap2/dss/dss_features.h |7 --
  4 files changed, 89 insertions(+), 64 deletions(-)

 diff --git a/drivers/video/omap2/dss/dispc.c 
 b/drivers/video/omap2/dss/dispc.c
 index bbba83f..ee4b152 100644
 --- a/drivers/video/omap2/dss/dispc.c
 +++ b/drivers/video/omap2/dss/dispc.c
 @@ -80,6 +80,16 @@ struct dispc_irq_stats {
  unsigned irqs[32];
  };
  
 +struct dispc_reg_fields {
 +struct omapdss_reg_field firhinc;
 +struct omapdss_reg_field firvinc;
 +struct omapdss_reg_field fifo_low_thresh;
 +struct omapdss_reg_field fifo_high_thresh;
 +struct omapdss_reg_field fifosize;
 +struct omapdss_reg_field hori_accu;
 +struct omapdss_reg_field vert_accu;
 +};
 +
  struct dispc_features {
  u8 sw_start;
  u8 fp_start;
 @@ -110,6 +120,8 @@ struct dispc_features {
  
  u32 buffer_size_unit; /* in bytes */
  u32 burst_size_unit; /* in bytes */
 +
 +struct dispc_reg_fields *reg_fields;
 
 This can be pointer to const.
 

Yes, the same thing can also be done in other dispc and dsi reg_fields
and param_ranges.

  };
  
  #define DISPC_MAX_NR_FIFOS 5
 @@ -1137,17 +1149,17 @@ static void dispc_mgr_set_size(enum omap_channel 
 channel, u16 width,
  
  static void dispc_init_fifos(void)
  {
 -u32 size;
 +u32 size, unit;
  int fifo;
 -u8 start, end;
 -u32 unit;
 +const struct omapdss_reg_field *fifo_field;
  
  unit = dispc.feat-buffer_size_unit;
  
 -dss_feat_get_reg_field(FEAT_REG_FIFOSIZE, start, end);
 +fifo_field = dispc.feat-reg_fields-fifosize;
  
  for (fifo = 0; fifo  dispc.feat-num_fifos; ++fifo) {
 -size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), start, end);
 +size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo),
 +fifo_field-start, fifo_field-end);
  size *= unit;
  dispc.fifo_size[fifo] = size;
  
 @@ -1197,8 +1209,8 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane 
 plane)
  
  void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high)
  {
 -u8 hi_start, hi_end, lo_start, lo_end;
  u32 unit;
 +const struct omapdss_reg_field *hi_field, *lo_field;
  
  unit = dispc.feat-buffer_size_unit;
  
 @@ -1208,20 +1220,20 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane 
 plane, u32 low, u32 high)
  low /= unit;
  high /= unit;
  
 -dss_feat_get_reg_field(FEAT_REG_FIFOHIGHTHRESHOLD, hi_start, hi_end);
 -dss_feat_get_reg_field(FEAT_REG_FIFOLOWTHRESHOLD, lo_start, lo_end);
 +hi_field = dispc.feat-reg_fields-fifo_high_thresh;
 +lo_field = dispc.feat-reg_fields-fifo_low_thresh;
  
  DSSDBG(fifo(%d) threshold (bytes), old %u/%u, new %u/%u\n,
  plane,
  REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane),
 -lo_start, lo_end) * unit,
 +lo_field-start, lo_field-end) * unit,
  REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane),
 -hi_start, hi_end) * unit,
 +hi_field-start, hi_field-end) * unit,
  low * unit, high * unit);
  
  dispc_write_reg(DISPC_OVL_FIFO_THRESHOLD(plane),
 -FLD_VAL(high, hi_start, hi_end) |
 -FLD_VAL(low, lo_start, lo_end));
 +FLD_VAL(high, hi_field-start, hi_field-end) |
 +FLD_VAL(low, lo_field-start, lo_field-end));
  }
  
  void dispc_enable_fifomerge(bool enable)
 @@ -1289,14 +1301,13 @@ static void dispc_ovl_set_fir(enum omap_plane plane,
  u32 val;
  
  if (color_comp == DISPC_COLOR_COMPONENT_RGB_Y) {
 -u8 hinc_start, hinc_end, vinc_start, vinc_end;
 +const struct omapdss_reg_field *hinc_field, *vinc_field;
  
 -dss_feat_get_reg_field(FEAT_REG_FIRHINC,
 -hinc_start, hinc_end);
 -dss_feat_get_reg_field(FEAT_REG_FIRVINC,
 -vinc_start, vinc_end);
 -val = FLD_VAL(vinc, vinc_start, vinc_end) |
 -FLD_VAL(hinc, hinc_start, hinc_end);
 +hinc_field = dispc.feat-reg_fields-firhinc;
 +vinc_field = dispc.feat-reg_fields-firvinc;
 +
 +val = FLD_VAL(vinc, vinc_field-start, vinc_field-end) |
 +FLD_VAL(hinc, hinc_field-start, hinc_field-end);

Re: [PATCH V2 2/6] OMAPDSS: DISPC: Move DISPC specific dss_reg_fields to dispc_features

2012-12-17 Thread Tomi Valkeinen
On 2012-12-05 12:16, Chandrabhanu Mahapatra wrote:
 The register fields in dss_reg_fields specific to DISPC are moved from struct
 omap_dss_features to corresponding dispc_reg_fields, initialized in struct
 dispc_features, thereby enabling local access.
 
 Signed-off-by: Chandrabhanu Mahapatra cmahapa...@ti.com
 ---
  drivers/video/omap2/dss/dispc.c|  114 
 
  drivers/video/omap2/dss/dss.h  |4 ++
  drivers/video/omap2/dss/dss_features.c |   28 
  drivers/video/omap2/dss/dss_features.h |7 --
  4 files changed, 89 insertions(+), 64 deletions(-)
 
 diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
 index bbba83f..ee4b152 100644
 --- a/drivers/video/omap2/dss/dispc.c
 +++ b/drivers/video/omap2/dss/dispc.c
 @@ -80,6 +80,16 @@ struct dispc_irq_stats {
   unsigned irqs[32];
  };
  
 +struct dispc_reg_fields {
 + struct omapdss_reg_field firhinc;
 + struct omapdss_reg_field firvinc;
 + struct omapdss_reg_field fifo_low_thresh;
 + struct omapdss_reg_field fifo_high_thresh;
 + struct omapdss_reg_field fifosize;
 + struct omapdss_reg_field hori_accu;
 + struct omapdss_reg_field vert_accu;
 +};
 +
  struct dispc_features {
   u8 sw_start;
   u8 fp_start;
 @@ -110,6 +120,8 @@ struct dispc_features {
  
   u32 buffer_size_unit; /* in bytes */
   u32 burst_size_unit; /* in bytes */
 +
 + struct dispc_reg_fields *reg_fields;

This can be pointer to const.

  };
  
  #define DISPC_MAX_NR_FIFOS 5
 @@ -1137,17 +1149,17 @@ static void dispc_mgr_set_size(enum omap_channel 
 channel, u16 width,
  
  static void dispc_init_fifos(void)
  {
 - u32 size;
 + u32 size, unit;
   int fifo;
 - u8 start, end;
 - u32 unit;
 + const struct omapdss_reg_field *fifo_field;
  
   unit = dispc.feat-buffer_size_unit;
  
 - dss_feat_get_reg_field(FEAT_REG_FIFOSIZE, start, end);
 + fifo_field = dispc.feat-reg_fields-fifosize;
  
   for (fifo = 0; fifo  dispc.feat-num_fifos; ++fifo) {
 - size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), start, end);
 + size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo),
 + fifo_field-start, fifo_field-end);
   size *= unit;
   dispc.fifo_size[fifo] = size;
  
 @@ -1197,8 +1209,8 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane 
 plane)
  
  void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high)
  {
 - u8 hi_start, hi_end, lo_start, lo_end;
   u32 unit;
 + const struct omapdss_reg_field *hi_field, *lo_field;
  
   unit = dispc.feat-buffer_size_unit;
  
 @@ -1208,20 +1220,20 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane 
 plane, u32 low, u32 high)
   low /= unit;
   high /= unit;
  
 - dss_feat_get_reg_field(FEAT_REG_FIFOHIGHTHRESHOLD, hi_start, hi_end);
 - dss_feat_get_reg_field(FEAT_REG_FIFOLOWTHRESHOLD, lo_start, lo_end);
 + hi_field = dispc.feat-reg_fields-fifo_high_thresh;
 + lo_field = dispc.feat-reg_fields-fifo_low_thresh;
  
   DSSDBG(fifo(%d) threshold (bytes), old %u/%u, new %u/%u\n,
   plane,
   REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane),
 - lo_start, lo_end) * unit,
 + lo_field-start, lo_field-end) * unit,
   REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane),
 - hi_start, hi_end) * unit,
 + hi_field-start, hi_field-end) * unit,
   low * unit, high * unit);
  
   dispc_write_reg(DISPC_OVL_FIFO_THRESHOLD(plane),
 - FLD_VAL(high, hi_start, hi_end) |
 - FLD_VAL(low, lo_start, lo_end));
 + FLD_VAL(high, hi_field-start, hi_field-end) |
 + FLD_VAL(low, lo_field-start, lo_field-end));
  }
  
  void dispc_enable_fifomerge(bool enable)
 @@ -1289,14 +1301,13 @@ static void dispc_ovl_set_fir(enum omap_plane plane,
   u32 val;
  
   if (color_comp == DISPC_COLOR_COMPONENT_RGB_Y) {
 - u8 hinc_start, hinc_end, vinc_start, vinc_end;
 + const struct omapdss_reg_field *hinc_field, *vinc_field;
  
 - dss_feat_get_reg_field(FEAT_REG_FIRHINC,
 - hinc_start, hinc_end);
 - dss_feat_get_reg_field(FEAT_REG_FIRVINC,
 - vinc_start, vinc_end);
 - val = FLD_VAL(vinc, vinc_start, vinc_end) |
 - FLD_VAL(hinc, hinc_start, hinc_end);
 + hinc_field = dispc.feat-reg_fields-firhinc;
 + vinc_field = dispc.feat-reg_fields-firvinc;
 +
 + val = FLD_VAL(vinc, vinc_field-start, vinc_field-end) |
 + FLD_VAL(hinc, hinc_field-start, hinc_field-end);
  
   dispc_write_reg(DISPC_OVL_FIR(plane), val);
   } else {
 @@