Re: [PATCH RFC 2/6] mm: convert PG_balloon to PG_offline

2018-11-14 Thread Mike Rapoport
On Wed, Nov 14, 2018 at 11:49:15PM +0100, David Hildenbrand wrote:
> On 14.11.18 23:23, Matthew Wilcox wrote:
> > On Wed, Nov 14, 2018 at 10:17:00PM +0100, David Hildenbrand wrote:
> >> Rename PG_balloon to PG_offline. This is an indicator that the page is
> >> logically offline, the content stale and that it should not be touched
> >> (e.g. a hypervisor would have to allocate backing storage in order for the
> >> guest to dump an unused page).  We can then e.g. exclude such pages from
> >> dumps.
> >>
> >> In following patches, we will make use of this bit also in other balloon
> >> drivers.  While at it, document PGTABLE.
> > 
> > Thank you for documenting PGTABLE.  I didn't realise I also had this
> > document to update when I added PGTABLE.
> 
> Thank you for looking into this :)
> 
> > 
> >> +++ b/Documentation/admin-guide/mm/pagemap.rst
> >> @@ -78,6 +78,8 @@ number of times a page is mapped.
> >>  23. BALLOON
> >>  24. ZERO_PAGE
> >>  25. IDLE
> >> +26. PGTABLE
> >> +27. OFFLINE
> > 
> > So the offline *user* bit is new ... even though the *kernel* bit
> > just renames the balloon bit.  I'm not sure how I feel about this.
> > I'm going to think about it some more.  Could you share your decision
> > process with us?
> 
> BALLOON was/is documented as
> 
> "23 - BALLOON
> balloon compaction page
> "
> 
> and only includes all virtio-ballon pages after the non-lru migration
> feature has been implemented for ballooned pages. Since then, this flag
> does basically no longer stands for what it actually was supposed to do.

Perhaps I missing something, but how the user should interpret "23" when he
reads /proc/kpageflags?

> To not break uapi I decided to not rename it but instead to add a new flag.

I've got a feeling that uapi was anyway changed for the BALLON flag
meaning.
 
> > 
> > I have no objection to renaming the balloon bit inside the kernel; I
> > think that's a wise idea.  I'm just not sure whether we should rename
> > the user balloon bit rather than adding a new bit.
> > 
> 
> Can we rename without breaking uapi?
> 
> -- 
> 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: sm750fb: Fix printk() style warning

2016-10-13 Thread Mike Rapoport
On Mon, Oct 10, 2016 at 07:31:46AM -0700, Edward Lipinsky wrote:
> 
> Thanks, that makes sense.  I tried deleting the if statement and printk()
> from ddk750_help.c, and adding the following in lynxfb_pci_probe() after
> calling hw_sm750_map() and checking for errors:
> 
> if (sm750_dev->revid == 0xfe)
>   dev_info(&pdev->dev, "found sm750le\n");
> 
> The driver compiles, loads and unloads ok with this code.
> 
> Does this look correct?

Yep, seems just right.
 
> Regards,
> Ed L.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: sm750fb: Fix printk() style warning

2016-10-07 Thread Mike Rapoport
On Thu, Oct 06, 2016 at 09:27:36PM -0700, Edward Lipinsky wrote:
> On Sun, Oct 02, 2016 at 08:13:01PM +0200, Greg KH wrote:
> > On Sun, Oct 02, 2016 at 11:05:05AM -0700, Edward Lipinsky wrote:
> > > This patch fixes the checkpatch.pl warning:
> > > 
> > > WARNING: printk() should include KERN_ facility level
> > > 
> > > Signed-off-by: Edward Lipinsky 
> > > ---
> > >  drivers/staging/sm750fb/ddk750_help.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/staging/sm750fb/ddk750_help.c 
> > > b/drivers/staging/sm750fb/ddk750_help.c
> > > index 9637dd3..e72a29c 100644
> > > --- a/drivers/staging/sm750fb/ddk750_help.c
> > > +++ b/drivers/staging/sm750fb/ddk750_help.c
> > > @@ -11,7 +11,7 @@ void ddk750_set_mmio(void __iomem *addr, unsigned short 
> > > devId, char revId)
> > >   devId750 = devId;
> > >   revId750 = revId;
> > >   if (revId == 0xfe)
> > > - printk("found sm750le\n");
> > > + pr_info("found sm750le\n");
> > 
> > Why can't you use dev_info() here?
> > 
> > thanks,
> > 
> > greg k-h
> 
> It should work, but I'm not sure what should change in the header files to
> do it--esp. to make the dev parameter available in ddk750_help.c.  (Only
> sm750.c uses dev_ style logging now, the rest of the driver still uses pr_*.)

This printk can be moved to lynxfb_pci_probe, and then it should be no
problem to use dev_info. Just make sure to update the commit message
appropriately. 
 
> Thanks,
> 
> Ed Lipinsky

--
Sincerely yours,
Mike.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 3/5] staging: sm750fb: replace absDiff with kernel standard abs macro

2016-02-19 Thread Mike Rapoport
 already has 'abs', use it instead of custom absDiff

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 3 ++-
 drivers/staging/sm750fb/sm750_help.h  | 8 
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index e53a3d1..02157f8 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -1,3 +1,4 @@
+#include 
 #include 
 
 #include "ddk750_help.h"
@@ -335,7 +336,7 @@ unsigned int calcPllValue(unsigned int request_orig, 
pll_value_t *pll)
unsigned int diff;
 
tmpClock = pll->inputFreq * M / N / X;
-   diff = absDiff(tmpClock, request_orig);
+   diff = abs(tmpClock - request_orig);
if (diff < mini_diff) {
pll->M = M;
pll->N = N;
diff --git a/drivers/staging/sm750fb/sm750_help.h 
b/drivers/staging/sm750fb/sm750_help.h
index c070cf2..ce94d29 100644
--- a/drivers/staging/sm750fb/sm750_help.h
+++ b/drivers/staging/sm750fb/sm750_help.h
@@ -38,14 +38,6 @@
 #define FIELD_SIZE(field)   (1 + FIELD_END(field) - 
FIELD_START(field))
 #define FIELD_MASK(field)   (((1 << (FIELD_SIZE(field)-1)) | ((1 
<< (FIELD_SIZE(field)-1)) - 1)) << FIELD_START(field))
 
-static inline unsigned int absDiff(unsigned int a, unsigned int b)
-{
-   if (a < b)
-   return b-a;
-   else
-   return a-b;
-}
-
 /* n / d + 1 / 2 = (2n + d) / 2d */
 #define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom)))
 #define MHz(x) ((x) * 100)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/5] staging: sm750: change definition of multi-bit register fields

2016-02-19 Thread Mike Rapoport
Use stratigh-forward of multi-bit register fields

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h  | 907 +-
 drivers/staging/sm750fb/sm750_accel.h |  62 +--
 2 files changed, 484 insertions(+), 485 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d96ea9e..9552479 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -110,135 +110,135 @@
 
 #define LOCALMEM_ARBITRATION  0x0C
 #define LOCALMEM_ARBITRATION_ROTATE   BIT(28)
-#define LOCALMEM_ARBITRATION_VGA  26:24
-#define LOCALMEM_ARBITRATION_VGA_OFF  0
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_1   1
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_2   2
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_3   3
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_4   4
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_5   5
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_6   6
-#define LOCALMEM_ARBITRATION_VGA_PRIORITY_7   7
-#define LOCALMEM_ARBITRATION_DMA  22:20
-#define LOCALMEM_ARBITRATION_DMA_OFF  0
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_1   1
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_2   2
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_3   3
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_4   4
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_5   5
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_6   6
-#define LOCALMEM_ARBITRATION_DMA_PRIORITY_7   7
-#define LOCALMEM_ARBITRATION_ZVPORT1  18:16
-#define LOCALMEM_ARBITRATION_ZVPORT1_OFF  0
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_1   1
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_2   2
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_3   3
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_4   4
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_5   5
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_6   6
-#define LOCALMEM_ARBITRATION_ZVPORT1_PRIORITY_7   7
-#define LOCALMEM_ARBITRATION_ZVPORT0  14:12
-#define LOCALMEM_ARBITRATION_ZVPORT0_OFF  0
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_1   1
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_2   2
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_3   3
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_4   4
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_5   5
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_6   6
-#define LOCALMEM_ARBITRATION_ZVPORT0_PRIORITY_7   7
-#define LOCALMEM_ARBITRATION_VIDEO10:8
-#define LOCALMEM_ARBITRATION_VIDEO_OFF0
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_1 1
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_2 2
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_3 3
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_4 4
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_5 5
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_6 6
-#define LOCALMEM_ARBITRATION_VIDEO_PRIORITY_7 7
-#define LOCALMEM_ARBITRATION_PANEL6:4
-#define LOCALMEM_ARBITRATION_PANEL_OFF0
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_1 1
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_2 2
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_3 3
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_4 4
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_5 5
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_6 6
-#define LOCALMEM_ARBITRATION_PANEL_PRIORITY_7 7
-#define LOCALMEM_ARBITRATION_CRT  2:0
-#define LOCALMEM_ARBITRATION_CRT_OFF  0
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_1   1
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_2   2
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_3   3
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_4   4
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_5   5
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_6   6
-#define LOCALMEM_ARBITRATION_CRT_PRIORITY_7   7
+#define LOCALMEM_ARBITRATION_VGA_MASK (0x7 << 24)
+#define LOCALMEM_ARBITRATION_VGA_OFF  (0x0 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_1   (0x1 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_2   (0x2 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_3   (0x3 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_4   (0x4 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_5   (0x5 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_6   (0x6 << 24)
+#define LOCALMEM_ARBITRATION_VGA_PRIORITY_7   (0x7 << 24)
+#define LOCALMEM_ARBITRATION_DMA_MASK (0x7 << 20)
+#define LOCALM

[PATCH 4/5] staging: sm750fb: move MHz() and roundedDiv() close to their usage

2016-02-19 Thread Mike Rapoport
The MHz() and roundedDiv macros are used only by ddk750_chip.c, so move
their definition there.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 4 
 drivers/staging/sm750fb/sm750_help.h  | 7 ---
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 02157f8..95f7cae 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -6,6 +6,10 @@
 #include "ddk750_chip.h"
 #include "ddk750_power.h"
 
+/* n / d + 1 / 2 = (2n + d) / 2d */
+#define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom)))
+#define MHz(x) ((x) * 100)
+
 logical_chip_type_t getChipType(void)
 {
unsigned short physicalID;
diff --git a/drivers/staging/sm750fb/sm750_help.h 
b/drivers/staging/sm750fb/sm750_help.h
index ce94d29..833cf16 100644
--- a/drivers/staging/sm750fb/sm750_help.h
+++ b/drivers/staging/sm750fb/sm750_help.h
@@ -38,11 +38,4 @@
 #define FIELD_SIZE(field)   (1 + FIELD_END(field) - 
FIELD_START(field))
 #define FIELD_MASK(field)   (((1 << (FIELD_SIZE(field)-1)) | ((1 
<< (FIELD_SIZE(field)-1)) - 1)) << FIELD_START(field))
 
-/* n / d + 1 / 2 = (2n + d) / 2d */
-#define roundedDiv(num, denom) ((2 * (num) + (denom)) / (2 * (denom)))
-#define MHz(x) ((x) * 100)
-
-
-
-
 #endif
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 5/5] staging: sm750fb: remove sm750_help.h

2016-02-19 Thread Mike Rapoport
This header only contains unused FIELD_*() macros and friends and may be
removed

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_help.h  |  1 -
 drivers/staging/sm750fb/sm750_accel.c  |  1 -
 drivers/staging/sm750fb/sm750_cursor.c |  1 -
 drivers/staging/sm750fb/sm750_help.h   | 41 --
 4 files changed, 44 deletions(-)
 delete mode 100644 drivers/staging/sm750fb/sm750_help.h

diff --git a/drivers/staging/sm750fb/ddk750_help.h 
b/drivers/staging/sm750fb/ddk750_help.h
index 5be814e..009db92 100644
--- a/drivers/staging/sm750fb/ddk750_help.h
+++ b/drivers/staging/sm750fb/ddk750_help.h
@@ -6,7 +6,6 @@
 #include 
 #include 
 #include 
-#include "sm750_help.h"
 
 /* software control endianness */
 #define PEEK32(addr) readl(addr + mmio750)
diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index 5975bd0..9aa4066 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -17,7 +17,6 @@
 
 #include "sm750.h"
 #include "sm750_accel.h"
-#include "sm750_help.h"
 static inline void write_dpr(struct lynx_accel *accel, int offset, u32 
regValue)
 {
writel(regValue, accel->dprBase + offset);
diff --git a/drivers/staging/sm750fb/sm750_cursor.c 
b/drivers/staging/sm750fb/sm750_cursor.c
index 37decce..2d348c6 100644
--- a/drivers/staging/sm750fb/sm750_cursor.c
+++ b/drivers/staging/sm750fb/sm750_cursor.c
@@ -16,7 +16,6 @@
 #include 
 
 #include "sm750.h"
-#include "sm750_help.h"
 #include "sm750_cursor.h"
 
 
diff --git a/drivers/staging/sm750fb/sm750_help.h 
b/drivers/staging/sm750fb/sm750_help.h
deleted file mode 100644
index 833cf16..000
--- a/drivers/staging/sm750fb/sm750_help.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef LYNX_HELP_H__
-#define LYNX_HELP_H__
-
-/* Internal macros */
-#define _F_START(f) (0 ? f)
-#define _F_END(f)   (1 ? f)
-#define _F_SIZE(f)  (1 + _F_END(f) - _F_START(f))
-#define _F_MASK(f)  (((1 << _F_SIZE(f)) - 1) << _F_START(f))
-#define _F_NORMALIZE(v, f)  (((v) & _F_MASK(f)) >> _F_START(f))
-#define _F_DENORMALIZE(v, f)(((v) << _F_START(f)) & _F_MASK(f))
-
-/* Global macros */
-#define FIELD_GET(x, reg, field) \
-( \
-   _F_NORMALIZE((x), reg ## _ ## field) \
-)
-
-#define FIELD_SET(x, reg, field, value) \
-( \
-   (x & ~_F_MASK(reg ## _ ## field)) \
-   | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \
-)
-
-#define FIELD_VALUE(x, reg, field, value) \
-( \
-   (x & ~_F_MASK(reg ## _ ## field)) \
-   | _F_DENORMALIZE(value, reg ## _ ## field) \
-)
-
-#define FIELD_CLEAR(reg, field) \
-( \
-   ~_F_MASK(reg ## _ ## field) \
-)
-
-/* Field Macros */
-#define FIELD_START(field)  (0 ? field)
-#define FIELD_END(field)(1 ? field)
-#define FIELD_SIZE(field)   (1 + FIELD_END(field) - 
FIELD_START(field))
-#define FIELD_MASK(field)   (((1 << (FIELD_SIZE(field)-1)) | ((1 
<< (FIELD_SIZE(field)-1)) - 1)) << FIELD_START(field))
-
-#endif
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 0/5] staging: sm750fb: complete changing register defines

2016-02-19 Thread Mike Rapoport
Hi,

This is the fourth (and final) set of patches that aim to replace custom
defines for register fields. The MSB:LSB notation for register fields is
completely removed and replaced by BIT() for single-bit fields and with
*_MASK for multi-bit fields. The removal of MSB:LSB notation allowed to get
rid of FIELD_*() macros. 

Mike Rapoport (5):
  staging: sm750fb: use BIT() macro for single-bit fields definition
  staging: sm750: change definition of multi-bit register fields
  staging: sm750fb: replace absDiff with kernel standard abs macro
  staging: sm750fb: move MHz() and roundedDiv() close to their usage
  staging: sm750fb: remove sm750_help.h

 drivers/staging/sm750fb/ddk750_chip.c  |7 +-
 drivers/staging/sm750fb/ddk750_help.h  |1 -
 drivers/staging/sm750fb/ddk750_reg.h   | 1978 
 drivers/staging/sm750fb/sm750_accel.c  |1 -
 drivers/staging/sm750fb/sm750_accel.h  |   98 +-
 drivers/staging/sm750fb/sm750_cursor.c |1 -
 drivers/staging/sm750fb/sm750_help.h   |   56 -
 7 files changed, 780 insertions(+), 1362 deletions(-)
 delete mode 100644 drivers/staging/sm750fb/sm750_help.h

-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/5] staging: sm750fb: use BIT() macro for single-bit fields definition

2016-02-19 Thread Mike Rapoport
Replace complex definition of single-bit fields with BIT() macro for the
registers that are not currently referenced by the driver.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h  | 1071 +
 drivers/staging/sm750fb/sm750_accel.h |   36 +-
 2 files changed, 290 insertions(+), 817 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 95c5cac..d96ea9e 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -109,9 +109,7 @@
 #define GPIO_MUX_0BIT(0)
 
 #define LOCALMEM_ARBITRATION  0x0C
-#define LOCALMEM_ARBITRATION_ROTATE   28:28
-#define LOCALMEM_ARBITRATION_ROTATE_OFF   0
-#define LOCALMEM_ARBITRATION_ROTATE_ON1
+#define LOCALMEM_ARBITRATION_ROTATE   BIT(28)
 #define LOCALMEM_ARBITRATION_VGA  26:24
 #define LOCALMEM_ARBITRATION_VGA_OFF  0
 #define LOCALMEM_ARBITRATION_VGA_PRIORITY_1   1
@@ -177,9 +175,7 @@
 #define LOCALMEM_ARBITRATION_CRT_PRIORITY_7   7
 
 #define PCIMEM_ARBITRATION0x10
-#define PCIMEM_ARBITRATION_ROTATE 28:28
-#define PCIMEM_ARBITRATION_ROTATE_OFF 0
-#define PCIMEM_ARBITRATION_ROTATE_ON  1
+#define PCIMEM_ARBITRATION_ROTATE BIT(28)
 #define PCIMEM_ARBITRATION_VGA26:24
 #define PCIMEM_ARBITRATION_VGA_OFF0
 #define PCIMEM_ARBITRATION_VGA_PRIORITY_1 1
@@ -245,150 +241,55 @@
 #define PCIMEM_ARBITRATION_CRT_PRIORITY_7 7
 
 #define RAW_INT   0x20
-#define RAW_INT_ZVPORT1_VSYNC 4:4
-#define RAW_INT_ZVPORT1_VSYNC_INACTIVE0
-#define RAW_INT_ZVPORT1_VSYNC_ACTIVE  1
-#define RAW_INT_ZVPORT1_VSYNC_CLEAR   1
-#define RAW_INT_ZVPORT0_VSYNC 3:3
-#define RAW_INT_ZVPORT0_VSYNC_INACTIVE0
-#define RAW_INT_ZVPORT0_VSYNC_ACTIVE  1
-#define RAW_INT_ZVPORT0_VSYNC_CLEAR   1
-#define RAW_INT_CRT_VSYNC 2:2
-#define RAW_INT_CRT_VSYNC_INACTIVE0
-#define RAW_INT_CRT_VSYNC_ACTIVE  1
-#define RAW_INT_CRT_VSYNC_CLEAR   1
-#define RAW_INT_PANEL_VSYNC   1:1
-#define RAW_INT_PANEL_VSYNC_INACTIVE  0
-#define RAW_INT_PANEL_VSYNC_ACTIVE1
-#define RAW_INT_PANEL_VSYNC_CLEAR 1
-#define RAW_INT_VGA_VSYNC 0:0
-#define RAW_INT_VGA_VSYNC_INACTIVE0
-#define RAW_INT_VGA_VSYNC_ACTIVE  1
-#define RAW_INT_VGA_VSYNC_CLEAR   1
+#define RAW_INT_ZVPORT1_VSYNC BIT(4)
+#define RAW_INT_ZVPORT0_VSYNC BIT(3)
+#define RAW_INT_CRT_VSYNC BIT(2)
+#define RAW_INT_PANEL_VSYNC   BIT(1)
+#define RAW_INT_VGA_VSYNC BIT(0)
 
 #define INT_STATUS0x24
-#define INT_STATUS_GPIO31 31:31
-#define INT_STATUS_GPIO31_INACTIVE0
-#define INT_STATUS_GPIO31_ACTIVE  1
-#define INT_STATUS_GPIO30 30:30
-#define INT_STATUS_GPIO30_INACTIVE0
-#define INT_STATUS_GPIO30_ACTIVE  1
-#define INT_STATUS_GPIO29 29:29
-#define INT_STATUS_GPIO29_INACTIVE0
-#define INT_STATUS_GPIO29_ACTIVE  1
-#define INT_STATUS_GPIO28 28:28
-#define INT_STATUS_GPIO28_INACTIVE0
-#define INT_STATUS_GPIO28_ACTIVE  1
-#define INT_STATUS_GPIO27 27:27
-#define INT_STATUS_GPIO27_INACTIVE0
-#define INT_STATUS_GPIO27_ACTIVE  1
-#define INT_STATUS_GPIO26 26:26
-#define INT_STATUS_GPIO26_INACTIVE0
-#define INT_STATUS_GPIO26_ACTIVE  1
-#define INT_STATUS_GPIO25 25:25
-#define INT_STATUS_GPIO25_INACTIVE0
-#define INT_STATUS_GPIO25_ACTIVE  1
-#define INT_STATUS_I2C12:12
-#define INT_STATUS_I2C_INACTIVE   0
-#define INT_STATUS_I2C_ACTIVE 1
-#define INT_STATUS_PWM11:11
-#define INT_STATUS_PWM_INACTIVE   0
-#define INT_STATUS_PWM_ACTIVE 1
-#define INT_STATUS_DMA1   10:10
-#define

[PATCH 21/21] staging: sm750fb: change definition of CRT_FB_ADDRESS fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_FB_ADDRESS register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 10 +++---
 drivers/staging/sm750fb/sm750_hw.c   |  4 ++--
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 3d36508..95c5cac 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1367,13 +1367,9 @@
 #define CRT_DISPLAY_CTRL_FORMAT_32(0x2 << 0)
 
 #define CRT_FB_ADDRESS0x080204
-#define CRT_FB_ADDRESS_STATUS 31:31
-#define CRT_FB_ADDRESS_STATUS_CURRENT 0
-#define CRT_FB_ADDRESS_STATUS_PENDING 1
-#define CRT_FB_ADDRESS_EXT27:27
-#define CRT_FB_ADDRESS_EXT_LOCAL  0
-#define CRT_FB_ADDRESS_EXT_EXTERNAL   1
-#define CRT_FB_ADDRESS_ADDRESS25:0
+#define CRT_FB_ADDRESS_STATUS BIT(31)
+#define CRT_FB_ADDRESS_EXTBIT(27)
+#define CRT_FB_ADDRESS_ADDRESS_MASK   0x3ff
 
 #define CRT_FB_WIDTH  0x080208
 #define CRT_FB_WIDTH_WIDTH_SHIFT  16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 640173d..761523b 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -549,8 +549,8 @@ int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
   (total & PANEL_FB_ADDRESS_ADDRESS_MASK));
} else {
POKE32(CRT_FB_ADDRESS,
-   FIELD_VALUE(PEEK32(CRT_FB_ADDRESS),
-   CRT_FB_ADDRESS, ADDRESS, total));
+  PEEK32(CRT_FB_ADDRESS) |
+  (total & CRT_FB_ADDRESS_ADDRESS_MASK));
}
return 0;
 }
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 18/21] staging: sm750fb: change definition of DE_STRETCH_FORMAT fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_STRETCH_FORMAT register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c | 24 +++-
 drivers/staging/sm750fb/sm750_accel.h | 31 ---
 2 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index 61666ce..88e39b8 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -41,20 +41,16 @@ void hw_de_init(struct lynx_accel *accel)
write_dpr(accel, DE_MASKS, 0x);
 
/* dpr1c */
-   reg = FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, NORMAL)|
-   FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_Y, 0)|
-   FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, 0)|
-   FIELD_SET(0, DE_STRETCH_FORMAT, ADDRESSING, XY)|
-   FIELD_VALUE(0, DE_STRETCH_FORMAT, SOURCE_HEIGHT, 3);
-
-   clr = FIELD_CLEAR(DE_STRETCH_FORMAT, PATTERN_XY)&
-   FIELD_CLEAR(DE_STRETCH_FORMAT, PATTERN_Y)&
-   FIELD_CLEAR(DE_STRETCH_FORMAT, PATTERN_X)&
-   FIELD_CLEAR(DE_STRETCH_FORMAT, ADDRESSING)&
-   FIELD_CLEAR(DE_STRETCH_FORMAT, SOURCE_HEIGHT);
+   reg =  0x3;
+
+   clr = DE_STRETCH_FORMAT_PATTERN_XY | DE_STRETCH_FORMAT_PATTERN_Y_MASK |
+   DE_STRETCH_FORMAT_PATTERN_X_MASK |
+   DE_STRETCH_FORMAT_ADDRESSING_MASK |
+   DE_STRETCH_FORMAT_SOURCE_HEIGHT_MASK;
 
/* DE_STRETCH bpp format need be initialized in setMode routine */
-   write_dpr(accel, DE_STRETCH_FORMAT, (read_dpr(accel, DE_STRETCH_FORMAT) 
& clr) | reg);
+   write_dpr(accel, DE_STRETCH_FORMAT,
+ (read_dpr(accel, DE_STRETCH_FORMAT) & ~clr) | reg);
 
/* disable clipping and transparent */
write_dpr(accel, DE_CLIP_TL, 0); /* dpr2c */
@@ -80,7 +76,9 @@ void hw_set2dformat(struct lynx_accel *accel, int fmt)
 
/* fmt=0,1,2 for 8,16,32,bpp on sm718/750/502 */
reg = read_dpr(accel, DE_STRETCH_FORMAT);
-   reg = FIELD_VALUE(reg, DE_STRETCH_FORMAT, PIXEL_FORMAT, fmt);
+   reg &= ~DE_STRETCH_FORMAT_PIXEL_FORMAT_MASK;
+   reg |= ((fmt << DE_STRETCH_FORMAT_PIXEL_FORMAT_SHIFT) &
+   DE_STRETCH_FORMAT_PIXEL_FORMAT_MASK);
write_dpr(accel, DE_STRETCH_FORMAT, reg);
 }
 
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index f14abb6..69aa47c 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -109,21 +109,22 @@
 #define DE_BACKGROUND_COLOR 31:0
 
 #define DE_STRETCH_FORMAT   0x1C
-#define DE_STRETCH_FORMAT_PATTERN_XY30:30
-#define DE_STRETCH_FORMAT_PATTERN_XY_NORMAL 0
-#define DE_STRETCH_FORMAT_PATTERN_XY_OVERWRITE  1
-#define DE_STRETCH_FORMAT_PATTERN_Y 29:27
-#define DE_STRETCH_FORMAT_PATTERN_X 25:23
-#define DE_STRETCH_FORMAT_PIXEL_FORMAT  21:20
-#define DE_STRETCH_FORMAT_PIXEL_FORMAT_80
-#define DE_STRETCH_FORMAT_PIXEL_FORMAT_16   1
-#define DE_STRETCH_FORMAT_PIXEL_FORMAT_32   2
-#define DE_STRETCH_FORMAT_PIXEL_FORMAT_24   3
-
-#define DE_STRETCH_FORMAT_ADDRESSING19:16
-#define DE_STRETCH_FORMAT_ADDRESSING_XY 0
-#define DE_STRETCH_FORMAT_ADDRESSING_LINEAR 15
-#define DE_STRETCH_FORMAT_SOURCE_HEIGHT 11:0
+#define DE_STRETCH_FORMAT_PATTERN_XYBIT(30)
+#define DE_STRETCH_FORMAT_PATTERN_Y_SHIFT   27
+#define DE_STRETCH_FORMAT_PATTERN_Y_MASK(0x7 << 27)
+#define DE_STRETCH_FORMAT_PATTERN_X_SHIFT   23
+#define DE_STRETCH_FORMAT_PATTERN_X_MASK(0x7 << 23)
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_SHIFT20
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_MASK (0x3 << 20)
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_8(0x0 << 20)
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_16   (0x1 << 20)
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_32   (0x2 << 20)
+#define DE_STRETCH_FORMAT_PIXEL_FORMAT_24   (0x3 << 20)
+#define DE_STRETCH_FORMAT_ADDRESSING_SHIFT  16
+#define DE_STRETCH_FORMAT_ADDRESSING_MASK   (0xf << 16)
+#define DE_STRETCH_FORMAT_ADDRESSING_XY (0x0 << 16)
+#define DE_STRETCH_FORMAT_ADDRESSING_LINEAR (0xf << 16)
+#define DE_STRETCH_FORMAT_SOURCE_HEIGHT_MASK0xfff
 
 #define DE_COLOR_COMPARE0x20
 #define DE_COLOR_COMPARE_COLOR  23:0
-- 
1.9.1

__

[PATCH 19/21] staging: sm750fb: change definition of DE_WINDOW_WIDTH fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_WINDOW_WIDTH register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c | 15 +--
 drivers/staging/sm750fb/sm750_accel.h |  5 +++--
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index 88e39b8..5975bd0 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -103,8 +103,9 @@ int hw_fillrect(struct lynx_accel *accel,
  (pitch / Bpp & DE_PITCH_SOURCE_MASK)); /* dpr10 */
 
write_dpr(accel, DE_WINDOW_WIDTH,
-   FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, pitch/Bpp)|
-   FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE, pitch/Bpp)); /* 
dpr44 */
+ ((pitch / Bpp << DE_WINDOW_WIDTH_DST_SHIFT) &
+  DE_WINDOW_WIDTH_DST_MASK) |
+  (pitch / Bpp & DE_WINDOW_WIDTH_SRC_MASK)); /* dpr44 */
 
write_dpr(accel, DE_FOREGROUND, color); /* DPR14 */
 
@@ -235,8 +236,9 @@ unsigned int rop2)   /* ROP value */
2D engine uses this value to calculate the linear address in frame 
buffer for a given point.
 */
write_dpr(accel, DE_WINDOW_WIDTH,
-   FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, (dPitch/Bpp)) |
-   FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,  (sPitch/Bpp))); /* dpr3c */
+ ((dPitch / Bpp << DE_WINDOW_WIDTH_DST_SHIFT) &
+  DE_WINDOW_WIDTH_DST_MASK) |
+ (sPitch / Bpp & DE_WINDOW_WIDTH_SRC_MASK)); /* dpr3c */
 
if (accel->de_wait() != 0)
return -1;
@@ -327,8 +329,9 @@ int hw_imageblit(struct lynx_accel *accel,
 2D engine uses this value to calculate the linear address in frame 
buffer for a given point.
 */
write_dpr(accel, DE_WINDOW_WIDTH,
- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, 
(dPitch/bytePerPixel)) |
- FIELD_VALUE(0, DE_WINDOW_WIDTH, SOURCE,  
(dPitch/bytePerPixel)));
+ ((dPitch / bytePerPixel << DE_WINDOW_WIDTH_DST_SHIFT) &
+  DE_WINDOW_WIDTH_DST_MASK) |
+ (dPitch / bytePerPixel & DE_WINDOW_WIDTH_SRC_MASK));
 
 /* Note: For 2D Source in Host Write, only X_K1_MONO field is needed, 
and Y_K2 field is not used.
For mono bitmap, use startBit for X_K1. */
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index 69aa47c..47b1a27 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -157,8 +157,9 @@
 #define DE_MONO_PATTERN_HIGH_PATTERN31:0
 
 #define DE_WINDOW_WIDTH 0x3C
-#define DE_WINDOW_WIDTH_DESTINATION 28:16
-#define DE_WINDOW_WIDTH_SOURCE  12:0
+#define DE_WINDOW_WIDTH_DST_SHIFT   16
+#define DE_WINDOW_WIDTH_DST_MASK(0x1fff << 16)
+#define DE_WINDOW_WIDTH_SRC_MASK0x1fff
 
 #define DE_WINDOW_SOURCE_BASE   0x40
 #define DE_WINDOW_SOURCE_BASE_EXT   27:27
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 13/21] staging: sm750fb: change definition of DE_SOURCE fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_SOURCE register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c |  9 -
 drivers/staging/sm750fb/sm750_accel.h | 11 +--
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index e150680..da4eaea 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -256,9 +256,8 @@ unsigned int rop2)   /* ROP value */
{
 
write_dpr(accel, DE_SOURCE,
- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) |
- FIELD_VALUE(0, DE_SOURCE, X_K1, sx)   |
- FIELD_VALUE(0, DE_SOURCE, Y_K2, sy)); /* dpr0 */
+ ((sx << DE_SOURCE_X_K1_SHIFT) & DE_SOURCE_X_K1_MASK) |
+ (sy & DE_SOURCE_Y_K2_MASK)); /* dpr0 */
write_dpr(accel, DE_DESTINATION,
  FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
  FIELD_VALUE(0, DE_DESTINATION, X,dx)  |
@@ -354,8 +353,8 @@ int hw_imageblit(struct lynx_accel *accel,
 /* Note: For 2D Source in Host Write, only X_K1_MONO field is needed, 
and Y_K2 field is not used.
For mono bitmap, use startBit for X_K1. */
write_dpr(accel, DE_SOURCE,
- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE)   |
- FIELD_VALUE(0, DE_SOURCE, X_K1_MONO, startBit)); /* dpr00 */
+ (startBit << DE_SOURCE_X_K1_SHIFT) &
+ DE_SOURCE_X_K1_MONO_MASK); /* dpr00 */
 
write_dpr(accel, DE_DESTINATION,
  FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index 1ec66d2..0bbdcca 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -21,12 +21,11 @@
 #define DE_PORT_ADDR_TYPE3 0x10
 
 #define DE_SOURCE   0x0
-#define DE_SOURCE_WRAP  31:31
-#define DE_SOURCE_WRAP_DISABLE  0
-#define DE_SOURCE_WRAP_ENABLE   1
-#define DE_SOURCE_X_K1  29:16
-#define DE_SOURCE_Y_K2  15:0
-#define DE_SOURCE_X_K1_MONO20:16
+#define DE_SOURCE_WRAP  BIT(31)
+#define DE_SOURCE_X_K1_SHIFT16
+#define DE_SOURCE_X_K1_MASK (0x3fff << 16)
+#define DE_SOURCE_X_K1_MONO_MASK   (0x1f << 16)
+#define DE_SOURCE_Y_K2_MASK 0x
 
 #define DE_DESTINATION  0x4
 #define DE_DESTINATION_WRAP 31:31
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 15/21] staging: sm750fb: change definition of DE_DIMENSION fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_DIMENSION register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c | 12 ++--
 drivers/staging/sm750fb/sm750_accel.h |  5 +++--
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index 55c38ae..cdbd766 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -119,8 +119,8 @@ int hw_fillrect(struct lynx_accel *accel,
  (y & DE_DESTINATION_Y_MASK)); /* dpr4 */
 
write_dpr(accel, DE_DIMENSION,
-   FIELD_VALUE(0, DE_DIMENSION, X, width)|
-   FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr8 */
+ ((width << DE_DIMENSION_X_SHIFT) & DE_DIMENSION_X_MASK) |
+ (height & DE_DIMENSION_Y_ET_MASK)); /* dpr8 */
 
deCtrl =
FIELD_SET(0, DE_CONTROL, STATUS, START)|
@@ -261,8 +261,8 @@ unsigned int rop2)   /* ROP value */
  ((dx << DE_DESTINATION_X_SHIFT) & DE_DESTINATION_X_MASK) |
  (dy & DE_DESTINATION_Y_MASK)); /* dpr04 */
write_dpr(accel, DE_DIMENSION,
- FIELD_VALUE(0, DE_DIMENSION, X,width) |
- FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
+ ((width << DE_DIMENSION_X_SHIFT) & DE_DIMENSION_X_MASK) |
+ (height & DE_DIMENSION_Y_ET_MASK)); /* dpr08 */
 
de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) |
  FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) |
@@ -359,8 +359,8 @@ int hw_imageblit(struct lynx_accel *accel,
  (dy & DE_DESTINATION_Y_MASK)); /* dpr04 */
 
write_dpr(accel, DE_DIMENSION,
- FIELD_VALUE(0, DE_DIMENSION, X,width) |
- FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
+ ((width << DE_DIMENSION_X_SHIFT) & DE_DIMENSION_X_MASK) |
+ (height & DE_DIMENSION_Y_ET_MASK)); /* dpr08 */
 
write_dpr(accel, DE_FOREGROUND, fColor);
write_dpr(accel, DE_BACKGROUND, bColor);
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index f8dc3f1..c38ff450 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -34,8 +34,9 @@
 #define DE_DESTINATION_Y_MASK   0x
 
 #define DE_DIMENSION0x8
-#define DE_DIMENSION_X  28:16
-#define DE_DIMENSION_Y_ET   15:0
+#define DE_DIMENSION_X_SHIFT16
+#define DE_DIMENSION_X_MASK (0x1fff << 16)
+#define DE_DIMENSION_Y_ET_MASK  0x1fff
 
 #define DE_CONTROL  0xC
 #define DE_CONTROL_STATUS   31:31
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 20/21] staging: sm750fb: change definition of CRT_FB_WIDTH fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_FB_WIDTH register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 drivers/staging/sm750fb/sm750_hw.c   | 9 -
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index a274c31..3d36508 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1376,8 +1376,9 @@
 #define CRT_FB_ADDRESS_ADDRESS25:0
 
 #define CRT_FB_WIDTH  0x080208
-#define CRT_FB_WIDTH_WIDTH29:16
-#define CRT_FB_WIDTH_OFFSET   13:0
+#define CRT_FB_WIDTH_WIDTH_SHIFT  16
+#define CRT_FB_WIDTH_WIDTH_MASK   (0x3fff << 16)
+#define CRT_FB_WIDTH_OFFSET_MASK  0x3fff
 
 #define CRT_HORIZONTAL_TOTAL  0x08020C
 #define CRT_HORIZONTAL_TOTAL_TOTAL_SHIFT  16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 01850bf..640173d 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -343,11 +343,10 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
POKE32(CRT_FB_ADDRESS, crtc->oScreen);
reg = var->xres * (var->bits_per_pixel >> 3);
/* crtc->channel is not equal to par->index on numeric,be aware 
of that */
-   reg = ALIGN(reg, crtc->line_pad);
-
-   POKE32(CRT_FB_WIDTH,
-   FIELD_VALUE(0, CRT_FB_WIDTH, WIDTH, reg)|
-   FIELD_VALUE(0, CRT_FB_WIDTH, OFFSET, fix->line_length));
+   reg = ALIGN(reg, crtc->line_pad) << CRT_FB_WIDTH_WIDTH_SHIFT;
+   reg &= CRT_FB_WIDTH_WIDTH_MASK;
+   reg |= (fix->line_length & CRT_FB_WIDTH_OFFSET_MASK);
+   POKE32(CRT_FB_WIDTH, reg);
 
/* SET PIXEL FORMAT */
reg = PEEK32(CRT_DISPLAY_CTRL);
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 17/21] staging: sm750fb: change definition of DE_PITCH fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_PITCH register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c | 23 +++
 drivers/staging/sm750fb/sm750_accel.h |  5 +++--
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index bcc09e5..61666ce 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -100,8 +100,9 @@ int hw_fillrect(struct lynx_accel *accel,
 
write_dpr(accel, DE_WINDOW_DESTINATION_BASE, base); /* dpr40 */
write_dpr(accel, DE_PITCH,
-   FIELD_VALUE(0, DE_PITCH, DESTINATION, pitch/Bpp)|
-   FIELD_VALUE(0, DE_PITCH, SOURCE, pitch/Bpp)); /* dpr10 
*/
+ ((pitch / Bpp << DE_PITCH_DESTINATION_SHIFT) &
+  DE_PITCH_DESTINATION_MASK) |
+ (pitch / Bpp & DE_PITCH_SOURCE_MASK)); /* dpr10 */
 
write_dpr(accel, DE_WINDOW_WIDTH,
FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, pitch/Bpp)|
@@ -227,11 +228,10 @@ unsigned int rop2)   /* ROP value */
Note that input pitch is BYTE value, but the 2D Pitch register uses
pixel values. Need Byte to pixel conversion.
 */
-   {
-   write_dpr(accel, DE_PITCH,
-   FIELD_VALUE(0, DE_PITCH, DESTINATION, 
(dPitch/Bpp)) |
-   FIELD_VALUE(0, DE_PITCH, SOURCE,  
(sPitch/Bpp))); /* dpr10 */
-   }
+   write_dpr(accel, DE_PITCH,
+ ((dPitch / Bpp << DE_PITCH_DESTINATION_SHIFT) &
+  DE_PITCH_DESTINATION_MASK) |
+ (sPitch / Bpp & DE_PITCH_SOURCE_MASK)); /* dpr10 */
 
 /* Screen Window width in Pixels.
2D engine uses this value to calculate the linear address in frame 
buffer for a given point.
@@ -320,11 +320,10 @@ int hw_imageblit(struct lynx_accel *accel,
Note that input pitch is BYTE value, but the 2D Pitch register uses
pixel values. Need Byte to pixel conversion.
 */
-   {
-   write_dpr(accel, DE_PITCH,
-   FIELD_VALUE(0, DE_PITCH, DESTINATION, 
dPitch/bytePerPixel) |
-   FIELD_VALUE(0, DE_PITCH, SOURCE,  
dPitch/bytePerPixel)); /* dpr10 */
-   }
+   write_dpr(accel, DE_PITCH,
+ ((dPitch / bytePerPixel << DE_PITCH_DESTINATION_SHIFT) &
+  DE_PITCH_DESTINATION_MASK) |
+ (dPitch / bytePerPixel & DE_PITCH_SOURCE_MASK)); /* dpr10 */
 
/* Screen Window width in Pixels.
 2D engine uses this value to calculate the linear address in frame 
buffer for a given point.
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index 8fba6e1..f14abb6 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -98,8 +98,9 @@
 #define DE_CONTROL_ROTATION_180 3
 
 #define DE_PITCH0x10
-#define DE_PITCH_DESTINATION28:16
-#define DE_PITCH_SOURCE 12:0
+#define DE_PITCH_DESTINATION_SHIFT  16
+#define DE_PITCH_DESTINATION_MASK   (0x1fff << 16)
+#define DE_PITCH_SOURCE_MASK0x1fff
 
 #define DE_FOREGROUND   0x14
 #define DE_FOREGROUND_COLOR 31:0
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 16/21] staging: sm750fb: change definition of DE_CONTROL fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_CONTROL register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c |  45 +-
 drivers/staging/sm750fb/sm750_accel.h | 112 --
 2 files changed, 54 insertions(+), 103 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index cdbd766..bcc09e5 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -63,16 +63,11 @@ void hw_de_init(struct lynx_accel *accel)
write_dpr(accel, DE_COLOR_COMPARE_MASK, 0); /* dpr24 */
write_dpr(accel, DE_COLOR_COMPARE, 0);
 
-   reg = FIELD_SET(0, DE_CONTROL, TRANSPARENCY, DISABLE)|
-   FIELD_SET(0, DE_CONTROL, TRANSPARENCY_MATCH, OPAQUE)|
-   FIELD_SET(0, DE_CONTROL, TRANSPARENCY_SELECT, SOURCE);
-
-   clr = FIELD_CLEAR(DE_CONTROL, TRANSPARENCY)&
-   FIELD_CLEAR(DE_CONTROL, TRANSPARENCY_MATCH)&
-   FIELD_CLEAR(DE_CONTROL, TRANSPARENCY_SELECT);
+   clr = DE_CONTROL_TRANSPARENCY | DE_CONTROL_TRANSPARENCY_MATCH |
+   DE_CONTROL_TRANSPARENCY_SELECT;
 
/* dpr0c */
-   write_dpr(accel, DE_CONTROL, (read_dpr(accel, DE_CONTROL)&clr)|reg);
+   write_dpr(accel, DE_CONTROL, read_dpr(accel, DE_CONTROL) & ~clr);
 }
 
 /* set2dformat only be called from setmode functions
@@ -122,13 +117,9 @@ int hw_fillrect(struct lynx_accel *accel,
  ((width << DE_DIMENSION_X_SHIFT) & DE_DIMENSION_X_MASK) |
  (height & DE_DIMENSION_Y_ET_MASK)); /* dpr8 */
 
-   deCtrl =
-   FIELD_SET(0, DE_CONTROL, STATUS, START)|
-   FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT)|
-   FIELD_SET(0, DE_CONTROL, LAST_PIXEL, ON)|
-   FIELD_SET(0, DE_CONTROL, COMMAND, RECTANGLE_FILL)|
-   FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2)|
-   FIELD_VALUE(0, DE_CONTROL, ROP, rop); /* dpr0xc */
+   deCtrl = DE_CONTROL_STATUS | DE_CONTROL_LAST_PIXEL |
+   DE_CONTROL_COMMAND_RECTANGLE_FILL | DE_CONTROL_ROP_SELECT |
+   (rop & DE_CONTROL_ROP_MASK); /* dpr0xc */
 
write_dpr(accel, DE_CONTROL, deCtrl);
return 0;
@@ -264,13 +255,9 @@ unsigned int rop2)   /* ROP value */
  ((width << DE_DIMENSION_X_SHIFT) & DE_DIMENSION_X_MASK) |
  (height & DE_DIMENSION_Y_ET_MASK)); /* dpr08 */
 
-   de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) |
- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) |
- FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) |
- ((nDirection == RIGHT_TO_LEFT) ?
- FIELD_SET(0, DE_CONTROL, DIRECTION, RIGHT_TO_LEFT)
- : FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT)) |
- FIELD_SET(0, DE_CONTROL, STATUS, START);
+   de_ctrl = (rop2 & DE_CONTROL_ROP_MASK) | DE_CONTROL_ROP_SELECT |
+   ((nDirection == RIGHT_TO_LEFT) ? DE_CONTROL_DIRECTION : 0) |
+   DE_CONTROL_COMMAND_BITBLT | DE_CONTROL_STATUS;
write_dpr(accel, DE_CONTROL, de_ctrl); /* dpr0c */
 
}
@@ -284,10 +271,8 @@ static unsigned int deGetTransparency(struct lynx_accel 
*accel)
 
de_ctrl = read_dpr(accel, DE_CONTROL);
 
-   de_ctrl &=
-  FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) |
-  FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT)|
-  FIELD_MASK(DE_CONTROL_TRANSPARENCY);
+   de_ctrl &= (DE_CONTROL_TRANSPARENCY_MATCH |
+   DE_CONTROL_TRANSPARENCY_SELECT | DE_CONTROL_TRANSPARENCY);
 
return de_ctrl;
 }
@@ -365,11 +350,9 @@ int hw_imageblit(struct lynx_accel *accel,
write_dpr(accel, DE_FOREGROUND, fColor);
write_dpr(accel, DE_BACKGROUND, bColor);
 
-   de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) |
-   FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2)|
-   FIELD_SET(0, DE_CONTROL, COMMAND, HOST_WRITE) |
-   FIELD_SET(0, DE_CONTROL, HOST, MONO)  |
-   FIELD_SET(0, DE_CONTROL, STATUS, START);
+   de_ctrl = (rop2 & DE_CONTROL_ROP_MASK) |
+   DE_CONTROL_ROP_SELECT | DE_CONTROL_COMMAND_HOST_WRITE |
+   DE_CONTROL_HOST | DE_CONTROL_STATUS;
 
write_dpr(accel, DE_CONTROL, de_ctrl | deGetTransparency(accel));
 
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index c38ff450..8fba6e1 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -39,78 +39,46 @@
 #define DE_DIMENSION_Y_ET_MASK  0x1fff
 
 #define DE_CONTROL  0xC
-#define DE_CONTROL_STATUS   31:31
-#define DE_CONTROL_STATUS_

[PATCH 14/21] staging: sm750fb: change definition of DE_DESTINATION fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of DE_DESTINATION register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_accel.c | 15 ++-
 drivers/staging/sm750fb/sm750_accel.h |  9 -
 2 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index da4eaea..55c38ae 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -115,9 +115,8 @@ int hw_fillrect(struct lynx_accel *accel,
write_dpr(accel, DE_FOREGROUND, color); /* DPR14 */
 
write_dpr(accel, DE_DESTINATION,
-   FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE)|
-   FIELD_VALUE(0, DE_DESTINATION, X, x)|
-   FIELD_VALUE(0, DE_DESTINATION, Y, y)); /* dpr4 */
+ ((x << DE_DESTINATION_X_SHIFT) & DE_DESTINATION_X_MASK) |
+ (y & DE_DESTINATION_Y_MASK)); /* dpr4 */
 
write_dpr(accel, DE_DIMENSION,
FIELD_VALUE(0, DE_DIMENSION, X, width)|
@@ -259,9 +258,8 @@ unsigned int rop2)   /* ROP value */
  ((sx << DE_SOURCE_X_K1_SHIFT) & DE_SOURCE_X_K1_MASK) |
  (sy & DE_SOURCE_Y_K2_MASK)); /* dpr0 */
write_dpr(accel, DE_DESTINATION,
- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
- FIELD_VALUE(0, DE_DESTINATION, X,dx)  |
- FIELD_VALUE(0, DE_DESTINATION, Y,dy)); /* dpr04 */
+ ((dx << DE_DESTINATION_X_SHIFT) & DE_DESTINATION_X_MASK) |
+ (dy & DE_DESTINATION_Y_MASK)); /* dpr04 */
write_dpr(accel, DE_DIMENSION,
  FIELD_VALUE(0, DE_DIMENSION, X,width) |
  FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); /* dpr08 */
@@ -357,9 +355,8 @@ int hw_imageblit(struct lynx_accel *accel,
  DE_SOURCE_X_K1_MONO_MASK); /* dpr00 */
 
write_dpr(accel, DE_DESTINATION,
- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) |
- FIELD_VALUE(0, DE_DESTINATION, X,dx)|
- FIELD_VALUE(0, DE_DESTINATION, Y,dy)); /* dpr04 */
+ ((dx << DE_DESTINATION_X_SHIFT) & DE_DESTINATION_X_MASK) |
+ (dy & DE_DESTINATION_Y_MASK)); /* dpr04 */
 
write_dpr(accel, DE_DIMENSION,
  FIELD_VALUE(0, DE_DIMENSION, X,width) |
diff --git a/drivers/staging/sm750fb/sm750_accel.h 
b/drivers/staging/sm750fb/sm750_accel.h
index 0bbdcca..f8dc3f1 100644
--- a/drivers/staging/sm750fb/sm750_accel.h
+++ b/drivers/staging/sm750fb/sm750_accel.h
@@ -28,11 +28,10 @@
 #define DE_SOURCE_Y_K2_MASK 0x
 
 #define DE_DESTINATION  0x4
-#define DE_DESTINATION_WRAP 31:31
-#define DE_DESTINATION_WRAP_DISABLE 0
-#define DE_DESTINATION_WRAP_ENABLE  1
-#define DE_DESTINATION_X28:16
-#define DE_DESTINATION_Y15:0
+#define DE_DESTINATION_WRAP BIT(31)
+#define DE_DESTINATION_X_SHIFT  16
+#define DE_DESTINATION_X_MASK   (0x1fff << 16)
+#define DE_DESTINATION_Y_MASK   0x
 
 #define DE_DIMENSION0x8
 #define DE_DIMENSION_X  28:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 06/21] staging: sm750fb: change definition of CRT_VERTICAL_SYNC fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_VERTICAL_SYNC register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index c8862e8..97d803d 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -104,8 +104,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
CRT_VERTICAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(CRT_VERTICAL_SYNC,
-   FIELD_VALUE(0, CRT_VERTICAL_SYNC, HEIGHT, 
pModeParam->vertical_sync_height)
-   | FIELD_VALUE(0, CRT_VERTICAL_SYNC, START, 
pModeParam->vertical_sync_start - 1));
+   ((pModeParam->vertical_sync_height <<
+   CRT_VERTICAL_SYNC_HEIGHT_SHIFT) &
+   CRT_VERTICAL_SYNC_HEIGHT_MASK) |
+   ((pModeParam->vertical_sync_start - 1) &
+   CRT_VERTICAL_SYNC_START_MASK));
 
 
tmp = DISPLAY_CTRL_TIMING | DISPLAY_CTRL_PLANE;
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 7b076a5..e0b3938 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1392,8 +1392,9 @@
 #define CRT_VERTICAL_TOTAL_DISPLAY_END_MASK   (0x7ff)
 
 #define CRT_VERTICAL_SYNC 0x080218
-#define CRT_VERTICAL_SYNC_HEIGHT  21:16
-#define CRT_VERTICAL_SYNC_START   10:0
+#define CRT_VERTICAL_SYNC_HEIGHT_SHIFT16
+#define CRT_VERTICAL_SYNC_HEIGHT_MASK (0x3f << 16)
+#define CRT_VERTICAL_SYNC_START_MASK  0x7ff
 
 #define CRT_SIGNATURE_ANALYZER0x08021C
 #define CRT_SIGNATURE_ANALYZER_STATUS 31:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 07/21] staging: sm750fb: change definition of PANEL_HORIZONTAL_SYNC fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of PANEL_HORIZONTAL_SYNC register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 97d803d..4394ad1 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -141,8 +141,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
POKE32(PANEL_HORIZONTAL_TOTAL, reg);
 
POKE32(PANEL_HORIZONTAL_SYNC,
-   FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, WIDTH, 
pModeParam->horizontal_sync_width)
-   | FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, START, 
pModeParam->horizontal_sync_start - 1));
+   ((pModeParam->horizontal_sync_width <<
+   PANEL_HORIZONTAL_SYNC_WIDTH_SHIFT) &
+   PANEL_HORIZONTAL_SYNC_WIDTH_MASK) |
+   ((pModeParam->horizontal_sync_start - 1) &
+   PANEL_HORIZONTAL_SYNC_START_MASK));
 
POKE32(PANEL_VERTICAL_TOTAL,
FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, TOTAL, 
pModeParam->vertical_total - 1)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index e0b3938..fd28eb0 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -863,8 +863,9 @@
 #define PANEL_HORIZONTAL_TOTAL_DISPLAY_END_MASK   0xfff
 
 #define PANEL_HORIZONTAL_SYNC 0x080028
-#define PANEL_HORIZONTAL_SYNC_WIDTH   23:16
-#define PANEL_HORIZONTAL_SYNC_START   11:0
+#define PANEL_HORIZONTAL_SYNC_WIDTH_SHIFT 16
+#define PANEL_HORIZONTAL_SYNC_WIDTH_MASK  (0xff << 16)
+#define PANEL_HORIZONTAL_SYNC_START_MASK  0xfff
 
 #define PANEL_VERTICAL_TOTAL  0x08002C
 #define PANEL_VERTICAL_TOTAL_TOTAL26:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/21] staging: sm750fb: change definition of HWC_COLOR_{12, 3} fields

2016-02-15 Thread Mike Rapoport
Use straight-forward definition of HWC_COLOR_{12,3} register fields instead
of magic numbers

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_cursor.c | 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_cursor.c 
b/drivers/staging/sm750fb/sm750_cursor.c
index 122d23f..37decce 100644
--- a/drivers/staging/sm750fb/sm750_cursor.c
+++ b/drivers/staging/sm750fb/sm750_cursor.c
@@ -41,11 +41,12 @@ writel((data), cursor->mmio + (addr))
 #define HWC_LOCATION_X_MASK 0x7ff
 
 #define HWC_COLOR_120x8
-#define HWC_COLOR_12_2_RGB565   31:16
-#define HWC_COLOR_12_1_RGB565   15:0
+#define HWC_COLOR_12_2_RGB565_SHIFT 16
+#define HWC_COLOR_12_2_RGB565_MASK  (0x << 16)
+#define HWC_COLOR_12_1_RGB565_MASK  0x
 
 #define HWC_COLOR_3 0xC
-#define HWC_COLOR_3_RGB565  15:0
+#define HWC_COLOR_3_RGB565_MASK 0x
 
 
 /* hw_cursor_xxx works for voyager,718 and 750 */
@@ -79,7 +80,10 @@ void hw_cursor_setPos(struct lynx_cursor *cursor,
 void hw_cursor_setColor(struct lynx_cursor *cursor,
u32 fg, u32 bg)
 {
-   POKE32(HWC_COLOR_12, (fg<<16)|(bg&0x));
+   u32 reg = (fg << HWC_COLOR_12_2_RGB565_SHIFT) &
+   HWC_COLOR_12_2_RGB565_MASK;
+
+   POKE32(HWC_COLOR_12, reg | (bg & HWC_COLOR_12_1_RGB565_MASK));
POKE32(HWC_COLOR_3, 0xffe0);
 }
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 01/21] staging: sm750fb: change definition of CRT_AUTO_CENTERING_TL fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_AUTO_CENTERING_TL register fields

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 4 +---
 drivers/staging/sm750fb/ddk750_reg.h  | 4 ++--
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 7e57b57..9e76218 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -25,9 +25,7 @@ static unsigned long 
displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
   Note that normal SM750/SM718 only use those two register for
   auto-centering mode.
 */
-   POKE32(CRT_AUTO_CENTERING_TL,
-   FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, TOP, 0)
-   | FIELD_VALUE(0, CRT_AUTO_CENTERING_TL, LEFT, 0));
+   POKE32(CRT_AUTO_CENTERING_TL, 0);
 
POKE32(CRT_AUTO_CENTERING_BR,
FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, BOTTOM, y - 1)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 4702897..1d8d577 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1477,8 +1477,8 @@
 #ifndef VALIDATION_CHIP
 /* Auto Centering */
 #define CRT_AUTO_CENTERING_TL 0x080280
-#define CRT_AUTO_CENTERING_TL_TOP 26:16
-#define CRT_AUTO_CENTERING_TL_LEFT10:0
+#define CRT_AUTO_CENTERING_TL_TOP_MASK(0x7ff << 16)
+#define CRT_AUTO_CENTERING_TL_LEFT_MASK   0x7ff
 
 #define CRT_AUTO_CENTERING_BR 0x080284
 #define CRT_AUTO_CENTERING_BR_BOTTOM  26:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/21] staging: sm750fb: change definition of HWC_LOCATION fields

2016-02-15 Thread Mike Rapoport
Use BIT() macro for single-bit fields of HWC_LOCATION register and
define HWC_LOCATION_{X,Y}_MASK for masking the address bits.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_cursor.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_cursor.c 
b/drivers/staging/sm750fb/sm750_cursor.c
index 2799e86..122d23f 100644
--- a/drivers/staging/sm750fb/sm750_cursor.c
+++ b/drivers/staging/sm750fb/sm750_cursor.c
@@ -34,14 +34,11 @@ writel((data), cursor->mmio + (addr))
 #define HWC_ADDRESS_ADDRESS_MASK0x3ff
 
 #define HWC_LOCATION0x4
-#define HWC_LOCATION_TOP27:27
-#define HWC_LOCATION_TOP_INSIDE 0
-#define HWC_LOCATION_TOP_OUTSIDE1
-#define HWC_LOCATION_Y  26:16
-#define HWC_LOCATION_LEFT   11:11
-#define HWC_LOCATION_LEFT_INSIDE0
-#define HWC_LOCATION_LEFT_OUTSIDE   1
-#define HWC_LOCATION_X  10:0
+#define HWC_LOCATION_TOPBIT(27)
+#define HWC_LOCATION_Y_SHIFT16
+#define HWC_LOCATION_Y_MASK (0x7ff << 16)
+#define HWC_LOCATION_LEFT   BIT(11)
+#define HWC_LOCATION_X_MASK 0x7ff
 
 #define HWC_COLOR_120x8
 #define HWC_COLOR_12_2_RGB565   31:16
@@ -75,8 +72,8 @@ void hw_cursor_setPos(struct lynx_cursor *cursor,
 {
u32 reg;
 
-   reg = FIELD_VALUE(0, HWC_LOCATION, Y, y)|
-   FIELD_VALUE(0, HWC_LOCATION, X, x);
+   reg = (((y << HWC_LOCATION_Y_SHIFT) & HWC_LOCATION_Y_MASK) |
+   (x & HWC_LOCATION_X_MASK));
POKE32(HWC_LOCATION, reg);
 }
 void hw_cursor_setColor(struct lynx_cursor *cursor,
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/21] staging: sm750fb: change definition of HWC_ADDRESS fields

2016-02-15 Thread Mike Rapoport
Use BIT() macro for single-bit fields of HWC_ADDRESS register and
define HWC_ADDRESS_ADDRESS_MASK for masking the address bits.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_cursor.c | 18 +-
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_cursor.c 
b/drivers/staging/sm750fb/sm750_cursor.c
index e887101..2799e86 100644
--- a/drivers/staging/sm750fb/sm750_cursor.c
+++ b/drivers/staging/sm750fb/sm750_cursor.c
@@ -28,16 +28,10 @@ writel((data), cursor->mmio + (addr))
 
 /* cursor control for voyager and 718/750*/
 #define HWC_ADDRESS 0x0
-#define HWC_ADDRESS_ENABLE  31:31
-#define HWC_ADDRESS_ENABLE_DISABLE  0
-#define HWC_ADDRESS_ENABLE_ENABLE   1
-#define HWC_ADDRESS_EXT 27:27
-#define HWC_ADDRESS_EXT_LOCAL   0
-#define HWC_ADDRESS_EXT_EXTERNAL1
-#define HWC_ADDRESS_CS  26:26
-#define HWC_ADDRESS_CS_00
-#define HWC_ADDRESS_CS_11
-#define HWC_ADDRESS_ADDRESS 25:0
+#define HWC_ADDRESS_ENABLE  BIT(31)
+#define HWC_ADDRESS_EXT BIT(27)
+#define HWC_ADDRESS_CS  BIT(26)
+#define HWC_ADDRESS_ADDRESS_MASK0x3ff
 
 #define HWC_LOCATION0x4
 #define HWC_LOCATION_TOP27:27
@@ -62,9 +56,7 @@ void hw_cursor_enable(struct lynx_cursor *cursor)
 {
u32 reg;
 
-   reg = FIELD_VALUE(0, HWC_ADDRESS, ADDRESS, cursor->offset)|
-   FIELD_SET(0, HWC_ADDRESS, EXT, LOCAL)|
-   FIELD_SET(0, HWC_ADDRESS, ENABLE, ENABLE);
+   reg = (cursor->offset & HWC_ADDRESS_ADDRESS_MASK) | HWC_ADDRESS_ENABLE;
POKE32(HWC_ADDRESS, reg);
 }
 void hw_cursor_disable(struct lynx_cursor *cursor)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 02/21] staging: sm750fb: change definition of CRT_AUTO_CENTERING_BR fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_AUTO_CENTERING_BR register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 5 +++--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 9e76218..6c6a5c9 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -28,8 +28,9 @@ static unsigned long 
displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
POKE32(CRT_AUTO_CENTERING_TL, 0);
 
POKE32(CRT_AUTO_CENTERING_BR,
-   FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, BOTTOM, y - 1)
-   | FIELD_VALUE(0, CRT_AUTO_CENTERING_BR, RIGHT, x - 1));
+   (((y - 1) << CRT_AUTO_CENTERING_BR_BOTTOM_SHIFT) &
+   CRT_AUTO_CENTERING_BR_BOTTOM_MASK) |
+   ((x - 1) & CRT_AUTO_CENTERING_BR_RIGHT_MASK));
 
/* Assume common fields in dispControl have been properly set before
   calling this function.
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 1d8d577..990d4e3 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1481,8 +1481,9 @@
 #define CRT_AUTO_CENTERING_TL_LEFT_MASK   0x7ff
 
 #define CRT_AUTO_CENTERING_BR 0x080284
-#define CRT_AUTO_CENTERING_BR_BOTTOM  26:16
-#define CRT_AUTO_CENTERING_BR_RIGHT   10:0
+#define CRT_AUTO_CENTERING_BR_BOTTOM_MASK (0x7ff << 16)
+#define CRT_AUTO_CENTERING_BR_BOTTOM_SHIFT16
+#define CRT_AUTO_CENTERING_BR_RIGHT_MASK  0x7ff
 #endif
 
 /* sm750le new register to control panel output */
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 05/21] staging: sm750fb: change definition of CRT_VERTICAL_TOTAL fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_VERTICAL_TOTAL register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index d425ea1..c8862e8 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -97,8 +97,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
CRT_HORIZONTAL_SYNC_START_MASK));
 
POKE32(CRT_VERTICAL_TOTAL,
-   FIELD_VALUE(0, CRT_VERTICAL_TOTAL, TOTAL, 
pModeParam->vertical_total - 1)
-   | FIELD_VALUE(0, CRT_VERTICAL_TOTAL, DISPLAY_END, 
pModeParam->vertical_display_end - 1));
+   (((pModeParam->vertical_total - 1) <<
+   CRT_VERTICAL_TOTAL_TOTAL_SHIFT) &
+   CRT_VERTICAL_TOTAL_TOTAL_MASK) |
+   ((pModeParam->vertical_display_end - 1) &
+   CRT_VERTICAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(CRT_VERTICAL_SYNC,
FIELD_VALUE(0, CRT_VERTICAL_SYNC, HEIGHT, 
pModeParam->vertical_sync_height)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index fc6fa23..7b076a5 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1387,8 +1387,9 @@
 #define CRT_HORIZONTAL_SYNC_START_MASK0xfff
 
 #define CRT_VERTICAL_TOTAL0x080214
-#define CRT_VERTICAL_TOTAL_TOTAL  26:16
-#define CRT_VERTICAL_TOTAL_DISPLAY_END10:0
+#define CRT_VERTICAL_TOTAL_TOTAL_SHIFT16
+#define CRT_VERTICAL_TOTAL_TOTAL_MASK (0x7ff << 16)
+#define CRT_VERTICAL_TOTAL_DISPLAY_END_MASK   (0x7ff)
 
 #define CRT_VERTICAL_SYNC 0x080218
 #define CRT_VERTICAL_SYNC_HEIGHT  21:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/21] staging: sm750fb: change definition of CRT_HORIZONTAL_TOTAL fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_HORIZONTAL_TOTAL register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 6c6a5c9..2b2f1c1 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -83,8 +83,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
/* programe secondary pixel clock */
POKE32(CRT_PLL_CTRL, formatPllReg(pll));
POKE32(CRT_HORIZONTAL_TOTAL,
-   FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, TOTAL, 
pModeParam->horizontal_total - 1)
-   | FIELD_VALUE(0, CRT_HORIZONTAL_TOTAL, DISPLAY_END, 
pModeParam->horizontal_display_end - 1));
+   (((pModeParam->horizontal_total - 1) <<
+   CRT_HORIZONTAL_TOTAL_TOTAL_SHIFT) &
+   CRT_HORIZONTAL_TOTAL_TOTAL_MASK) |
+   ((pModeParam->horizontal_display_end - 1) &
+   CRT_HORIZONTAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(CRT_HORIZONTAL_SYNC,
FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, WIDTH, 
pModeParam->horizontal_sync_width)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 990d4e3..1b55a7f 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1377,8 +1377,9 @@
 #define CRT_FB_WIDTH_OFFSET   13:0
 
 #define CRT_HORIZONTAL_TOTAL  0x08020C
-#define CRT_HORIZONTAL_TOTAL_TOTAL27:16
-#define CRT_HORIZONTAL_TOTAL_DISPLAY_END  11:0
+#define CRT_HORIZONTAL_TOTAL_TOTAL_SHIFT  16
+#define CRT_HORIZONTAL_TOTAL_TOTAL_MASK   (0xfff << 16)
+#define CRT_HORIZONTAL_TOTAL_DISPLAY_END_MASK 0xfff
 
 #define CRT_HORIZONTAL_SYNC   0x080210
 #define CRT_HORIZONTAL_SYNC_WIDTH 23:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 04/21] staging: sm750fb: change definition of CRT_HORIZONTAL_SYNC fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of CRT_HORIZONTAL_SYNC register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 2b2f1c1..d425ea1 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -90,8 +90,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
CRT_HORIZONTAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(CRT_HORIZONTAL_SYNC,
-   FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, WIDTH, 
pModeParam->horizontal_sync_width)
-   | FIELD_VALUE(0, CRT_HORIZONTAL_SYNC, START, 
pModeParam->horizontal_sync_start - 1));
+   ((pModeParam->horizontal_sync_width <<
+   CRT_HORIZONTAL_SYNC_WIDTH_SHIFT) &
+   CRT_HORIZONTAL_SYNC_WIDTH_MASK) |
+   ((pModeParam->horizontal_sync_start - 1) &
+   CRT_HORIZONTAL_SYNC_START_MASK));
 
POKE32(CRT_VERTICAL_TOTAL,
FIELD_VALUE(0, CRT_VERTICAL_TOTAL, TOTAL, 
pModeParam->vertical_total - 1)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 1b55a7f..fc6fa23 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1382,8 +1382,9 @@
 #define CRT_HORIZONTAL_TOTAL_DISPLAY_END_MASK 0xfff
 
 #define CRT_HORIZONTAL_SYNC   0x080210
-#define CRT_HORIZONTAL_SYNC_WIDTH 23:16
-#define CRT_HORIZONTAL_SYNC_START 11:0
+#define CRT_HORIZONTAL_SYNC_WIDTH_SHIFT   16
+#define CRT_HORIZONTAL_SYNC_WIDTH_MASK(0xff << 16)
+#define CRT_HORIZONTAL_SYNC_START_MASK0xfff
 
 #define CRT_VERTICAL_TOTAL0x080214
 #define CRT_VERTICAL_TOTAL_TOTAL  26:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/21] staging: sm750fb: change definition of PANEL_VERTICAL_TOTAL fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of PANEL_VERTICAL_TOTAL register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 4394ad1..7c4f3fb 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -148,8 +148,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
PANEL_HORIZONTAL_SYNC_START_MASK));
 
POKE32(PANEL_VERTICAL_TOTAL,
-   FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, TOTAL, 
pModeParam->vertical_total - 1)
-   | FIELD_VALUE(0, PANEL_VERTICAL_TOTAL, DISPLAY_END, 
pModeParam->vertical_display_end - 1));
+   (((pModeParam->vertical_total - 1) <<
+   PANEL_VERTICAL_TOTAL_TOTAL_SHIFT) &
+   PANEL_VERTICAL_TOTAL_TOTAL_MASK) |
+   ((pModeParam->vertical_display_end - 1) &
+   PANEL_VERTICAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(PANEL_VERTICAL_SYNC,
FIELD_VALUE(0, PANEL_VERTICAL_SYNC, HEIGHT, 
pModeParam->vertical_sync_height)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index fd28eb0..0ecbac5 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -868,8 +868,9 @@
 #define PANEL_HORIZONTAL_SYNC_START_MASK  0xfff
 
 #define PANEL_VERTICAL_TOTAL  0x08002C
-#define PANEL_VERTICAL_TOTAL_TOTAL26:16
-#define PANEL_VERTICAL_TOTAL_DISPLAY_END  10:0
+#define PANEL_VERTICAL_TOTAL_TOTAL_SHIFT  16
+#define PANEL_VERTICAL_TOTAL_TOTAL_MASK   (0x7ff << 16)
+#define PANEL_VERTICAL_TOTAL_DISPLAY_END_MASK 0x7ff
 
 #define PANEL_VERTICAL_SYNC   0x080030
 #define PANEL_VERTICAL_SYNC_HEIGHT21:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/21] staging: sm750fb: change definition of PANEL_VERTICAL_SYNC fields

2016-02-15 Thread Mike Rapoport
Use stratight-forward definition of PANEL_VERTICAL_SYNC register fields
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 7 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 7c4f3fb..ccb4e06 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -155,8 +155,11 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
PANEL_VERTICAL_TOTAL_DISPLAY_END_MASK));
 
POKE32(PANEL_VERTICAL_SYNC,
-   FIELD_VALUE(0, PANEL_VERTICAL_SYNC, HEIGHT, 
pModeParam->vertical_sync_height)
-   | FIELD_VALUE(0, PANEL_VERTICAL_SYNC, START, 
pModeParam->vertical_sync_start - 1));
+   ((pModeParam->vertical_sync_height <<
+   PANEL_VERTICAL_SYNC_HEIGHT_SHIFT) &
+   PANEL_VERTICAL_SYNC_HEIGHT_MASK) |
+   ((pModeParam->vertical_sync_start - 1) &
+   PANEL_VERTICAL_SYNC_START_MASK));
 
tmp = DISPLAY_CTRL_TIMING | DISPLAY_CTRL_PLANE;
if (pModeParam->vertical_sync_polarity)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 0ecbac5..a274c31 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -873,8 +873,9 @@
 #define PANEL_VERTICAL_TOTAL_DISPLAY_END_MASK 0x7ff
 
 #define PANEL_VERTICAL_SYNC   0x080030
-#define PANEL_VERTICAL_SYNC_HEIGHT21:16
-#define PANEL_VERTICAL_SYNC_START 10:0
+#define PANEL_VERTICAL_SYNC_HEIGHT_SHIFT  16
+#define PANEL_VERTICAL_SYNC_HEIGHT_MASK   (0x3f << 16)
+#define PANEL_VERTICAL_SYNC_START_MASK0x7ff
 
 #define PANEL_CURRENT_LINE0x080034
 #define PANEL_CURRENT_LINE_LINE   10:0
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 00/21] staging: sm750fb: change some register fields defines

2016-02-15 Thread Mike Rapoport
Hi,

This is the third set of patches that aim to replace custom defines for
register fields. The ultimate goal is to have MSB:LSB notation for register
fields and FIELD_* macros removed. 

Mike Rapoport (21):
  staging: sm750fb: change definition of CRT_AUTO_CENTERING_TL fields
  staging: sm750fb: change definition of CRT_AUTO_CENTERING_BR fields
  staging: sm750fb: change definition of CRT_HORIZONTAL_TOTAL fields
  staging: sm750fb: change definition of CRT_HORIZONTAL_SYNC fields
  staging: sm750fb: change definition of CRT_VERTICAL_TOTAL fields
  staging: sm750fb: change definition of CRT_VERTICAL_SYNC fields
  staging: sm750fb: change definition of PANEL_HORIZONTAL_SYNC fields
  staging: sm750fb: change definition of PANEL_VERTICAL_TOTAL fields
  staging: sm750fb: change definition of PANEL_VERTICAL_SYNC fields
  staging: sm750fb: change definition of HWC_ADDRESS fields
  staging: sm750fb: change definition of HWC_LOCATION fields
  staging: sm750fb: change definition of HWC_COLOR_{12,3} fields
  staging: sm750fb: change definition of DE_SOURCE fields
  staging: sm750fb: change definition of DE_DESTINATION fields
  staging: sm750fb: change definition of DE_DIMENSION fields
  staging: sm750fb: change definition of DE_CONTROL fields
  staging: sm750fb: change definition of DE_PITCH fields
  staging: sm750fb: change definition of DE_STRETCH_FORMAT fields
  staging: sm750fb: change definition of DE_WINDOW_WIDTH fields
  staging: sm750fb: change definition of CRT_FB_WIDTH fields
  staging: sm750fb: change definition of CRT_FB_ADDRESS fields

 drivers/staging/sm750fb/ddk750_mode.c  |  58 +++
 drivers/staging/sm750fb/ddk750_reg.h   |  59 ++-
 drivers/staging/sm750fb/sm750_accel.c  | 145 ---
 drivers/staging/sm750fb/sm750_accel.h  | 178 ++---
 drivers/staging/sm750fb/sm750_cursor.c |  47 -
 drivers/staging/sm750fb/sm750_hw.c |  13 ++-
 6 files changed, 233 insertions(+), 267 deletions(-)

-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 16/30] staging: sm750fb: use BIT macro for PANEL_DISPLAY_CTRL single-bit fields

2016-02-10 Thread Mike Rapoport
Replace complex definition of PANEL_DISPLAY_CTRL register fields with BIT()
macro and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c|  6 +--
 drivers/staging/sm750fb/ddk750_display.c | 24 +-
 drivers/staging/sm750fb/ddk750_mode.c| 52 +
 drivers/staging/sm750fb/ddk750_reg.h | 77 
 drivers/staging/sm750fb/sm750_hw.c   | 15 ---
 5 files changed, 62 insertions(+), 112 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 0031e32..37eae59 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -249,17 +249,17 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 
/* Disable Overlay, if a former application left it on */
reg = PEEK32(VIDEO_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
+   reg &= ~DISPLAY_CTRL_PLANE;
POKE32(VIDEO_DISPLAY_CTRL, reg);
 
/* Disable video alpha, if a former application left it on */
reg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
+   reg &= ~DISPLAY_CTRL_PLANE;
POKE32(VIDEO_ALPHA_DISPLAY_CTRL, reg);
 
/* Disable alpha plane, if a former application left it on */
reg = PEEK32(ALPHA_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
+   reg &= ~DISPLAY_CTRL_PLANE;
POKE32(ALPHA_DISPLAY_CTRL, reg);
 
/* Disable DMA Channel, if a former application left it on */
diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index ae8bb37..f0e0444 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -28,10 +28,10 @@ static void setDisplayControl(int ctrl, int disp_state)
 * guarantee that the plane will also enabled or
 * disabled.
 */
-   val = FIELD_SET(val, DISPLAY_CTRL, TIMING, ENABLE);
+   val |= DISPLAY_CTRL_TIMING;
POKE32(reg, val);
 
-   val = FIELD_SET(val, DISPLAY_CTRL, PLANE, ENABLE);
+   val |= DISPLAY_CTRL_PLANE;
 
/*
 * Somehow the register value on the plane is not set
@@ -53,10 +53,10 @@ static void setDisplayControl(int ctrl, int disp_state)
 * find out if it is necessary to wait for 1 vsync
 * before modifying the timing enable bit.
 */
-   val = FIELD_SET(val, DISPLAY_CTRL, PLANE, DISABLE);
+   val &= ~DISPLAY_CTRL_PLANE;
POKE32(reg, val);
 
-   val = FIELD_SET(val, DISPLAY_CTRL, TIMING, DISABLE);
+   val &= ~DISPLAY_CTRL_TIMING;
POKE32(reg, val);
}
 }
@@ -71,9 +71,7 @@ static void waitNextVerticalSync(int ctrl, int delay)
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
if (!(PEEK32(PANEL_PLL_CTRL) & PLL_CTRL_POWER) ||
-   (FIELD_GET(PEEK32(PANEL_DISPLAY_CTRL),
-   DISPLAY_CTRL, TIMING) ==
-   DISPLAY_CTRL_TIMING_DISABLE)) {
+   !(PEEK32(PANEL_DISPLAY_CTRL) & DISPLAY_CTRL_TIMING)) {
return;
}
 
@@ -94,9 +92,7 @@ static void waitNextVerticalSync(int ctrl, int delay)
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
if (!(PEEK32(CRT_PLL_CTRL) & PLL_CTRL_POWER) ||
-   (FIELD_GET(PEEK32(CRT_DISPLAY_CTRL),
-   DISPLAY_CTRL, TIMING) ==
-   DISPLAY_CTRL_TIMING_DISABLE)) {
+   !(PEEK32(CRT_DISPLAY_CTRL) & DISPLAY_CTRL_TIMING)) {
return;
}
 
@@ -120,22 +116,22 @@ static void swPanelPowerSequence(int disp, int delay)
 
/* disp should be 1 to open sequence */
reg = PEEK32(PANEL_DISPLAY_CTRL);
-   reg = FIELD_VALUE(reg, PANEL_DISPLAY_CTRL, FPEN, disp);
+   reg |= (disp ? PANEL_DISPLAY_CTRL_FPEN : 0);
POKE32(PANEL_DISPLAY_CTRL, reg);
primaryWaitVerticalSync(delay);
 
reg = PEEK32(PANEL_DISPLAY_CTRL);
-   reg = FIELD_VALUE(reg, PANEL_DISPLAY_CTRL, DATA, disp);
+   reg |= (disp ? PANEL_DISPLAY_CTRL_DATA : 0);
POKE32(PANEL_DISPLAY_CTRL, reg);
primaryWaitVerticalSync(delay);
 
reg = PEEK32(PANEL_DISPLAY_

[PATCH 10/30] staging: sm750fb: programModeRegisters: rename local vairables

2016-02-10 Thread Mike Rapoport
Remove HungarianCamelCase notation.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 28 
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index d0e3935..e7fc239 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -79,7 +79,7 @@ static int programModeRegisters(mode_parameter_t *pModeParam, 
pll_value_t *pll)
 {
int ret = 0;
int cnt = 0;
-   unsigned int ulTmpValue, ulReg;
+   unsigned int tmp, reg;
 
if (pll->clockType == SECONDARY_PLL) {
/* programe secondary pixel clock */
@@ -101,26 +101,27 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
| FIELD_VALUE(0, CRT_VERTICAL_SYNC, START, 
pModeParam->vertical_sync_start - 1));
 
 
-   ulTmpValue = FIELD_VALUE(0, CRT_DISPLAY_CTRL, VSYNC_PHASE, 
pModeParam->vertical_sync_polarity) |
+   tmp = FIELD_VALUE(0, CRT_DISPLAY_CTRL, VSYNC_PHASE,
+ pModeParam->vertical_sync_polarity) |
  FIELD_VALUE(0, CRT_DISPLAY_CTRL, 
HSYNC_PHASE, pModeParam->horizontal_sync_polarity) |
  FIELD_SET(0, CRT_DISPLAY_CTRL, 
TIMING, ENABLE) |
  FIELD_SET(0, CRT_DISPLAY_CTRL, PLANE, 
ENABLE);
 
 
if (getChipType() == SM750LE) {
-   displayControlAdjust_SM750LE(pModeParam, ulTmpValue);
+   displayControlAdjust_SM750LE(pModeParam, tmp);
} else {
-   ulReg = PEEK32(CRT_DISPLAY_CTRL)
+   reg = PEEK32(CRT_DISPLAY_CTRL)
& FIELD_CLEAR(CRT_DISPLAY_CTRL, 
VSYNC_PHASE)
& FIELD_CLEAR(CRT_DISPLAY_CTRL, 
HSYNC_PHASE)
& FIELD_CLEAR(CRT_DISPLAY_CTRL, TIMING)
& FIELD_CLEAR(CRT_DISPLAY_CTRL, PLANE);
 
-POKE32(CRT_DISPLAY_CTRL, ulTmpValue | ulReg);
+POKE32(CRT_DISPLAY_CTRL, tmp | reg);
}
 
} else if (pll->clockType == PRIMARY_PLL) {
-   unsigned int ulReservedBits;
+   unsigned int reserved;
 
POKE32(PANEL_PLL_CTRL, formatPllReg(pll));
 
@@ -140,18 +141,20 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
FIELD_VALUE(0, PANEL_VERTICAL_SYNC, HEIGHT, 
pModeParam->vertical_sync_height)
| FIELD_VALUE(0, PANEL_VERTICAL_SYNC, START, 
pModeParam->vertical_sync_start - 1));
 
-   ulTmpValue = FIELD_VALUE(0, PANEL_DISPLAY_CTRL, VSYNC_PHASE, 
pModeParam->vertical_sync_polarity) |
+   tmp = FIELD_VALUE(0, PANEL_DISPLAY_CTRL, VSYNC_PHASE,
+ pModeParam->vertical_sync_polarity) |
 FIELD_VALUE(0, PANEL_DISPLAY_CTRL, HSYNC_PHASE, 
pModeParam->horizontal_sync_polarity) |
 FIELD_VALUE(0, PANEL_DISPLAY_CTRL, CLOCK_PHASE, 
pModeParam->clock_phase_polarity) |
 FIELD_SET(0, PANEL_DISPLAY_CTRL, TIMING, ENABLE) |
 FIELD_SET(0, PANEL_DISPLAY_CTRL, PLANE, ENABLE);
 
-   ulReservedBits = FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_1_MASK, ENABLE) |
+   reserved = FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_1_MASK,
+ENABLE) |
 FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_2_MASK, ENABLE) |
 FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_3_MASK, ENABLE) |
 FIELD_SET(0, PANEL_DISPLAY_CTRL, VSYNC, 
ACTIVE_LOW);
 
-   ulReg = (PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits)
+   reg = (PEEK32(PANEL_DISPLAY_CTRL) & ~reserved)
& FIELD_CLEAR(PANEL_DISPLAY_CTRL, CLOCK_PHASE)
& FIELD_CLEAR(PANEL_DISPLAY_CTRL, VSYNC_PHASE)
& FIELD_CLEAR(PANEL_DISPLAY_CTRL, HSYNC_PHASE)
@@ -167,13 +170,14 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
*   next vertical sync to turn on/off the plane.
*/
 
-   POKE32(PANEL_DISPLAY_CTRL, ulTmpValue | ulReg);
+   POKE32(PANEL_DISPLAY_CTRL, tmp | reg);
 
-   while ((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) != 
(ulTmpValue | ulReg)) {
+   while ((PEEK32(PANEL_DISPLAY_CTRL) & ~reserved) !=
+   (tmp | reg)) {
cnt++;
if (cnt > 1000)
 

[PATCH 00/30] staging: sm750fb: change some register fields defines

2016-02-10 Thread Mike Rapoport
Hi,

This is the second set of patches that aim to replace custom defines for
register fields. The ultimate goal is to have MSB:LSB notation for register
fields and FIELD_* macros removed. 

Mike Rapoport (30):
  staging: sm750fb: formatPllReg: rename ulPllReg to reg
  staging: sm750fb: formatPllReg: fix comment formatting
  staging: sm750fb: rename PANEL_PLL_CTRL_* fields to PLL_CTRL_*
  staging: sm750fb: use PLL_CTRL_POWER defines for CRT_PLL_CTRL
  staging: sm750fb: use BIT macro for PLL_CTRL single-bit fields
  staging: sm750fb: change defintion of PANEL_PLL_CTRL multi-bit fields
  staging: sm750fb: drop redundant defines for PLL_CTRL fields
  staging: sm750fb: use BIT macro for VGA_CONFIGURATION single-bit
fields
  staging: sm750fb: change definition of VGA_CONFIGURATION multi-bit
field
  staging: sm750fb: programModeRegisters: rename local vairables
  staging: sm750fb: setDisplayControl: rename local vairables
  staging: sm750fb: share common bits in display control registers
  staging: sm750fb: merge reserved bits of PANEL/CRT_DISPLAY_CTRL
registers
  staging: sm750fb: refactor setDisplayControl function
  staging: sm750fb: hw_sm750_setBLANK: reduce printk verbosity
  staging: sm750fb: use BIT macro for PANEL_DISPLAY_CTRL single-bit
fields
  staging: sm750fb: remove PANEL_DISPLAY_CTRL_TFT_DISP defines
  staging: sm750fb: change definition of PANEL_DISPLAY_CTRL multi-bit
fields
  staging: sm750fb: change definition of PANEL_FB_ADDRESS fields
  staging: sm750fb: change definition of PANEL_FB_WIDTH fields
  staging: sm750fb: change definition of PANEL_WINDOW_WIDTH fields
  staging: sm750fb: change definition of PANEL_WINDOW_HEIGHT fields
  staging: sm750fb: change definition of PANEL_PLANE_TL fields
  staging: sm750fb: change definition of PANEL_PLANE_BR fields
  staging: sm750fb: use BIT macro for DMA_ABORT_INTERRUPT single-bit
fields
  staging: sm750fb: use BIT macro for CRT_DISPLAY_CTRL single-bit fields
  staging: sm750fb: change definition of CRT_DISPLAY_CTRL multi-bit
fields
  staging: sm750fb: use BIT macro for I2C_CTRL fields
  staging: sm750fb: use BIT macro for I2C_STATUS fields
  staging: sm750fb: change definition of PANEL_HORIZONTAL_TOTAL fields

 drivers/staging/sm750fb/ddk750_chip.c|  54 ++--
 drivers/staging/sm750fb/ddk750_display.c | 176 
 drivers/staging/sm750fb/ddk750_hwi2c.c   |  23 +-
 drivers/staging/sm750fb/ddk750_mode.c|  95 ---
 drivers/staging/sm750fb/ddk750_power.c   |   6 +-
 drivers/staging/sm750fb/ddk750_reg.h | 462 +--
 drivers/staging/sm750fb/sm750_hw.c   | 119 
 7 files changed, 335 insertions(+), 600 deletions(-)

-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 26/30] staging: sm750fb: use BIT macro for CRT_DISPLAY_CTRL single-bit fields

2016-02-10 Thread Mike Rapoport
Replace complex definition of CRT_DISPLAY_CTRL register fields with
BIT() macro and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c |  2 +-
 drivers/staging/sm750fb/ddk750_mode.c|  3 +--
 drivers/staging/sm750fb/ddk750_reg.h | 39 
 drivers/staging/sm750fb/sm750_hw.c   | 29 ++--
 4 files changed, 28 insertions(+), 45 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index fb5523c..7bb6fd4 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -155,7 +155,7 @@ void ddk750_setLogicalDispOut(disp_output_t output)
reg = PEEK32(CRT_DISPLAY_CTRL);
reg = FIELD_VALUE(reg, CRT_DISPLAY_CTRL, SELECT, (output & 
CRT_2_MASK)>>CRT_2_OFFSET);
/*se blank off */
-   reg = FIELD_SET(reg, CRT_DISPLAY_CTRL, BLANK, OFF);
+   reg &= ~CRT_DISPLAY_CTRL_BLANK;
POKE32(CRT_DISPLAY_CTRL, reg);
 
}
diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 1edb235..96fd4bf 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -61,8 +61,7 @@ static unsigned long 
displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL25);
 
/* Set bit 25:24 of display controller */
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CRTSELECT, CRT);
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, RGBBIT, 24BIT);
+   dispControl |= (CRT_DISPLAY_CTRL_CRTSELECT | CRT_DISPLAY_CTRL_RGBBIT);
 
/* Set bit 14 of display controller */
dispControl = DISPLAY_CTRL_CLOCK_PHASE;
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 73f3c34..446bb85 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1331,38 +1331,19 @@
 #define CRT_DISPLAY_CTRL_CLK_PLL805
 #define CRT_DISPLAY_CTRL_CLK_PLL108   6
 #define CRT_DISPLAY_CTRL_CLK_RESERVED 7
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC26:26
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC_DISABLE1
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC_ENABLE 0
+#define CRT_DISPLAY_CTRL_SHIFT_VGA_DACBIT(26)
 
 /* SM750LE definition */
-#define CRT_DISPLAY_CTRL_CRTSELECT25:25
-#define CRT_DISPLAY_CTRL_CRTSELECT_VGA0
-#define CRT_DISPLAY_CTRL_CRTSELECT_CRT1
-#define CRT_DISPLAY_CTRL_RGBBIT   24:24
-#define CRT_DISPLAY_CTRL_RGBBIT_24BIT 0
-#define CRT_DISPLAY_CTRL_RGBBIT_12BIT 1
+#define CRT_DISPLAY_CTRL_CRTSELECTBIT(25)
+#define CRT_DISPLAY_CTRL_RGBBIT   BIT(24)
 
 #ifndef VALIDATION_CHIP
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC26:26
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC_DISABLE1
-#define CRT_DISPLAY_CTRL_SHIFT_VGA_DAC_ENABLE 0
-#define CRT_DISPLAY_CTRL_CENTERING24:24
-#define CRT_DISPLAY_CTRL_CENTERING_DISABLE0
-#define CRT_DISPLAY_CTRL_CENTERING_ENABLE 1
+#define CRT_DISPLAY_CTRL_CENTERINGBIT(24)
 #endif
-#define CRT_DISPLAY_CTRL_LOCK_TIMING  23:23
-#define CRT_DISPLAY_CTRL_LOCK_TIMING_DISABLE  0
-#define CRT_DISPLAY_CTRL_LOCK_TIMING_ENABLE   1
-#define CRT_DISPLAY_CTRL_EXPANSION22:22
-#define CRT_DISPLAY_CTRL_EXPANSION_DISABLE0
-#define CRT_DISPLAY_CTRL_EXPANSION_ENABLE 1
-#define CRT_DISPLAY_CTRL_VERTICAL_MODE21:21
-#define CRT_DISPLAY_CTRL_VERTICAL_MODE_REPLICATE  0
-#define CRT_DISPLAY_CTRL_VERTICAL_MODE_INTERPOLATE1
-#define CRT_DISPLAY_CTRL_HORIZONTAL_MODE  20:20
-#define CRT_DISPLAY_CTRL_HORIZONTAL_MODE_REPLICATE0
-#define CRT_DISPLAY_CTRL_HORIZONTAL_MODE_INTERPOLATE  1
+#define CRT_DISPLAY_CTRL_LOCK_TIMING  BIT(23)
+#define CRT_DISPLAY_CTRL_EXPANSIONBIT(22)
+#define CRT_DISPLAY_CTRL_VERTICAL_MODEBIT(21)
+#define CRT_DISPLAY_CTRL_HORIZONTAL_MODE  BIT(20)
 #define CRT_DISPLAY_CTRL_SELECT   19:18
 #define CRT_DISPLAY_CTRL_SELECT_PANEL 0
 #define CRT_DISPLAY_CTRL_SELECT_VGA   1
@@ -1372,9 +1353,7 @@
 #define CRT_DISPLAY_CTRL_FIFO_3   1
 #define CRT_DISPLAY_CTRL_FIFO_7   2
 #define CRT_DISPLAY_CTRL_FIFO_11  3
-#define CRT_DISPLAY_CTRL_BLANK10:10
-#define CRT_DISPLAY_CTRL_BLANK_OFF0
-#define CRT_DISPLAY_CTRL_BLANK_ON

[PATCH 30/30] staging: sm750fb: change definition of PANEL_HORIZONTAL_TOTAL fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_HORIZONTAL_TOTAL register fields
and use open-coded implementation for register manipulations

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_mode.c | 9 ++---
 drivers/staging/sm750fb/ddk750_reg.h  | 5 +++--
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 9ec3c64..7e57b57 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -122,9 +122,12 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
 
POKE32(PANEL_PLL_CTRL, formatPllReg(pll));
 
-   POKE32(PANEL_HORIZONTAL_TOTAL,
-   FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, TOTAL, 
pModeParam->horizontal_total - 1)
-   | FIELD_VALUE(0, PANEL_HORIZONTAL_TOTAL, DISPLAY_END, 
pModeParam->horizontal_display_end - 1));
+   reg = ((pModeParam->horizontal_total - 1) <<
+   PANEL_HORIZONTAL_TOTAL_TOTAL_SHIFT) &
+   PANEL_HORIZONTAL_TOTAL_TOTAL_MASK;
+   reg |= ((pModeParam->horizontal_display_end - 1) &
+   PANEL_HORIZONTAL_TOTAL_DISPLAY_END_MASK);
+   POKE32(PANEL_HORIZONTAL_TOTAL, reg);
 
POKE32(PANEL_HORIZONTAL_SYNC,
FIELD_VALUE(0, PANEL_HORIZONTAL_SYNC, WIDTH, 
pModeParam->horizontal_sync_width)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6399599..4702897 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -858,8 +858,9 @@
 #define PANEL_PLANE_BR_RIGHT_MASK 0xeff
 
 #define PANEL_HORIZONTAL_TOTAL0x080024
-#define PANEL_HORIZONTAL_TOTAL_TOTAL  27:16
-#define PANEL_HORIZONTAL_TOTAL_DISPLAY_END11:0
+#define PANEL_HORIZONTAL_TOTAL_TOTAL_SHIFT16
+#define PANEL_HORIZONTAL_TOTAL_TOTAL_MASK (0xfff << 16)
+#define PANEL_HORIZONTAL_TOTAL_DISPLAY_END_MASK   0xfff
 
 #define PANEL_HORIZONTAL_SYNC 0x080028
 #define PANEL_HORIZONTAL_SYNC_WIDTH   23:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 28/30] staging: sm750fb: use BIT macro for I2C_CTRL fields

2016-02-10 Thread Mike Rapoport
Replace complex definition of I2C_CTRL register fields with BIT() macro and
use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_hwi2c.c | 19 +++
 drivers/staging/sm750fb/ddk750_reg.h   | 20 +---
 2 files changed, 12 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_hwi2c.c 
b/drivers/staging/sm750fb/ddk750_hwi2c.c
index 40253bd..1811c4b 100644
--- a/drivers/staging/sm750fb/ddk750_hwi2c.c
+++ b/drivers/staging/sm750fb/ddk750_hwi2c.c
@@ -26,12 +26,10 @@ unsigned char bus_speed_mode
enableI2C(1);
 
/* Enable the I2C Controller and set the bus speed mode */
-   value = PEEK32(I2C_CTRL);
-   if (bus_speed_mode == 0)
-   value = FIELD_SET(value, I2C_CTRL, MODE, STANDARD);
-   else
-   value = FIELD_SET(value, I2C_CTRL, MODE, FAST);
-   value = FIELD_SET(value, I2C_CTRL, EN, ENABLE);
+   value = PEEK32(I2C_CTRL) & ~(I2C_CTRL_MODE | I2C_CTRL_EN);
+   if (bus_speed_mode)
+   value |= I2C_CTRL_MODE;
+   value |= I2C_CTRL_EN;
POKE32(I2C_CTRL, value);
 
return 0;
@@ -42,8 +40,7 @@ void sm750_hw_i2c_close(void)
unsigned int value;
 
/* Disable I2C controller */
-   value = PEEK32(I2C_CTRL);
-   value = FIELD_SET(value, I2C_CTRL, EN, DISABLE);
+   value = PEEK32(I2C_CTRL) & ~I2C_CTRL_EN;
POKE32(I2C_CTRL, value);
 
/* Disable I2C Power */
@@ -120,8 +117,7 @@ static unsigned int hw_i2c_write_data(
POKE32(I2C_DATA0 + i, *buf++);
 
/* Start the I2C */
-   POKE32(I2C_CTRL,
-  FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
+   POKE32(I2C_CTRL, PEEK32(I2C_CTRL) | I2C_CTRL_CTRL);
 
/* Wait until the transfer is completed. */
if (hw_i2c_wait_tx_done() != 0)
@@ -183,8 +179,7 @@ static unsigned int hw_i2c_read_data(
POKE32(I2C_BYTE_COUNT, count);
 
/* Start the I2C */
-   POKE32(I2C_CTRL,
-  FIELD_SET(PEEK32(I2C_CTRL), I2C_CTRL, CTRL, START));
+   POKE32(I2C_CTRL, PEEK32(I2C_CTRL) | I2C_CTRL_CTRL);
 
/* Wait until transaction done. */
if (hw_i2c_wait_tx_done() != 0)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d033d4f..2a8ad57 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1605,21 +1605,11 @@
 #define I2C_BYTE_COUNT_COUNT3:0
 
 #define I2C_CTRL0x010041
-#define I2C_CTRL_INT4:4
-#define I2C_CTRL_INT_DISABLE0
-#define I2C_CTRL_INT_ENABLE 1
-#define I2C_CTRL_DIR3:3
-#define I2C_CTRL_DIR_WR 0
-#define I2C_CTRL_DIR_RD 1
-#define I2C_CTRL_CTRL   2:2
-#define I2C_CTRL_CTRL_STOP  0
-#define I2C_CTRL_CTRL_START 1
-#define I2C_CTRL_MODE   1:1
-#define I2C_CTRL_MODE_STANDARD  0
-#define I2C_CTRL_MODE_FAST  1
-#define I2C_CTRL_EN 0:0
-#define I2C_CTRL_EN_DISABLE 0
-#define I2C_CTRL_EN_ENABLE  1
+#define I2C_CTRL_INTBIT(4)
+#define I2C_CTRL_DIRBIT(3)
+#define I2C_CTRL_CTRL   BIT(2)
+#define I2C_CTRL_MODE   BIT(1)
+#define I2C_CTRL_EN BIT(0)
 
 #define I2C_STATUS  0x010042
 #define I2C_STATUS_TX   3:3
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 29/30] staging: sm750fb: use BIT macro for I2C_STATUS fields

2016-02-10 Thread Mike Rapoport
Replace complex definition of I2C_STATUS register fields with BIT() macro
and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_hwi2c.c |  4 +---
 drivers/staging/sm750fb/ddk750_reg.h   | 18 --
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_hwi2c.c 
b/drivers/staging/sm750fb/ddk750_hwi2c.c
index 1811c4b..231c021 100644
--- a/drivers/staging/sm750fb/ddk750_hwi2c.c
+++ b/drivers/staging/sm750fb/ddk750_hwi2c.c
@@ -59,9 +59,7 @@ static long hw_i2c_wait_tx_done(void)
 
/* Wait until the transfer is completed. */
timeout = HWI2C_WAIT_TIMEOUT;
-   while ((FIELD_GET(PEEK32(I2C_STATUS),
- I2C_STATUS, TX) != I2C_STATUS_TX_COMPLETED) &&
-  (timeout != 0))
+   while (!(PEEK32(I2C_STATUS) & I2C_STATUS_TX) && (timeout != 0))
timeout--;
 
if (timeout == 0)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 2a8ad57..6399599 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1612,20 +1612,10 @@
 #define I2C_CTRL_EN BIT(0)
 
 #define I2C_STATUS  0x010042
-#define I2C_STATUS_TX   3:3
-#define I2C_STATUS_TX_PROGRESS  0
-#define I2C_STATUS_TX_COMPLETED 1
-#define I2C_TX_DONE 0x08
-#define I2C_STATUS_ERR  2:2
-#define I2C_STATUS_ERR_NORMAL   0
-#define I2C_STATUS_ERR_ERROR1
-#define I2C_STATUS_ERR_CLEAR0
-#define I2C_STATUS_ACK  1:1
-#define I2C_STATUS_ACK_RECEIVED 0
-#define I2C_STATUS_ACK_NOT  1
-#define I2C_STATUS_BSY  0:0
-#define I2C_STATUS_BSY_IDLE 0
-#define I2C_STATUS_BSY_BUSY 1
+#define I2C_STATUS_TX   BIT(3)
+#define I2C_STATUS_ERR  BIT(2)
+#define I2C_STATUS_ACK  BIT(1)
+#define I2C_STATUS_BSY  BIT(0)
 
 #define I2C_RESET   0x010042
 #define I2C_RESET_BUS_ERROR 2:2
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 22/30] staging: sm750fb: change definition of PANEL_WINDOW_HEIGHT fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_WINDOW_HEIGHT register fields and
use open-coded implementation for register manipulations

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 drivers/staging/sm750fb/sm750_hw.c   | 8 +---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6e6694d..d3359c5 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -843,8 +843,9 @@
 #define PANEL_WINDOW_WIDTH_X_MASK 0xfff
 
 #define PANEL_WINDOW_HEIGHT   0x080018
-#define PANEL_WINDOW_HEIGHT_HEIGHT27:16
-#define PANEL_WINDOW_HEIGHT_Y 11:0
+#define PANEL_WINDOW_HEIGHT_HEIGHT_SHIFT  16
+#define PANEL_WINDOW_HEIGHT_HEIGHT_MASK   (0xfff << 16)
+#define PANEL_WINDOW_HEIGHT_Y_MASK0xfff
 
 #define PANEL_PLANE_TL0x08001C
 #define PANEL_PLANE_TL_TOP26:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index a0d7214..0ea3106 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -323,9 +323,11 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
reg |= (var->xoffset & PANEL_WINDOW_WIDTH_X_MASK);
POKE32(PANEL_WINDOW_WIDTH, reg);
 
-   POKE32(PANEL_WINDOW_HEIGHT,
-   FIELD_VALUE(0, PANEL_WINDOW_HEIGHT, HEIGHT, 
var->yres_virtual - 1)|
-   FIELD_VALUE(0, PANEL_WINDOW_HEIGHT, Y, var->yoffset));
+   reg = ((var->yres_virtual - 1) <<
+  PANEL_WINDOW_HEIGHT_HEIGHT_SHIFT);
+   reg &= PANEL_WINDOW_HEIGHT_HEIGHT_MASK;
+   reg |= (var->yoffset & PANEL_WINDOW_HEIGHT_Y_MASK);
+   POKE32(PANEL_WINDOW_HEIGHT, reg);
 
POKE32(PANEL_PLANE_TL, 0);
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 27/30] staging: sm750fb: change definition of CRT_DISPLAY_CTRL multi-bit fields

2016-02-10 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of
CRT_DISPLAY_CTRL register and use open-coded implementation for register
manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c |  4 ++-
 drivers/staging/sm750fb/ddk750_mode.c| 18 +-
 drivers/staging/sm750fb/ddk750_power.c   |  6 ++--
 drivers/staging/sm750fb/ddk750_reg.h | 58 +---
 drivers/staging/sm750fb/sm750_hw.c   |  6 ++--
 5 files changed, 49 insertions(+), 43 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 7bb6fd4..ca4973e 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -153,7 +153,9 @@ void ddk750_setLogicalDispOut(disp_output_t output)
if (output & CRT_2_USAGE) {
/* set crt path controller select */
reg = PEEK32(CRT_DISPLAY_CTRL);
-   reg = FIELD_VALUE(reg, CRT_DISPLAY_CTRL, SELECT, (output & 
CRT_2_MASK)>>CRT_2_OFFSET);
+   reg &= ~CRT_DISPLAY_CTRL_SELECT_MASK;
+   reg |= (((output & CRT_2_MASK) >> CRT_2_OFFSET) <<
+   CRT_DISPLAY_CTRL_SELECT_SHIFT);
/*se blank off */
reg &= ~CRT_DISPLAY_CTRL_BLANK;
POKE32(CRT_DISPLAY_CTRL, reg);
diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 96fd4bf..9ec3c64 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -39,26 +39,26 @@ static unsigned long 
displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
 */
 
/* Clear bit 29:27 of display control register */
-   dispControl &= FIELD_CLEAR(CRT_DISPLAY_CTRL, CLK);
+   dispControl &= ~CRT_DISPLAY_CTRL_CLK_MASK;
 
/* Set bit 29:27 of display control register for the right clock */
/* Note that SM750LE only need to supported 7 resolutions. */
if (x == 800 && y == 600)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL41);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL41;
else if (x == 1024 && y == 768)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL65);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL65;
else if (x == 1152 && y == 864)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL80);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL80;
else if (x == 1280 && y == 768)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL80);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL80;
else if (x == 1280 && y == 720)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL74);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL74;
else if (x == 1280 && y == 960)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL108);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL108;
else if (x == 1280 && y == 1024)
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, 
PLL108);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL108;
else /* default to VGA clock */
-   dispControl = FIELD_SET(dispControl, CRT_DISPLAY_CTRL, CLK, PLL25);
+   dispControl |= CRT_DISPLAY_CTRL_CLK_PLL25;
 
/* Set bit 25:24 of display controller */
dispControl |= (CRT_DISPLAY_CTRL_CRTSELECT | CRT_DISPLAY_CTRL_RGBBIT);
diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index c85dfc5..ec1cac2 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -7,9 +7,9 @@ void ddk750_setDPMS(DPMS_t state)
unsigned int value;
 
if (getChipType() == SM750LE) {
-   value = PEEK32(CRT_DISPLAY_CTRL);
-   POKE32(CRT_DISPLAY_CTRL, FIELD_VALUE(value, CRT_DISPLAY_CTRL,
-DPMS, state));
+   value = PEEK32(CRT_DISPLAY_CTRL) & ~CRT_DISPLAY_CTRL_DPMS_MASK;
+   value |= (state << CRT_DISPLAY_CTRL_DPMS_SHIFT);
+   POKE32(CRT_DISPLAY_CTRL, value);
} else {
value = PEEK32(SYSTEM_CTRL);
value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state;
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 446bb85..d033d4f 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1317,20 +1317,21 @@
 #define CRT_DISPLAY_CTRL_RESERVED_MASK0xfb008200
 
 /* SM750LE definition */
-#define CRT_DISPLAY_CTRL_DPMS 31:30
-#define CRT_DISPLAY_CTRL_DPMS

[PATCH 23/30] staging: sm750fb: change definition of PANEL_PLANE_TL fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_PLANE_TL register fields

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d3359c5..b8460a5 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -848,8 +848,9 @@
 #define PANEL_WINDOW_HEIGHT_Y_MASK0xfff
 
 #define PANEL_PLANE_TL0x08001C
-#define PANEL_PLANE_TL_TOP26:16
-#define PANEL_PLANE_TL_LEFT   10:0
+#define PANEL_PLANE_TL_TOP_SHIFT  16
+#define PANEL_PLANE_TL_TOP_MASK   (0xeff << 16)
+#define PANEL_PLANE_TL_LEFT_MASK  0xeff
 
 #define PANEL_PLANE_BR0x080020
 #define PANEL_PLANE_BR_BOTTOM 26:16
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 25/30] staging: sm750fb: use BIT macro for DMA_ABORT_INTERRUPT single-bit fields

2016-02-10 Thread Mike Rapoport
Replace complex definition of DMA_ABORT_INTERRUPT register fields with
BIT() macro and use open-coded implementation for register manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h  | 20 
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 37eae59..e53a3d1 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -264,7 +264,7 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 
/* Disable DMA Channel, if a former application left it on */
reg = PEEK32(DMA_ABORT_INTERRUPT);
-   reg = FIELD_SET(reg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT);
+   reg |= DMA_ABORT_INTERRUPT_ABORT_1;
POKE32(DMA_ABORT_INTERRUPT, reg);
 
/* Disable DMA Power, if a former application left it on */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6551098..73f3c34 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1973,22 +1973,10 @@
 #define DMA_1_SIZE_CONTROL_SIZE 23:0
 
 #define DMA_ABORT_INTERRUPT 0x0D0020
-#define DMA_ABORT_INTERRUPT_ABORT_1 5:5
-#define DMA_ABORT_INTERRUPT_ABORT_1_ENABLE  0
-#define DMA_ABORT_INTERRUPT_ABORT_1_ABORT   1
-#define DMA_ABORT_INTERRUPT_ABORT_0 4:4
-#define DMA_ABORT_INTERRUPT_ABORT_0_ENABLE  0
-#define DMA_ABORT_INTERRUPT_ABORT_0_ABORT   1
-#define DMA_ABORT_INTERRUPT_INT_1   1:1
-#define DMA_ABORT_INTERRUPT_INT_1_CLEAR 0
-#define DMA_ABORT_INTERRUPT_INT_1_FINISHED  1
-#define DMA_ABORT_INTERRUPT_INT_0   0:0
-#define DMA_ABORT_INTERRUPT_INT_0_CLEAR 0
-#define DMA_ABORT_INTERRUPT_INT_0_FINISHED  1
-
-
-
-
+#define DMA_ABORT_INTERRUPT_ABORT_1 BIT(5)
+#define DMA_ABORT_INTERRUPT_ABORT_0 BIT(4)
+#define DMA_ABORT_INTERRUPT_INT_1   BIT(1)
+#define DMA_ABORT_INTERRUPT_INT_0   BIT(0)
 
 /* Default i2c CLK and Data GPIO. These are the default i2c pins */
 #define DEFAULT_I2C_SCL 30
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 21/30] staging: sm750fb: change definition of PANEL_WINDOW_WIDTH fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_WINDOW_WIDTH register fields and
use open-coded implementation for register manipulations

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 drivers/staging/sm750fb/sm750_hw.c   | 7 ---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 7e0cc95..6e6694d 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -838,8 +838,9 @@
 #define PANEL_FB_WIDTH_OFFSET_MASK0x3fff
 
 #define PANEL_WINDOW_WIDTH0x080014
-#define PANEL_WINDOW_WIDTH_WIDTH  27:16
-#define PANEL_WINDOW_WIDTH_X  11:0
+#define PANEL_WINDOW_WIDTH_WIDTH_SHIFT16
+#define PANEL_WINDOW_WIDTH_WIDTH_MASK (0xfff << 16)
+#define PANEL_WINDOW_WIDTH_X_MASK 0xfff
 
 #define PANEL_WINDOW_HEIGHT   0x080018
 #define PANEL_WINDOW_HEIGHT_HEIGHT27:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 9e350b4..a0d7214 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -318,9 +318,10 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
reg |= (fix->line_length & PANEL_FB_WIDTH_OFFSET_MASK);
POKE32(PANEL_FB_WIDTH, reg);
 
-   POKE32(PANEL_WINDOW_WIDTH,
-   FIELD_VALUE(0, PANEL_WINDOW_WIDTH, WIDTH, var->xres - 
1)|
-   FIELD_VALUE(0, PANEL_WINDOW_WIDTH, X, var->xoffset));
+   reg = ((var->xres - 1) << PANEL_WINDOW_WIDTH_WIDTH_SHIFT) &
+  PANEL_WINDOW_WIDTH_WIDTH_MASK;
+   reg |= (var->xoffset & PANEL_WINDOW_WIDTH_X_MASK);
+   POKE32(PANEL_WINDOW_WIDTH, reg);
 
POKE32(PANEL_WINDOW_HEIGHT,
FIELD_VALUE(0, PANEL_WINDOW_HEIGHT, HEIGHT, 
var->yres_virtual - 1)|
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 20/30] staging: sm750fb: change definition of PANEL_FB_WIDTH fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_FB_WIDTH register fields and use
open-coded implementation for register manipulations

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 drivers/staging/sm750fb/sm750_hw.c   | 8 
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 1b96af3..7e0cc95 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -833,8 +833,9 @@
 #define PANEL_FB_ADDRESS_ADDRESS_MASK 0x1ff
 
 #define PANEL_FB_WIDTH0x080010
-#define PANEL_FB_WIDTH_WIDTH  29:16
-#define PANEL_FB_WIDTH_OFFSET 13:0
+#define PANEL_FB_WIDTH_WIDTH_SHIFT16
+#define PANEL_FB_WIDTH_WIDTH_MASK (0x3fff << 16)
+#define PANEL_FB_WIDTH_OFFSET_MASK0x3fff
 
 #define PANEL_WINDOW_WIDTH0x080014
 #define PANEL_WINDOW_WIDTH_WIDTH  27:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 938ea72..9e350b4 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -313,10 +313,10 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
reg = var->xres * (var->bits_per_pixel >> 3);
/* crtc->channel is not equal to par->index on numeric,be aware 
of that */
reg = ALIGN(reg, crtc->line_pad);
-
-   POKE32(PANEL_FB_WIDTH,
-   FIELD_VALUE(0, PANEL_FB_WIDTH, WIDTH, reg)|
-   FIELD_VALUE(0, PANEL_FB_WIDTH, OFFSET, 
fix->line_length));
+   reg = (reg << PANEL_FB_WIDTH_WIDTH_SHIFT) &
+  PANEL_FB_WIDTH_WIDTH_MASK;
+   reg |= (fix->line_length & PANEL_FB_WIDTH_OFFSET_MASK);
+   POKE32(PANEL_FB_WIDTH, reg);
 
POKE32(PANEL_WINDOW_WIDTH,
FIELD_VALUE(0, PANEL_WINDOW_WIDTH, WIDTH, var->xres - 
1)|
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 24/30] staging: sm750fb: change definition of PANEL_PLANE_BR fields

2016-02-10 Thread Mike Rapoport
Use stratight-forward defintion of PANEL_PLANE_BR register fields and
use open-coded implementation for register manipulations

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 5 +++--
 drivers/staging/sm750fb/sm750_hw.c   | 7 ---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index b8460a5..6551098 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -853,8 +853,9 @@
 #define PANEL_PLANE_TL_LEFT_MASK  0xeff
 
 #define PANEL_PLANE_BR0x080020
-#define PANEL_PLANE_BR_BOTTOM 26:16
-#define PANEL_PLANE_BR_RIGHT  10:0
+#define PANEL_PLANE_BR_BOTTOM_SHIFT   16
+#define PANEL_PLANE_BR_BOTTOM_MASK(0xeff << 16)
+#define PANEL_PLANE_BR_RIGHT_MASK 0xeff
 
 #define PANEL_HORIZONTAL_TOTAL0x080024
 #define PANEL_HORIZONTAL_TOTAL_TOTAL  27:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 0ea3106..5951d1a 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -331,9 +331,10 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
 
POKE32(PANEL_PLANE_TL, 0);
 
-   POKE32(PANEL_PLANE_BR,
-   FIELD_VALUE(0, PANEL_PLANE_BR, BOTTOM, var->yres - 1)|
-   FIELD_VALUE(0, PANEL_PLANE_BR, RIGHT, var->xres - 1));
+   reg = ((var->yres - 1) << PANEL_PLANE_BR_BOTTOM_SHIFT) &
+  PANEL_PLANE_BR_BOTTOM_MASK;
+   reg |= ((var->xres - 1) & PANEL_PLANE_BR_RIGHT_MASK);
+   POKE32(PANEL_PLANE_BR, reg);
 
/* set pixel format */
reg = PEEK32(PANEL_DISPLAY_CTRL);
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 19/30] staging: sm750fb: change definition of PANEL_FB_ADDRESS fields

2016-02-10 Thread Mike Rapoport
Use BIT() macro for single-bit fields of PANEL_FB_ADDRESS register and
define PANEL_FB_ADDRESS_ADDRESS_MASK for masking the address bits.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 10 +++---
 drivers/staging/sm750fb/sm750_hw.c   |  8 +++-
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index cdc5867..1b96af3 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -828,13 +828,9 @@
 #define PANEL_COLOR_KEY_VALUE 15:0
 
 #define PANEL_FB_ADDRESS  0x08000C
-#define PANEL_FB_ADDRESS_STATUS   31:31
-#define PANEL_FB_ADDRESS_STATUS_CURRENT   0
-#define PANEL_FB_ADDRESS_STATUS_PENDING   1
-#define PANEL_FB_ADDRESS_EXT  27:27
-#define PANEL_FB_ADDRESS_EXT_LOCAL0
-#define PANEL_FB_ADDRESS_EXT_EXTERNAL 1
-#define PANEL_FB_ADDRESS_ADDRESS  25:0
+#define PANEL_FB_ADDRESS_STATUS   BIT(31)
+#define PANEL_FB_ADDRESS_EXT  BIT(27)
+#define PANEL_FB_ADDRESS_ADDRESS_MASK 0x1ff
 
 #define PANEL_FB_WIDTH0x080010
 #define PANEL_FB_WIDTH_WIDTH  29:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 964c5f0..938ea72 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -308,9 +308,7 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
if (crtc->channel != sm750_secondary) {
/* set pitch, offset ,width,start address ,etc... */
POKE32(PANEL_FB_ADDRESS,
-   FIELD_SET(0, PANEL_FB_ADDRESS, STATUS, CURRENT)|
-   FIELD_SET(0, PANEL_FB_ADDRESS, EXT, LOCAL)|
-   FIELD_VALUE(0, PANEL_FB_ADDRESS, ADDRESS, 
crtc->oScreen));
+  crtc->oScreen & PANEL_FB_ADDRESS_ADDRESS_MASK);
 
reg = var->xres * (var->bits_per_pixel >> 3);
/* crtc->channel is not equal to par->index on numeric,be aware 
of that */
@@ -538,8 +536,8 @@ int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
total += crtc->oScreen;
if (crtc->channel == sm750_primary) {
POKE32(PANEL_FB_ADDRESS,
-   FIELD_VALUE(PEEK32(PANEL_FB_ADDRESS),
-   PANEL_FB_ADDRESS, ADDRESS, total));
+  PEEK32(PANEL_FB_ADDRESS) |
+  (total & PANEL_FB_ADDRESS_ADDRESS_MASK));
} else {
POKE32(CRT_FB_ADDRESS,
FIELD_VALUE(PEEK32(CRT_FB_ADDRESS),
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 18/30] staging: sm750fb: change definition of PANEL_DISPLAY_CTRL multi-bit fields

2016-02-10 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of
PANEL_DISPLAY_CTRL register and use open-coded implementation for register
manipulation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c |  4 +++-
 drivers/staging/sm750fb/ddk750_reg.h | 27 ++-
 drivers/staging/sm750fb/sm750_hw.c   |  6 +-
 3 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index f0e0444..fb5523c 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -144,7 +144,9 @@ void ddk750_setLogicalDispOut(disp_output_t output)
if (output & PNL_2_USAGE) {
/* set panel path controller select */
reg = PEEK32(PANEL_DISPLAY_CTRL);
-   reg = FIELD_VALUE(reg, PANEL_DISPLAY_CTRL, SELECT, (output & 
PNL_2_MASK)>>PNL_2_OFFSET);
+   reg &= ~PANEL_DISPLAY_CTRL_SELECT_MASK;
+   reg |= (((output & PNL_2_MASK) >> PNL_2_OFFSET) <<
+   PANEL_DISPLAY_CTRL_SELECT_SHIFT);
POKE32(PANEL_DISPLAY_CTRL, reg);
}
 
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6df3827..cdc5867 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -783,21 +783,22 @@
 
 #define PANEL_DISPLAY_CTRL0x08
 #define PANEL_DISPLAY_CTRL_RESERVED_MASK  0xc0f08000
-#define PANEL_DISPLAY_CTRL_SELECT 29:28
-#define PANEL_DISPLAY_CTRL_SELECT_PANEL   0
-#define PANEL_DISPLAY_CTRL_SELECT_VGA 1
-#define PANEL_DISPLAY_CTRL_SELECT_CRT 2
+#define PANEL_DISPLAY_CTRL_SELECT_SHIFT   28
+#define PANEL_DISPLAY_CTRL_SELECT_MASK(0x3 << 28)
+#define PANEL_DISPLAY_CTRL_SELECT_PANEL   (0x0 << 28)
+#define PANEL_DISPLAY_CTRL_SELECT_VGA (0x1 << 28)
+#define PANEL_DISPLAY_CTRL_SELECT_CRT (0x2 << 28)
 #define PANEL_DISPLAY_CTRL_FPEN   BIT(27)
 #define PANEL_DISPLAY_CTRL_VBIASENBIT(26)
 #define PANEL_DISPLAY_CTRL_DATA   BIT(25)
 #define PANEL_DISPLAY_CTRL_FPVDDENBIT(24)
 #define PANEL_DISPLAY_CTRL_DUAL_DISPLAY   BIT(19)
 #define PANEL_DISPLAY_CTRL_DOUBLE_PIXEL   BIT(18)
-#define PANEL_DISPLAY_CTRL_FIFO   17:16
-#define PANEL_DISPLAY_CTRL_FIFO_1 0
-#define PANEL_DISPLAY_CTRL_FIFO_3 1
-#define PANEL_DISPLAY_CTRL_FIFO_7 2
-#define PANEL_DISPLAY_CTRL_FIFO_113
+#define PANEL_DISPLAY_CTRL_FIFO   (0x3 << 16)
+#define PANEL_DISPLAY_CTRL_FIFO_1 (0x0 << 16)
+#define PANEL_DISPLAY_CTRL_FIFO_3 (0x1 << 16)
+#define PANEL_DISPLAY_CTRL_FIFO_7 (0x2 << 16)
+#define PANEL_DISPLAY_CTRL_FIFO_11(0x3 << 16)
 #define DISPLAY_CTRL_CLOCK_PHASE  BIT(14)
 #define DISPLAY_CTRL_VSYNC_PHASE  BIT(13)
 #define DISPLAY_CTRL_HSYNC_PHASE  BIT(12)
@@ -811,10 +812,10 @@
 #define PANEL_DISPLAY_CTRL_HORIZONTAL_PAN BIT(4)
 #define DISPLAY_CTRL_GAMMABIT(3)
 #define DISPLAY_CTRL_PLANEBIT(2)
-#define PANEL_DISPLAY_CTRL_FORMAT 1:0
-#define PANEL_DISPLAY_CTRL_FORMAT_8   0
-#define PANEL_DISPLAY_CTRL_FORMAT_16  1
-#define PANEL_DISPLAY_CTRL_FORMAT_32  2
+#define PANEL_DISPLAY_CTRL_FORMAT (0x3 << 0)
+#define PANEL_DISPLAY_CTRL_FORMAT_8   (0x0 << 0)
+#define PANEL_DISPLAY_CTRL_FORMAT_16  (0x1 << 0)
+#define PANEL_DISPLAY_CTRL_FORMAT_32  (0x2 << 0)
 
 #define PANEL_PAN_CTRL0x080004
 #define PANEL_PAN_CTRL_VERTICAL_PAN   31:24
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index d965954..964c5f0 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -336,11 +336,7 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
 
/* set pixel format */
reg = PEEK32(PANEL_DISPLAY_CTRL);
-   POKE32(PANEL_DISPLAY_CTRL,
-   FIELD_VALUE(reg,
-   PANEL_DISPLAY_CTRL, FORMAT,
-   (var->bits_per_pixel >> 4)
-   ));
+   POKE32(PANEL_DISPLAY_CTRL, reg | (var->bits_per_pixel >> 4));
} else {
/* not implemented now */
 

[PATCH 17/30] staging: sm750fb: remove PANEL_DISPLAY_CTRL_TFT_DISP defines

2016-02-10 Thread Mike Rapoport
The PANEL_DISPLAY_CTRL_TFT_DISP definitions artificially encode
PANEL_DISPLAY_CTRL_DUAL_DISPLAY and PANEL_DISPLAY_CTRL_DOUBLE_PIXEL bits
combinations. Replace the PANEL_DISPLAY_CTRL_TFT_DISP usage with direct use
of the bits defined in the datasheet.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h |  6 --
 drivers/staging/sm750fb/sm750_hw.c   | 17 ++---
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6753384..6df3827 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -791,12 +791,6 @@
 #define PANEL_DISPLAY_CTRL_VBIASENBIT(26)
 #define PANEL_DISPLAY_CTRL_DATA   BIT(25)
 #define PANEL_DISPLAY_CTRL_FPVDDENBIT(24)
-
-#define PANEL_DISPLAY_CTRL_TFT_DISP 19:18
-#define PANEL_DISPLAY_CTRL_TFT_DISP_24 0
-#define PANEL_DISPLAY_CTRL_TFT_DISP_36 1
-#define PANEL_DISPLAY_CTRL_TFT_DISP_18 2
-
 #define PANEL_DISPLAY_CTRL_DUAL_DISPLAY   BIT(19)
 #define PANEL_DISPLAY_CTRL_DOUBLE_PIXEL   BIT(18)
 #define PANEL_DISPLAY_CTRL_FIFO   17:16
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 3849891..d965954 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -130,17 +130,20 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct 
pci_dev *pdev)
POKE32(SYSTEM_CTRL, val);
}
 
+   val = PEEK32(PANEL_DISPLAY_CTRL) &
+   ~(PANEL_DISPLAY_CTRL_DUAL_DISPLAY |
+ PANEL_DISPLAY_CTRL_DOUBLE_PIXEL);
switch (sm750_dev->pnltype) {
-   case sm750_doubleTFT:
case sm750_24TFT:
+   break;
+   case sm750_doubleTFT:
+   val |= PANEL_DISPLAY_CTRL_DOUBLE_PIXEL;
+   break;
case sm750_dualTFT:
-   POKE32(PANEL_DISPLAY_CTRL,
-   FIELD_VALUE(PEEK32(PANEL_DISPLAY_CTRL),
-   PANEL_DISPLAY_CTRL,
-   TFT_DISP,
-   sm750_dev->pnltype));
-   break;
+   val |= PANEL_DISPLAY_CTRL_DUAL_DISPLAY;
+   break;
}
+   POKE32(PANEL_DISPLAY_CTRL, val);
} else {
/* for 750LE ,no DVI chip initialization makes Monitor no 
signal */
/* Set up GPIO for software I2C to program DVI chip in the
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 15/30] staging: sm750fb: hw_sm750_setBLANK: reduce printk verbosity

2016-02-10 Thread Mike Rapoport
pr_debug would be enough

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_hw.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index c0c2f1c..52fd250 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -414,13 +414,13 @@ int hw_sm750_setBLANK(struct lynxfb_output *output, int 
blank)
 
switch (blank) {
case FB_BLANK_UNBLANK:
-   pr_info("flag = FB_BLANK_UNBLANK\n");
+   pr_debug("flag = FB_BLANK_UNBLANK\n");
dpms = SYSTEM_CTRL_DPMS_VPHP;
pps = PANEL_DISPLAY_CTRL_DATA_ENABLE;
crtdb = CRT_DISPLAY_CTRL_BLANK_OFF;
break;
case FB_BLANK_NORMAL:
-   pr_info("flag = FB_BLANK_NORMAL\n");
+   pr_debug("flag = FB_BLANK_NORMAL\n");
dpms = SYSTEM_CTRL_DPMS_VPHP;
pps = PANEL_DISPLAY_CTRL_DATA_DISABLE;
crtdb = CRT_DISPLAY_CTRL_BLANK_ON;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 14/30] staging: sm750fb: refactor setDisplayControl function

2016-02-10 Thread Mike Rapoport
The enable/disbable sequence in setDisplayControl function is duplicated
for primary and secondary display controllers. The function can be
refactored so that the common part of register access will be shared for
both controllers.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c | 131 +++
 1 file changed, 45 insertions(+), 86 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index f3f0026..ae8bb37 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -9,96 +9,55 @@
 static void setDisplayControl(int ctrl, int disp_state)
 {
/* state != 0 means turn on both timing & plane en_bit */
-   unsigned long reg, reserved;
-   int cnt;
+   unsigned long reg, val, reserved;
+   int cnt = 0;
 
-   cnt = 0;
-
-   /* Set the primary display control */
if (!ctrl) {
-   reg = PEEK32(PANEL_DISPLAY_CTRL);
-   /* Turn on/off the Panel display control */
-   if (disp_state) {
-   /* Timing should be enabled first before enabling the 
plane
-* because changing at the same time does not guarantee 
that
-* the plane will also enabled or disabled.
-*/
-   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, ENABLE);
-   POKE32(PANEL_DISPLAY_CTRL, reg);
-
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, ENABLE);
-
-   /* Added some masks to mask out the reserved bits.
-* Sometimes, the reserved bits are set/reset randomly 
when
-* writing to the PRIMARY_DISPLAY_CTRL, therefore, the 
register
-* reserved bits are needed to be masked out.
-*/
-   reserved = PANEL_DISPLAY_CTRL_RESERVED_MASK;
-
-   /* Somehow the register value on the plane is not set
-* until a few delay. Need to write
-* and read it a couple times
-*/
-   do {
-   cnt++;
-   POKE32(PANEL_DISPLAY_CTRL, reg);
-   } while ((PEEK32(PANEL_DISPLAY_CTRL) & ~reserved) !=
-   (reg & ~reserved));
-   printk("Set Panel Plane enbit:after tried %d times\n", 
cnt);
-   } else {
-   /* When turning off, there is no rule on the programming
-* sequence since whenever the clock is off, then it 
does not
-* matter whether the plane is enabled or disabled.
-* Note: Modifying the plane bit will take effect on the
-* next vertical sync. Need to find out if it is 
necessary to
-* wait for 1 vsync before modifying the timing enable 
bit.
-* */
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
-   POKE32(PANEL_DISPLAY_CTRL, reg);
-
-   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, DISABLE);
-   POKE32(PANEL_DISPLAY_CTRL, reg);
-   }
-
+   reg = PANEL_DISPLAY_CTRL;
+   reserved = PANEL_DISPLAY_CTRL_RESERVED_MASK;
} else {
-   /* Set the secondary display control */
-   reg = PEEK32(CRT_DISPLAY_CTRL);
+   reg = CRT_DISPLAY_CTRL;
+   reserved = CRT_DISPLAY_CTRL_RESERVED_MASK;
+   }
 
-   if (disp_state) {
-   /* Timing should be enabled first before enabling the 
plane because changing at the
-  same time does not guarantee that the plane will 
also enabled or disabled.
-  */
-   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, ENABLE);
-   POKE32(CRT_DISPLAY_CTRL, reg);
-
-   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, ENABLE);
-
-   /* Added some masks to mask out the reserved bits.
-* Sometimes, the reserved bits are set/reset randomly 
when
-* writing to the PRIMARY_DISPLAY_CTRL, therefore, the 
register
-* reserved bits are needed to be masked out.
-*/
-   reserved = CRT_DISPLAY_CTRL_RESERVED_MASK;
-   do {
-   cnt++;
-   POKE32(CRT_DISPLAY_CTRL, reg);
-   } while ((PEEK32(CRT_DISPLAY_CTRL) & ~reserved) !=
-   (reg & ~reserved));
-   pri

[PATCH 13/30] staging: sm750fb: merge reserved bits of PANEL/CRT_DISPLAY_CTRL registers

2016-02-10 Thread Mike Rapoport
Use single mask for reserved bits in PANEL_DISPLAY_CTRL and
CRT_DISPLAY_CTRL registers.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c | 11 ++-
 drivers/staging/sm750fb/ddk750_mode.c|  7 ++-
 drivers/staging/sm750fb/ddk750_reg.h | 29 ++---
 3 files changed, 6 insertions(+), 41 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 42da3cd0..f3f0026 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -33,9 +33,7 @@ static void setDisplayControl(int ctrl, int disp_state)
 * writing to the PRIMARY_DISPLAY_CTRL, therefore, the 
register
 * reserved bits are needed to be masked out.
 */
-   reserved = FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_1_MASK, ENABLE) |
-   FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_2_MASK, ENABLE) |
-   FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_3_MASK, ENABLE);
+   reserved = PANEL_DISPLAY_CTRL_RESERVED_MASK;
 
/* Somehow the register value on the plane is not set
 * until a few delay. Need to write
@@ -80,12 +78,7 @@ static void setDisplayControl(int ctrl, int disp_state)
 * writing to the PRIMARY_DISPLAY_CTRL, therefore, the 
register
 * reserved bits are needed to be masked out.
 */
-
-   reserved = FIELD_SET(0, CRT_DISPLAY_CTRL, 
RESERVED_1_MASK, ENABLE) |
-   FIELD_SET(0, CRT_DISPLAY_CTRL, RESERVED_2_MASK, 
ENABLE) |
-   FIELD_SET(0, CRT_DISPLAY_CTRL, RESERVED_3_MASK, 
ENABLE) |
-   FIELD_SET(0, CRT_DISPLAY_CTRL, RESERVED_4_MASK, 
ENABLE);
-
+   reserved = CRT_DISPLAY_CTRL_RESERVED_MASK;
do {
cnt++;
POKE32(CRT_DISPLAY_CTRL, reg);
diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index f81e053..a618e86 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -152,11 +152,8 @@ static int programModeRegisters(mode_parameter_t 
*pModeParam, pll_value_t *pll)
FIELD_SET(0, DISPLAY_CTRL, TIMING, ENABLE) |
FIELD_SET(0, DISPLAY_CTRL, PLANE, ENABLE);
 
-   reserved = FIELD_SET(0, PANEL_DISPLAY_CTRL, RESERVED_1_MASK,
-ENABLE) |
-FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_2_MASK, ENABLE) |
-FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_3_MASK, ENABLE) |
-FIELD_SET(0, PANEL_DISPLAY_CTRL, VSYNC, 
ACTIVE_LOW);
+   reserved = PANEL_DISPLAY_CTRL_RESERVED_MASK |
+   FIELD_SET(0, PANEL_DISPLAY_CTRL, VSYNC, ACTIVE_LOW);
 
reg = (PEEK32(PANEL_DISPLAY_CTRL) & ~reserved)
& FIELD_CLEAR(DISPLAY_CTRL, CLOCK_PHASE)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 4d66f61..dac087f 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -782,9 +782,7 @@
 
 
 #define PANEL_DISPLAY_CTRL0x08
-#define PANEL_DISPLAY_CTRL_RESERVED_1_MASK31:30
-#define PANEL_DISPLAY_CTRL_RESERVED_1_MASK_DISABLE0
-#define PANEL_DISPLAY_CTRL_RESERVED_1_MASK_ENABLE 3
+#define PANEL_DISPLAY_CTRL_RESERVED_MASK  0xc0f08000
 #define PANEL_DISPLAY_CTRL_SELECT 29:28
 #define PANEL_DISPLAY_CTRL_SELECT_PANEL   0
 #define PANEL_DISPLAY_CTRL_SELECT_VGA 1
@@ -801,9 +799,6 @@
 #define PANEL_DISPLAY_CTRL_FPVDDEN24:24
 #define PANEL_DISPLAY_CTRL_FPVDDEN_LOW0
 #define PANEL_DISPLAY_CTRL_FPVDDEN_HIGH   1
-#define PANEL_DISPLAY_CTRL_RESERVED_2_MASK23:20
-#define PANEL_DISPLAY_CTRL_RESERVED_2_MASK_DISABLE0
-#define PANEL_DISPLAY_CTRL_RESERVED_2_MASK_ENABLE 15
 
 #define PANEL_DISPLAY_CTRL_TFT_DISP 19:18
 #define PANEL_DISPLAY_CTRL_TFT_DISP_24 0
@@ -822,9 +817,6 @@
 #define PANEL_DISPLAY_CTRL_FIFO_3 1
 #define PANEL_DISPLAY_CTRL_FIFO_7 2
 #define PANEL_DISPLAY_CTRL_FIFO_113
-#define PANEL_DISPLAY_CTRL_RESERVED_3_MASK15:15
-#define PANEL_DISPLAY_CTRL_RESERVED_3_MASK_DISABLE0
-#define PANEL_DISPLAY_CTRL_RESERVED_3_MASK_ENABLE 1
 #define DISPLAY_CTRL_CLOCK_PHASE  14:14
 #define DISPLAY_CTRL_CLOCK_PHASE_ACTIVE_HIGH  0
 #define DISPLAY_CTRL_CLOCK_PHASE_ACTIVE_LOW

[PATCH 09/30] staging: sm750fb: change definition of VGA_CONFIGURATION multi-bit field

2016-02-10 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit field of
VGA_CONFIGURATION register.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index e873a10..d1e7fc4 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -547,7 +547,7 @@
 #define MXCLK_PLL_CTRL0x70
 
 #define VGA_CONFIGURATION 0x88
-#define VGA_CONFIGURATION_USER_DEFINE 5:4
+#define VGA_CONFIGURATION_USER_DEFINE_MASK(0x3 << 4)
 #define VGA_CONFIGURATION_PLL BIT(2)
 #define VGA_CONFIGURATION_MODEBIT(1)
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/30] staging: sm750fb: setDisplayControl: rename local vairables

2016-02-10 Thread Mike Rapoport
Remove HungarianCamelCase notation.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c | 50 
 1 file changed, 25 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index a82253c..dc7060e 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -9,25 +9,25 @@
 static void setDisplayControl(int ctrl, int disp_state)
 {
/* state != 0 means turn on both timing & plane en_bit */
-   unsigned long ulDisplayCtrlReg, ulReservedBits;
+   unsigned long reg, reserved;
int cnt;
 
cnt = 0;
 
/* Set the primary display control */
if (!ctrl) {
-   ulDisplayCtrlReg = PEEK32(PANEL_DISPLAY_CTRL);
+   reg = PEEK32(PANEL_DISPLAY_CTRL);
/* Turn on/off the Panel display control */
if (disp_state) {
/* Timing should be enabled first before enabling the 
plane
 * because changing at the same time does not guarantee 
that
 * the plane will also enabled or disabled.
 */
-   ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
+   reg = FIELD_SET(reg,

PANEL_DISPLAY_CTRL, TIMING, ENABLE);
-   POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
+   POKE32(PANEL_DISPLAY_CTRL, reg);
 
-   ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
+   reg = FIELD_SET(reg,

PANEL_DISPLAY_CTRL, PLANE, ENABLE);
 
/* Added some masks to mask out the reserved bits.
@@ -35,7 +35,7 @@ static void setDisplayControl(int ctrl, int disp_state)
 * writing to the PRIMARY_DISPLAY_CTRL, therefore, the 
register
 * reserved bits are needed to be masked out.
 */
-   ulReservedBits = FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_1_MASK, ENABLE) |
+   reserved = FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_1_MASK, ENABLE) |
FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_2_MASK, ENABLE) |
FIELD_SET(0, PANEL_DISPLAY_CTRL, 
RESERVED_3_MASK, ENABLE);
 
@@ -45,9 +45,9 @@ static void setDisplayControl(int ctrl, int disp_state)
 */
do {
cnt++;
-   POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
-   } while ((PEEK32(PANEL_DISPLAY_CTRL) & ~ulReservedBits) 
!=
-   (ulDisplayCtrlReg & ~ulReservedBits));
+   POKE32(PANEL_DISPLAY_CTRL, reg);
+   } while ((PEEK32(PANEL_DISPLAY_CTRL) & ~reserved) !=
+   (reg & ~reserved));
printk("Set Panel Plane enbit:after tried %d times\n", 
cnt);
} else {
/* When turning off, there is no rule on the programming
@@ -57,28 +57,28 @@ static void setDisplayControl(int ctrl, int disp_state)
 * next vertical sync. Need to find out if it is 
necessary to
 * wait for 1 vsync before modifying the timing enable 
bit.
 * */
-   ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
+   reg = FIELD_SET(reg,

PANEL_DISPLAY_CTRL, PLANE, DISABLE);
-   POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
+   POKE32(PANEL_DISPLAY_CTRL, reg);
 
-   ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
+   reg = FIELD_SET(reg,

PANEL_DISPLAY_CTRL, TIMING, DISABLE);
-   POKE32(PANEL_DISPLAY_CTRL, ulDisplayCtrlReg);
+   POKE32(PANEL_DISPLAY_CTRL, reg);
}
 
} else {
/* Set the secondary display control */
-   ulDisplayCtrlReg = PEEK32(CRT_DISPLAY_CTRL);
+   reg = PEEK32(CRT_DISPLAY_CTRL);
 
if (disp_state) {
/* Timing should be enabled first before enabling the 
plane because changing at the
   same time does not guarantee that the plane will 
also enabled or disabled.
   */
-   ulDisplayCtrlReg = FIELD_SET(ulDisplayCtrlReg,
+   reg = FIELD_SET(reg,

CR

[PATCH 04/30] staging: sm750fb: use PLL_CTRL_POWER defines for CRT_PLL_CTRL

2016-02-10 Thread Mike Rapoport
Use PLL_CTRL_POWER definitions for CRT_PLL_CTRL register access

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 514f909..5d1f9a5 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -149,8 +149,8 @@ static void waitNextVerticalSync(int ctrl, int delay)
 
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
-   if ((FIELD_GET(PEEK32(CRT_PLL_CTRL), CRT_PLL_CTRL, POWER) ==
-CRT_PLL_CTRL_POWER_OFF) ||
+   if ((FIELD_GET(PEEK32(CRT_PLL_CTRL), PLL_CTRL, POWER) ==
+PLL_CTRL_POWER_OFF) ||
(FIELD_GET(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, 
TIMING) ==
 CRT_DISPLAY_CTRL_TIMING_DISABLE)) {
return;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/30] staging: sm750fb: share common bits in display control registers

2016-02-10 Thread Mike Rapoport
The display control registers for primary and secondary display share some
of the bits and those bits can be defined in a single place and then used
for manipulations of the relevant registers.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c|  6 +--
 drivers/staging/sm750fb/ddk750_display.c | 34 +++--
 drivers/staging/sm750fb/ddk750_mode.c| 42 +++--
 drivers/staging/sm750fb/ddk750_reg.h | 63 +---
 4 files changed, 58 insertions(+), 87 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 2d1128f..0031e32 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -249,17 +249,17 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 
/* Disable Overlay, if a former application left it on */
reg = PEEK32(VIDEO_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, VIDEO_DISPLAY_CTRL, PLANE, DISABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
POKE32(VIDEO_DISPLAY_CTRL, reg);
 
/* Disable video alpha, if a former application left it on */
reg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, VIDEO_ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
POKE32(VIDEO_ALPHA_DISPLAY_CTRL, reg);
 
/* Disable alpha plane, if a former application left it on */
reg = PEEK32(ALPHA_DISPLAY_CTRL);
-   reg = FIELD_SET(reg, ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
POKE32(ALPHA_DISPLAY_CTRL, reg);
 
/* Disable DMA Channel, if a former application left it on */
diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index dc7060e..42da3cd0 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -23,12 +23,10 @@ static void setDisplayControl(int ctrl, int disp_state)
 * because changing at the same time does not guarantee 
that
 * the plane will also enabled or disabled.
 */
-   reg = FIELD_SET(reg,
-   
PANEL_DISPLAY_CTRL, TIMING, ENABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, ENABLE);
POKE32(PANEL_DISPLAY_CTRL, reg);
 
-   reg = FIELD_SET(reg,
-   
PANEL_DISPLAY_CTRL, PLANE, ENABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, ENABLE);
 
/* Added some masks to mask out the reserved bits.
 * Sometimes, the reserved bits are set/reset randomly 
when
@@ -57,12 +55,10 @@ static void setDisplayControl(int ctrl, int disp_state)
 * next vertical sync. Need to find out if it is 
necessary to
 * wait for 1 vsync before modifying the timing enable 
bit.
 * */
-   reg = FIELD_SET(reg,
-   
PANEL_DISPLAY_CTRL, PLANE, DISABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, DISABLE);
POKE32(PANEL_DISPLAY_CTRL, reg);
 
-   reg = FIELD_SET(reg,
-   
PANEL_DISPLAY_CTRL, TIMING, DISABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, DISABLE);
POKE32(PANEL_DISPLAY_CTRL, reg);
}
 
@@ -74,12 +70,10 @@ static void setDisplayControl(int ctrl, int disp_state)
/* Timing should be enabled first before enabling the 
plane because changing at the
   same time does not guarantee that the plane will 
also enabled or disabled.
   */
-   reg = FIELD_SET(reg,
-   
CRT_DISPLAY_CTRL, TIMING, ENABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, TIMING, ENABLE);
POKE32(CRT_DISPLAY_CTRL, reg);
 
-   reg = FIELD_SET(reg,
-   
CRT_DISPLAY_CTRL, PLANE, ENABLE);
+   reg = FIELD_SET(reg, DISPLAY_CTRL, PLANE, ENABLE);
 
/* Added some masks to mask out the reserved bits.
 * Sometimes, the reserved bits are set/reset randomly 
when
@@ -106,12 +100,10 @@ static void setDisplayControl(int ctrl, int disp_state)
 * vertical sync. Need to

[PATCH 05/30] staging: sm750fb: use BIT macro for PLL_CTRL single-bit fields

2016-02-10 Thread Mike Rapoport
Replace complex defintion of PLL_CTRL fields with BIT() macro and use
open-coded implementation for PLL register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c|  5 +
 drivers/staging/sm750fb/ddk750_display.c |  6 ++
 drivers/staging/sm750fb/ddk750_reg.h | 12 +++-
 3 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 277e5c5..467b858 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -363,10 +363,7 @@ unsigned int formatPllReg(pll_value_t *pPLL)
 * register. On returning a 32 bit number, the value can be
 * applied to any PLL in the calling function.
 */
-   reg =
-   FIELD_SET(0, PLL_CTRL, BYPASS, OFF)
-   | FIELD_SET(0, PLL_CTRL, POWER,  ON)
-   | FIELD_SET(0, PLL_CTRL, INPUT,  OSC)
+   reg = PLL_CTRL_POWER
 #ifndef VALIDATION_CHIP
| FIELD_VALUE(0, PLL_CTRL, POD,pPLL->POD)
 #endif
diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 5d1f9a5..a82253c 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -126,8 +126,7 @@ static void waitNextVerticalSync(int ctrl, int delay)
 
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
-   if ((FIELD_GET(PEEK32(PANEL_PLL_CTRL), PLL_CTRL, POWER) ==
-PLL_CTRL_POWER_OFF) ||
+   if (!(PEEK32(PANEL_PLL_CTRL) & PLL_CTRL_POWER) ||
(FIELD_GET(PEEK32(PANEL_DISPLAY_CTRL), 
PANEL_DISPLAY_CTRL, TIMING) ==
 PANEL_DISPLAY_CTRL_TIMING_DISABLE)) {
return;
@@ -149,8 +148,7 @@ static void waitNextVerticalSync(int ctrl, int delay)
 
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
-   if ((FIELD_GET(PEEK32(CRT_PLL_CTRL), PLL_CTRL, POWER) ==
-PLL_CTRL_POWER_OFF) ||
+   if (!(PEEK32(CRT_PLL_CTRL) & PLL_CTRL_POWER) ||
(FIELD_GET(PEEK32(CRT_DISPLAY_CTRL), CRT_DISPLAY_CTRL, 
TIMING) ==
 CRT_DISPLAY_CTRL_TIMING_DISABLE)) {
return;
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 1ad8d55..d13af39 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -517,15 +517,9 @@
 #define PLL_CLK_COUNT_COUNTER 15:0
 
 #define PANEL_PLL_CTRL0x5C
-#define PLL_CTRL_BYPASS   18:18
-#define PLL_CTRL_BYPASS_OFF   0
-#define PLL_CTRL_BYPASS_ON1
-#define PLL_CTRL_POWER17:17
-#define PLL_CTRL_POWER_OFF0
-#define PLL_CTRL_POWER_ON 1
-#define PLL_CTRL_INPUT16:16
-#define PLL_CTRL_INPUT_OSC0
-#define PLL_CTRL_INPUT_TESTCLK1
+#define PLL_CTRL_BYPASS   BIT(18)
+#define PLL_CTRL_POWERBIT(17)
+#define PLL_CTRL_INPUTBIT(16)
 #ifdef VALIDATION_CHIP
 #define PLL_CTRL_OD   15:14
 #else
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 07/30] staging: sm750fb: drop redundant defines for PLL_CTRL fields

2016-02-10 Thread Mike Rapoport
The PLL_CTRL fields have common defines for several PLL control
registers and re-defining the same values per register is not needed.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 64 
 1 file changed, 64 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 52d270d..ac3cb36 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -535,80 +535,16 @@
 #define PLL_CTRL_M_MASK   0xff
 
 #define CRT_PLL_CTRL  0x60
-#define CRT_PLL_CTRL_BYPASS   18:18
-#define CRT_PLL_CTRL_BYPASS_OFF   0
-#define CRT_PLL_CTRL_BYPASS_ON1
-#define CRT_PLL_CTRL_POWER17:17
-#define CRT_PLL_CTRL_POWER_OFF0
-#define CRT_PLL_CTRL_POWER_ON 1
-#define CRT_PLL_CTRL_INPUT16:16
-#define CRT_PLL_CTRL_INPUT_OSC0
-#define CRT_PLL_CTRL_INPUT_TESTCLK1
-#ifdef VALIDATION_CHIP
-#define CRT_PLL_CTRL_OD   15:14
-#else
-#define CRT_PLL_CTRL_POD  15:14
-#define CRT_PLL_CTRL_OD   13:12
-#endif
-#define CRT_PLL_CTRL_N11:8
-#define CRT_PLL_CTRL_M7:0
 
 #define VGA_PLL0_CTRL 0x64
-#define VGA_PLL0_CTRL_BYPASS  18:18
-#define VGA_PLL0_CTRL_BYPASS_OFF  0
-#define VGA_PLL0_CTRL_BYPASS_ON   1
-#define VGA_PLL0_CTRL_POWER   17:17
-#define VGA_PLL0_CTRL_POWER_OFF   0
-#define VGA_PLL0_CTRL_POWER_ON1
-#define VGA_PLL0_CTRL_INPUT   16:16
-#define VGA_PLL0_CTRL_INPUT_OSC   0
-#define VGA_PLL0_CTRL_INPUT_TESTCLK   1
-#ifdef VALIDATION_CHIP
-#define VGA_PLL0_CTRL_OD  15:14
-#else
-#define VGA_PLL0_CTRL_POD 15:14
-#define VGA_PLL0_CTRL_OD  13:12
-#endif
-#define VGA_PLL0_CTRL_N   11:8
-#define VGA_PLL0_CTRL_M   7:0
 
 #define VGA_PLL1_CTRL 0x68
-#define VGA_PLL1_CTRL_BYPASS  18:18
-#define VGA_PLL1_CTRL_BYPASS_OFF  0
-#define VGA_PLL1_CTRL_BYPASS_ON   1
-#define VGA_PLL1_CTRL_POWER   17:17
-#define VGA_PLL1_CTRL_POWER_OFF   0
-#define VGA_PLL1_CTRL_POWER_ON1
-#define VGA_PLL1_CTRL_INPUT   16:16
-#define VGA_PLL1_CTRL_INPUT_OSC   0
-#define VGA_PLL1_CTRL_INPUT_TESTCLK   1
-#ifdef VALIDATION_CHIP
-#define VGA_PLL1_CTRL_OD  15:14
-#else
-#define VGA_PLL1_CTRL_POD 15:14
-#define VGA_PLL1_CTRL_OD  13:12
-#endif
-#define VGA_PLL1_CTRL_N   11:8
-#define VGA_PLL1_CTRL_M   7:0
 
 #define SCRATCH_DATA  0x6c
 
 #ifndef VALIDATION_CHIP
 
 #define MXCLK_PLL_CTRL0x70
-#define MXCLK_PLL_CTRL_BYPASS 18:18
-#define MXCLK_PLL_CTRL_BYPASS_OFF 0
-#define MXCLK_PLL_CTRL_BYPASS_ON  1
-#define MXCLK_PLL_CTRL_POWER  17:17
-#define MXCLK_PLL_CTRL_POWER_OFF  0
-#define MXCLK_PLL_CTRL_POWER_ON   1
-#define MXCLK_PLL_CTRL_INPUT  16:16
-#define MXCLK_PLL_CTRL_INPUT_OSC  0
-#define MXCLK_PLL_CTRL_INPUT_TESTCLK  1
-#define MXCLK_PLL_CTRL_POD15:14
-#define MXCLK_PLL_CTRL_OD 13:12
-#define MXCLK_PLL_CTRL_N  11:8
-#define MXCLK_PLL_CTRL_M  7:0
 
 #define VGA_CONFIGURATION 0x88
 #define VGA_CONFIGURATION_USER_DEFINE 5:4
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/30] staging: sm750fb: use BIT macro for VGA_CONFIGURATION single-bit fields

2016-02-10 Thread Mike Rapoport
Replace complex defintion of VGA_CONFIGURATION register fields with BIT()
macro and use open-coded implementation for VGA_CONFIGURATION
manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 3 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 8 ++--
 2 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index d813cc6..2d1128f 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -211,8 +211,7 @@ int ddk750_initHw(initchip_param_t *pInitParam)
if (getChipType() != SM750LE) {
/*  set panel pll and graphic mode via mmio_88 */
reg = PEEK32(VGA_CONFIGURATION);
-   reg = FIELD_SET(reg, VGA_CONFIGURATION, PLL, PANEL);
-   reg = FIELD_SET(reg, VGA_CONFIGURATION, MODE, GRAPHIC);
+   reg |= (VGA_CONFIGURATION_PLL | VGA_CONFIGURATION_MODE);
POKE32(VGA_CONFIGURATION, reg);
} else {
 #if defined(__i386__) || defined(__x86_64__)
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index ac3cb36..e873a10 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -548,12 +548,8 @@
 
 #define VGA_CONFIGURATION 0x88
 #define VGA_CONFIGURATION_USER_DEFINE 5:4
-#define VGA_CONFIGURATION_PLL 2:2
-#define VGA_CONFIGURATION_PLL_VGA 0
-#define VGA_CONFIGURATION_PLL_PANEL   1
-#define VGA_CONFIGURATION_MODE1:1
-#define VGA_CONFIGURATION_MODE_TEXT   0
-#define VGA_CONFIGURATION_MODE_GRAPHIC1
+#define VGA_CONFIGURATION_PLL BIT(2)
+#define VGA_CONFIGURATION_MODEBIT(1)
 
 #endif
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 06/30] staging: sm750fb: change defintion of PANEL_PLL_CTRL multi-bit fields

2016-02-10 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit field of
PANEL_PLL_CTRL register and use open-coded implementation for register
manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 24 +++-
 drivers/staging/sm750fb/ddk750_reg.h  | 15 ++-
 2 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 467b858..d813cc6 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -36,10 +36,10 @@ static unsigned int get_mxclk_freq(void)
return MHz(130);
 
pll_reg = PEEK32(MXCLK_PLL_CTRL);
-   M = FIELD_GET(pll_reg, PLL_CTRL, M);
-   N = FIELD_GET(pll_reg, PLL_CTRL, N);
-   OD = FIELD_GET(pll_reg, PLL_CTRL, OD);
-   POD = FIELD_GET(pll_reg, PLL_CTRL, POD);
+   M = (pll_reg & PLL_CTRL_M_MASK) >> PLL_CTRL_M_SHIFT;
+   N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_M_SHIFT;
+   OD = (pll_reg & PLL_CTRL_OD_MASK) >> PLL_CTRL_OD_SHIFT;
+   POD = (pll_reg & PLL_CTRL_POD_MASK) >> PLL_CTRL_POD_SHIFT;
 
return DEFAULT_INPUT_CLOCK * M / N / (1 << OD) / (1 << POD);
 }
@@ -355,6 +355,12 @@ unsigned int calcPllValue(unsigned int request_orig, 
pll_value_t *pll)
 
 unsigned int formatPllReg(pll_value_t *pPLL)
 {
+#ifndef VALIDATION_CHIP
+   unsigned int POD = pPLL->POD;
+#endif
+   unsigned int OD = pPLL->OD;
+   unsigned int M = pPLL->M;
+   unsigned int N = pPLL->N;
unsigned int reg = 0;
 
/*
@@ -363,13 +369,13 @@ unsigned int formatPllReg(pll_value_t *pPLL)
 * register. On returning a 32 bit number, the value can be
 * applied to any PLL in the calling function.
 */
-   reg = PLL_CTRL_POWER
+   reg = PLL_CTRL_POWER |
 #ifndef VALIDATION_CHIP
-   | FIELD_VALUE(0, PLL_CTRL, POD,pPLL->POD)
+   ((POD << PLL_CTRL_POD_SHIFT) & PLL_CTRL_POD_MASK) |
 #endif
-   | FIELD_VALUE(0, PLL_CTRL, OD, pPLL->OD)
-   | FIELD_VALUE(0, PLL_CTRL, N,  pPLL->N)
-   | FIELD_VALUE(0, PLL_CTRL, M,  pPLL->M);
+   ((OD << PLL_CTRL_OD_SHIFT) & PLL_CTRL_OD_MASK) |
+   ((N << PLL_CTRL_N_SHIFT) & PLL_CTRL_N_MASK) |
+   ((M << PLL_CTRL_M_SHIFT) & PLL_CTRL_M_MASK);
 
return reg;
 }
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d13af39..52d270d 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -521,13 +521,18 @@
 #define PLL_CTRL_POWERBIT(17)
 #define PLL_CTRL_INPUTBIT(16)
 #ifdef VALIDATION_CHIP
-#define PLL_CTRL_OD   15:14
+#define PLL_CTRL_OD_SHIFT 14
+#define PLL_CTRL_OD_MASK  (0x3 << 14)
 #else
-#define PLL_CTRL_POD  15:14
-#define PLL_CTRL_OD   13:12
+#define PLL_CTRL_POD_SHIFT14
+#define PLL_CTRL_POD_MASK (0x3 << 14)
+#define PLL_CTRL_OD_SHIFT 12
+#define PLL_CTRL_OD_MASK  (0x3 << 12)
 #endif
-#define PLL_CTRL_N11:8
-#define PLL_CTRL_M7:0
+#define PLL_CTRL_N_SHIFT  8
+#define PLL_CTRL_N_MASK   (0xf << 8)
+#define PLL_CTRL_M_SHIFT  0
+#define PLL_CTRL_M_MASK   0xff
 
 #define CRT_PLL_CTRL  0x60
 #define CRT_PLL_CTRL_BYPASS   18:18
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/30] staging: sm750fb: rename PANEL_PLL_CTRL_* fields to PLL_CTRL_*

2016-02-10 Thread Mike Rapoport
Several PLL control registers have the same layout and therefore the
field definitions may be shared for those registers. Renaming
definitions of PANEL_PLL_CTRL_* fields to more generic PLL_CTRL_* will
allow reusing these definitions for other PLL control registers.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c| 22 +++---
 drivers/staging/sm750fb/ddk750_display.c |  4 ++--
 drivers/staging/sm750fb/ddk750_reg.h | 28 ++--
 3 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 940c43f..277e5c5 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -36,10 +36,10 @@ static unsigned int get_mxclk_freq(void)
return MHz(130);
 
pll_reg = PEEK32(MXCLK_PLL_CTRL);
-   M = FIELD_GET(pll_reg, PANEL_PLL_CTRL, M);
-   N = FIELD_GET(pll_reg, PANEL_PLL_CTRL, N);
-   OD = FIELD_GET(pll_reg, PANEL_PLL_CTRL, OD);
-   POD = FIELD_GET(pll_reg, PANEL_PLL_CTRL, POD);
+   M = FIELD_GET(pll_reg, PLL_CTRL, M);
+   N = FIELD_GET(pll_reg, PLL_CTRL, N);
+   OD = FIELD_GET(pll_reg, PLL_CTRL, OD);
+   POD = FIELD_GET(pll_reg, PLL_CTRL, POD);
 
return DEFAULT_INPUT_CLOCK * M / N / (1 << OD) / (1 << POD);
 }
@@ -364,15 +364,15 @@ unsigned int formatPllReg(pll_value_t *pPLL)
 * applied to any PLL in the calling function.
 */
reg =
-   FIELD_SET(0, PANEL_PLL_CTRL, BYPASS, OFF)
-   | FIELD_SET(0, PANEL_PLL_CTRL, POWER,  ON)
-   | FIELD_SET(0, PANEL_PLL_CTRL, INPUT,  OSC)
+   FIELD_SET(0, PLL_CTRL, BYPASS, OFF)
+   | FIELD_SET(0, PLL_CTRL, POWER,  ON)
+   | FIELD_SET(0, PLL_CTRL, INPUT,  OSC)
 #ifndef VALIDATION_CHIP
-   | FIELD_VALUE(0, PANEL_PLL_CTRL, POD,pPLL->POD)
+   | FIELD_VALUE(0, PLL_CTRL, POD,pPLL->POD)
 #endif
-   | FIELD_VALUE(0, PANEL_PLL_CTRL, OD, pPLL->OD)
-   | FIELD_VALUE(0, PANEL_PLL_CTRL, N,  pPLL->N)
-   | FIELD_VALUE(0, PANEL_PLL_CTRL, M,  pPLL->M);
+   | FIELD_VALUE(0, PLL_CTRL, OD, pPLL->OD)
+   | FIELD_VALUE(0, PLL_CTRL, N,  pPLL->N)
+   | FIELD_VALUE(0, PLL_CTRL, M,  pPLL->M);
 
return reg;
 }
diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 1a29ae0..514f909 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -126,8 +126,8 @@ static void waitNextVerticalSync(int ctrl, int delay)
 
/* Do not wait when the Primary PLL is off or display control 
is already off.
   This will prevent the software to wait forever. */
-   if ((FIELD_GET(PEEK32(PANEL_PLL_CTRL), PANEL_PLL_CTRL, POWER) ==
-PANEL_PLL_CTRL_POWER_OFF) ||
+   if ((FIELD_GET(PEEK32(PANEL_PLL_CTRL), PLL_CTRL, POWER) ==
+PLL_CTRL_POWER_OFF) ||
(FIELD_GET(PEEK32(PANEL_DISPLAY_CTRL), 
PANEL_DISPLAY_CTRL, TIMING) ==
 PANEL_DISPLAY_CTRL_TIMING_DISABLE)) {
return;
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index a90b56f..1ad8d55 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -517,23 +517,23 @@
 #define PLL_CLK_COUNT_COUNTER 15:0
 
 #define PANEL_PLL_CTRL0x5C
-#define PANEL_PLL_CTRL_BYPASS 18:18
-#define PANEL_PLL_CTRL_BYPASS_OFF 0
-#define PANEL_PLL_CTRL_BYPASS_ON  1
-#define PANEL_PLL_CTRL_POWER  17:17
-#define PANEL_PLL_CTRL_POWER_OFF  0
-#define PANEL_PLL_CTRL_POWER_ON   1
-#define PANEL_PLL_CTRL_INPUT  16:16
-#define PANEL_PLL_CTRL_INPUT_OSC  0
-#define PANEL_PLL_CTRL_INPUT_TESTCLK  1
+#define PLL_CTRL_BYPASS   18:18
+#define PLL_CTRL_BYPASS_OFF   0
+#define PLL_CTRL_BYPASS_ON1
+#define PLL_CTRL_POWER17:17
+#define PLL_CTRL_POWER_OFF0
+#define PLL_CTRL_POWER_ON 1
+#define PLL_CTRL_INPUT16:16
+#define PLL_CTRL_INPUT_OSC0
+#define PLL_CTRL_INPUT_TESTCLK1
 #ifdef VALIDATION_CHIP
-#define PANEL_PLL_CTRL_OD 15:14
+#define PLL_CTRL_OD   15:14
 #else
-#define PANEL_PLL_CTRL_POD15:14
-#define PANEL_PLL_CTRL_OD 13:12
+#define PLL_CTRL_POD

[PATCH 02/30] staging: sm750fb: formatPllReg: fix comment formatting

2016-02-10 Thread Mike Rapoport
Fix comment alignment and formatting to follow kernel coding style

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 6ab26a9..940c43f 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -357,10 +357,12 @@ unsigned int formatPllReg(pll_value_t *pPLL)
 {
unsigned int reg = 0;
 
-/* Note that all PLL's have the same format. Here, we just use Panel PLL 
parameter
-   to work out the bit fields in the register.
-   On returning a 32 bit number, the value can be applied to any PLL in 
the calling function.
-*/
+   /*
+* Note that all PLL's have the same format. Here, we just use
+* Panel PLL parameter to work out the bit fields in the
+* register. On returning a 32 bit number, the value can be
+* applied to any PLL in the calling function.
+*/
reg =
FIELD_SET(0, PANEL_PLL_CTRL, BYPASS, OFF)
| FIELD_SET(0, PANEL_PLL_CTRL, POWER,  ON)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 01/30] staging: sm750fb: formatPllReg: rename ulPllReg to reg

2016-02-10 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index a9a8884..6ab26a9 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -355,13 +355,13 @@ unsigned int calcPllValue(unsigned int request_orig, 
pll_value_t *pll)
 
 unsigned int formatPllReg(pll_value_t *pPLL)
 {
-   unsigned int ulPllReg = 0;
+   unsigned int reg = 0;
 
 /* Note that all PLL's have the same format. Here, we just use Panel PLL 
parameter
to work out the bit fields in the register.
On returning a 32 bit number, the value can be applied to any PLL in 
the calling function.
 */
-   ulPllReg =
+   reg =
FIELD_SET(0, PANEL_PLL_CTRL, BYPASS, OFF)
| FIELD_SET(0, PANEL_PLL_CTRL, POWER,  ON)
| FIELD_SET(0, PANEL_PLL_CTRL, INPUT,  OSC)
@@ -372,7 +372,7 @@ unsigned int formatPllReg(pll_value_t *pPLL)
| FIELD_VALUE(0, PANEL_PLL_CTRL, N,  pPLL->N)
| FIELD_VALUE(0, PANEL_PLL_CTRL, M,  pPLL->M);
 
-   return ulPllReg;
+   return reg;
 }
 
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 17/18] staging: sm750fb: use BIT macro for POWER_MODE_CTRL single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of POWER_MODE_CTRL register fields with BIT()
macro and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_power.c | 10 --
 drivers/staging/sm750fb/ddk750_reg.h   | 12 +++-
 2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 4177025..4959482 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -60,17 +60,15 @@ void setPowerMode(unsigned int powerMode)
 
/* Set up other fields in Power Control Register */
if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
-   control_value =
+   control_value &= ~POWER_MODE_CTRL_OSC_INPUT;
 #ifdef VALIDATION_CHIP
-   FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, OFF) |
+   control_value &= ~POWER_MODE_CTRL_336CLK;
 #endif
-   FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  OFF);
} else {
-   control_value =
+   control_value |= POWER_MODE_CTRL_OSC_INPUT;
 #ifdef VALIDATION_CHIP
-   FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, ON) |
+   control_value |= POWER_MODE_CTRL_336CLK;
 #endif
-   FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  ON);
}
 
/* Program new power mode. */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d97859a..bc49b44 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -497,16 +497,10 @@
 
 #define POWER_MODE_CTRL   0x4C
 #ifdef VALIDATION_CHIP
-#define POWER_MODE_CTRL_336CLK4:4
-#define POWER_MODE_CTRL_336CLK_OFF0
-#define POWER_MODE_CTRL_336CLK_ON 1
+#define POWER_MODE_CTRL_336CLKBIT(4)
 #endif
-#define POWER_MODE_CTRL_OSC_INPUT 3:3
-#define POWER_MODE_CTRL_OSC_INPUT_OFF 0
-#define POWER_MODE_CTRL_OSC_INPUT_ON  1
-#define POWER_MODE_CTRL_ACPI  2:2
-#define POWER_MODE_CTRL_ACPI_OFF  0
-#define POWER_MODE_CTRL_ACPI_ON   1
+#define POWER_MODE_CTRL_OSC_INPUT BIT(3)
+#define POWER_MODE_CTRL_ACPI  BIT(2)
 #define POWER_MODE_CTRL_MODE  1:0
 #define POWER_MODE_CTRL_MODE_MODE00
 #define POWER_MODE_CTRL_MODE_MODE11
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 18/18] staging: sm750fb: change definition of POWER_MODE_CTRL multi-bit field

2016-01-17 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit field of
POWER_MODE_CTRL register and use open-coded implementation for register
manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_power.c | 13 +
 drivers/staging/sm750fb/ddk750_reg.h   |  8 
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 4959482..c85dfc5 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -21,7 +21,7 @@ static unsigned int getPowerMode(void)
 {
if (getChipType() == SM750LE)
return 0;
-   return FIELD_GET(PEEK32(POWER_MODE_CTRL), POWER_MODE_CTRL, MODE);
+   return PEEK32(POWER_MODE_CTRL) & POWER_MODE_CTRL_MODE_MASK;
 }
 
 
@@ -33,25 +33,22 @@ void setPowerMode(unsigned int powerMode)
 {
unsigned int control_value = 0;
 
-   control_value = PEEK32(POWER_MODE_CTRL);
+   control_value = PEEK32(POWER_MODE_CTRL) & ~POWER_MODE_CTRL_MODE_MASK;
 
if (getChipType() == SM750LE)
return;
 
switch (powerMode) {
case POWER_MODE_CTRL_MODE_MODE0:
-   control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
- MODE0);
+   control_value |= POWER_MODE_CTRL_MODE_MODE0;
break;
 
case POWER_MODE_CTRL_MODE_MODE1:
-   control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
- MODE1);
+   control_value |= POWER_MODE_CTRL_MODE_MODE1;
break;
 
case POWER_MODE_CTRL_MODE_SLEEP:
-   control_value = FIELD_SET(control_value, POWER_MODE_CTRL, MODE,
- SLEEP);
+   control_value |= POWER_MODE_CTRL_MODE_SLEEP;
break;
 
default:
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index bc49b44..a90b56f 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -501,10 +501,10 @@
 #endif
 #define POWER_MODE_CTRL_OSC_INPUT BIT(3)
 #define POWER_MODE_CTRL_ACPI  BIT(2)
-#define POWER_MODE_CTRL_MODE  1:0
-#define POWER_MODE_CTRL_MODE_MODE00
-#define POWER_MODE_CTRL_MODE_MODE11
-#define POWER_MODE_CTRL_MODE_SLEEP2
+#define POWER_MODE_CTRL_MODE_MASK (0x3 << 0)
+#define POWER_MODE_CTRL_MODE_MODE0(0x0 << 0)
+#define POWER_MODE_CTRL_MODE_MODE1(0x1 << 0)
+#define POWER_MODE_CTRL_MODE_SLEEP(0x2 << 0)
 
 #define PCI_MASTER_BASE   0x50
 #define PCI_MASTER_BASE_ADDRESS   7:0
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 12/18] staging: sm750fb: use BIT macro for CURRENT_GATE single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of CURRENT_GATE register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c  |  3 +--
 drivers/staging/sm750fb/ddk750_power.c | 18 +++---
 drivers/staging/sm750fb/ddk750_reg.h   | 44 +-
 3 files changed, 20 insertions(+), 45 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 36c2e50..b11231c 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -205,8 +205,7 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 
/* Enable display power gate & LOCALMEM power gate*/
reg = PEEK32(CURRENT_GATE);
-   reg = FIELD_SET(reg, CURRENT_GATE, DISPLAY, ON);
-   reg = FIELD_SET(reg, CURRENT_GATE, LOCALMEM, ON);
+   reg |= (CURRENT_GATE_DISPLAY | CURRENT_GATE_LOCALMEM);
setCurrentGate(reg);
 
if (getChipType() != SM750LE) {
diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 1c5001c..4177025 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -112,11 +112,9 @@ void enable2DEngine(unsigned int enable)
 
gate = PEEK32(CURRENT_GATE);
if (enable) {
-   gate = FIELD_SET(gate, CURRENT_GATE, DE,  ON);
-   gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
+   gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
} else {
-   gate = FIELD_SET(gate, CURRENT_GATE, DE,  OFF);
-   gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
+   gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
}
 
setCurrentGate(gate);
@@ -129,9 +127,9 @@ void enableDMA(unsigned int enable)
/* Enable DMA Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
+   gate |= CURRENT_GATE_DMA;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
+   gate &= ~CURRENT_GATE_DMA;
 
setCurrentGate(gate);
 }
@@ -146,9 +144,9 @@ void enableGPIO(unsigned int enable)
/* Enable GPIO Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
+   gate |= CURRENT_GATE_GPIO;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
+   gate &= ~CURRENT_GATE_GPIO;
 
setCurrentGate(gate);
 }
@@ -163,9 +161,9 @@ void enableI2C(unsigned int enable)
/* Enable I2C Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
+   gate |= CURRENT_GATE_I2C;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
+   gate &= ~CURRENT_GATE_I2C;
 
setCurrentGate(gate);
 }
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 72eaf19..e3ca832 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -415,39 +415,17 @@
 #define CURRENT_GATE_M2XCLK_DIV_3 2
 #define CURRENT_GATE_M2XCLK_DIV_4 3
 #endif
-#define CURRENT_GATE_VGA  10:10
-#define CURRENT_GATE_VGA_OFF  0
-#define CURRENT_GATE_VGA_ON   1
-#define CURRENT_GATE_PWM  9:9
-#define CURRENT_GATE_PWM_OFF  0
-#define CURRENT_GATE_PWM_ON   1
-#define CURRENT_GATE_I2C  8:8
-#define CURRENT_GATE_I2C_OFF  0
-#define CURRENT_GATE_I2C_ON   1
-#define CURRENT_GATE_SSP  7:7
-#define CURRENT_GATE_SSP_OFF  0
-#define CURRENT_GATE_SSP_ON   1
-#define CURRENT_GATE_GPIO 6:6
-#define CURRENT_GATE_GPIO_OFF 0
-#define CURRENT_GATE_GPIO_ON  1
-#define CURRENT_GATE_ZVPORT   5:5
-#define CURRENT_GATE_ZVPORT_OFF   0
-#define CURRENT_GATE_ZVPORT_ON1
-#define CURRENT_GATE_CSC  4:4
-#define CURRENT_GATE_CSC_OFF  0
-#define CURRENT_GATE_CSC_ON   1
-#define CURRENT_GATE_DE   3:3
-#define CURRENT_GATE_DE_OFF   0
-#define CURRENT_GATE_DE_ON1
-#define CURRENT_GATE_DISPLAY  2:2
-#define CURRENT_GATE_DISPLAY_OFF  0
-#define CURRENT_GATE_DISPLAY_ON   1
-#define CURRENT_GATE_LOCALMEM

[PATCH RESEND 14/18] staging: sm750fb: change definition of CURRENT_GATE multi-bit fields

2016-01-17 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of
CURRENT_GATE register and use open-coded implementation for register
manipulation.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 20 +--
 drivers/staging/sm750fb/ddk750_reg.h  | 36 +--
 2 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 37c52a3..1cf9d9a 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -95,20 +95,20 @@ static void setMemoryClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   reg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE) & ~CURRENT_GATE_M2XCLK_MASK;
switch (divisor) {
default:
case 1:
-   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_1);
+   reg |= CURRENT_GATE_M2XCLK_DIV_1;
break;
case 2:
-   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_2);
+   reg |= CURRENT_GATE_M2XCLK_DIV_2;
break;
case 3:
-   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_3);
+   reg |= CURRENT_GATE_M2XCLK_DIV_3;
break;
case 4:
-   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_4);
+   reg |= CURRENT_GATE_M2XCLK_DIV_4;
break;
}
 
@@ -142,20 +142,20 @@ static void setMasterClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   reg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE) & ~CURRENT_GATE_MCLK_MASK;
switch (divisor) {
default:
case 3:
-   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_3);
+   reg |= CURRENT_GATE_MCLK_DIV_3;
break;
case 4:
-   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_4);
+   reg |= CURRENT_GATE_MCLK_DIV_4;
break;
case 6:
-   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_6);
+   reg |= CURRENT_GATE_MCLK_DIV_6;
break;
case 8:
-   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_8);
+   reg |= CURRENT_GATE_MCLK_DIV_8;
break;
}
 
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index e3ca832..b4149ca 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -391,29 +391,29 @@
 #define INT_MASK_VGA_VSYNC_ENABLE 1
 
 #define CURRENT_GATE  0x40
-#define CURRENT_GATE_MCLK 15:14
+#define CURRENT_GATE_MCLK_MASK(0x3 << 14)
 #ifdef VALIDATION_CHIP
-#define CURRENT_GATE_MCLK_112MHZ  0
-#define CURRENT_GATE_MCLK_84MHZ   1
-#define CURRENT_GATE_MCLK_56MHZ   2
-#define CURRENT_GATE_MCLK_42MHZ   3
+#define CURRENT_GATE_MCLK_112MHZ  (0x0 << 14)
+#define CURRENT_GATE_MCLK_84MHZ   (0x1 << 14)
+#define CURRENT_GATE_MCLK_56MHZ   (0x2 << 14)
+#define CURRENT_GATE_MCLK_42MHZ   (0x3 << 14)
 #else
-#define CURRENT_GATE_MCLK_DIV_3   0
-#define CURRENT_GATE_MCLK_DIV_4   1
-#define CURRENT_GATE_MCLK_DIV_6   2
-#define CURRENT_GATE_MCLK_DIV_8   3
+#define CURRENT_GATE_MCLK_DIV_3   (0x0 << 14)
+#define CURRENT_GATE_MCLK_DIV_4   (0x1 << 14)
+#define CURRENT_GATE_MCLK_DIV_6   (0x2 << 14)
+#define CURRENT_GATE_MCLK_DIV_8   (0x3 << 14)
 #endif
-#define CURRENT_GATE_M2XCLK   13:12
+#define CURRENT_GATE_M2XCLK_MASK  (0x3 << 12)
 #ifdef VALIDATION_CHIP
-#define CURRENT_GATE_M2XCLK_336MHZ0
-#define CURRENT_GATE_M2XCLK_168MHZ1
-#define CURRENT_GATE_M2XCLK_112MHZ2
-#define CURRENT_GATE_M2XCLK_84MHZ 3
+#define CURRENT_GATE_M2XCLK_336MHZ(0x0 << 12)
+#define CURRENT_GATE_M2XCLK

[PATCH RESEND 16/18] staging: sm750fb: change definition of MODE0_GATE multi-bit fields

2016-01-17 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of MODE0_GATE
register.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 70b1567..d97859a 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -428,16 +428,16 @@
 #define CURRENT_GATE_DMA  BIT(0)
 
 #define MODE0_GATE0x44
-#define MODE0_GATE_MCLK   15:14
-#define MODE0_GATE_MCLK_112MHZ0
-#define MODE0_GATE_MCLK_84MHZ 1
-#define MODE0_GATE_MCLK_56MHZ 2
-#define MODE0_GATE_MCLK_42MHZ 3
-#define MODE0_GATE_M2XCLK 13:12
-#define MODE0_GATE_M2XCLK_336MHZ  0
-#define MODE0_GATE_M2XCLK_168MHZ  1
-#define MODE0_GATE_M2XCLK_112MHZ  2
-#define MODE0_GATE_M2XCLK_84MHZ   3
+#define MODE0_GATE_MCLK_MASK  (0x3 << 14)
+#define MODE0_GATE_MCLK_112MHZ(0x0 << 14)
+#define MODE0_GATE_MCLK_84MHZ (0x1 << 14)
+#define MODE0_GATE_MCLK_56MHZ (0x2 << 14)
+#define MODE0_GATE_MCLK_42MHZ (0x3 << 14)
+#define MODE0_GATE_M2XCLK_MASK(0x3 << 12)
+#define MODE0_GATE_M2XCLK_336MHZ  (0x0 << 12)
+#define MODE0_GATE_M2XCLK_168MHZ  (0x1 << 12)
+#define MODE0_GATE_M2XCLK_112MHZ  (0x2 << 12)
+#define MODE0_GATE_M2XCLK_84MHZ   (0x3 << 12)
 #define MODE0_GATE_VGABIT(10)
 #define MODE0_GATE_PWMBIT(9)
 #define MODE0_GATE_I2CBIT(8)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 10/18] staging: sm750fb: use BIT macro for GPIO_MUX single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of GPIO_MUX register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_hwi2c.c |   7 +-
 drivers/staging/sm750fb/ddk750_reg.h   | 128 +
 2 files changed, 35 insertions(+), 100 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_hwi2c.c 
b/drivers/staging/sm750fb/ddk750_hwi2c.c
index 7be2111..b824681e5 100644
--- a/drivers/staging/sm750fb/ddk750_hwi2c.c
+++ b/drivers/staging/sm750fb/ddk750_hwi2c.c
@@ -17,8 +17,7 @@ unsigned char bus_speed_mode
/* Enable GPIO 30 & 31 as IIC clock & data */
value = PEEK32(GPIO_MUX);
 
-   value = FIELD_SET(value, GPIO_MUX, 30, I2C) |
- FIELD_SET(0, GPIO_MUX, 31, I2C);
+   value |= (GPIO_MUX_30 | GPIO_MUX_31);
POKE32(GPIO_MUX, value);
 
/* Enable Hardware I2C power.
@@ -52,8 +51,8 @@ void sm750_hw_i2c_close(void)
 
/* Set GPIO 30 & 31 back as GPIO pins */
value = PEEK32(GPIO_MUX);
-   value = FIELD_SET(value, GPIO_MUX, 30, GPIO);
-   value = FIELD_SET(value, GPIO_MUX, 31, GPIO);
+   value &= ~GPIO_MUX_30;
+   value &= ~GPIO_MUX_31;
POKE32(GPIO_MUX, value);
 }
 
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6fef904..6df5076 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -75,102 +75,38 @@
 #define MISC_CTRL_EMBEDDED_LOCALMEM_OFF   BIT(0)
 
 #define GPIO_MUX  0x08
-#define GPIO_MUX_31   31:31
-#define GPIO_MUX_31_GPIO  0
-#define GPIO_MUX_31_I2C   1
-#define GPIO_MUX_30   30:30
-#define GPIO_MUX_30_GPIO  0
-#define GPIO_MUX_30_I2C   1
-#define GPIO_MUX_29   29:29
-#define GPIO_MUX_29_GPIO  0
-#define GPIO_MUX_29_SSP1  1
-#define GPIO_MUX_28   28:28
-#define GPIO_MUX_28_GPIO  0
-#define GPIO_MUX_28_SSP1  1
-#define GPIO_MUX_27   27:27
-#define GPIO_MUX_27_GPIO  0
-#define GPIO_MUX_27_SSP1  1
-#define GPIO_MUX_26   26:26
-#define GPIO_MUX_26_GPIO  0
-#define GPIO_MUX_26_SSP1  1
-#define GPIO_MUX_25   25:25
-#define GPIO_MUX_25_GPIO  0
-#define GPIO_MUX_25_SSP1  1
-#define GPIO_MUX_24   24:24
-#define GPIO_MUX_24_GPIO  0
-#define GPIO_MUX_24_SSP0  1
-#define GPIO_MUX_23   23:23
-#define GPIO_MUX_23_GPIO  0
-#define GPIO_MUX_23_SSP0  1
-#define GPIO_MUX_22   22:22
-#define GPIO_MUX_22_GPIO  0
-#define GPIO_MUX_22_SSP0  1
-#define GPIO_MUX_21   21:21
-#define GPIO_MUX_21_GPIO  0
-#define GPIO_MUX_21_SSP0  1
-#define GPIO_MUX_20   20:20
-#define GPIO_MUX_20_GPIO  0
-#define GPIO_MUX_20_SSP0  1
-#define GPIO_MUX_19   19:19
-#define GPIO_MUX_19_GPIO  0
-#define GPIO_MUX_19_PWM   1
-#define GPIO_MUX_18   18:18
-#define GPIO_MUX_18_GPIO  0
-#define GPIO_MUX_18_PWM   1
-#define GPIO_MUX_17   17:17
-#define GPIO_MUX_17_GPIO  0
-#define GPIO_MUX_17_PWM   1
-#define GPIO_MUX_16   16:16
-#define GPIO_MUX_16_GPIO_ZVPORT   0
-#define GPIO_MUX_16_TEST_DATA 1
-#define GPIO_MUX_15   15:15
-#define GPIO_MUX_15_GPIO_ZVPORT   0
-#define GPIO_MUX_15_TEST_DATA 1
-#define GPIO_MUX_14   14:14
-#define GPIO_MUX_14_GPIO_ZVPORT   0
-#define GPIO_MUX_14_TEST_DATA 1
-#define GPIO_MUX_13   13:13
-#define GPIO_MUX_13_GPIO_ZVPORT   0
-#define GPIO_MUX_13_TEST_DATA 1

[PATCH RESEND 13/18] staging: sm750fb: set{Memory, Master}Clock: rename ulReg to reg

2016-01-17 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 28 ++--
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index b11231c..37c52a3 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -79,7 +79,7 @@ static void setChipClock(unsigned int frequency)
 
 static void setMemoryClock(unsigned int frequency)
 {
-   unsigned int ulReg, divisor;
+   unsigned int reg, divisor;
 
/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. 
*/
if (getChipType() == SM750LE)
@@ -95,24 +95,24 @@ static void setMemoryClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   ulReg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE);
switch (divisor) {
default:
case 1:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_1);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_1);
break;
case 2:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_2);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_2);
break;
case 3:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_3);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_3);
break;
case 4:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_4);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_4);
break;
}
 
-   setCurrentGate(ulReg);
+   setCurrentGate(reg);
}
 }
 
@@ -126,7 +126,7 @@ static void setMemoryClock(unsigned int frequency)
  */
 static void setMasterClock(unsigned int frequency)
 {
-   unsigned int ulReg, divisor;
+   unsigned int reg, divisor;
 
/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. 
*/
if (getChipType() == SM750LE)
@@ -142,24 +142,24 @@ static void setMasterClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   ulReg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE);
switch (divisor) {
default:
case 3:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_3);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_3);
break;
case 4:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_4);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_4);
break;
case 6:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_6);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_6);
break;
case 8:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_8);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_8);
break;
}
 
-   setCurrentGate(ulReg);
+   setCurrentGate(reg);
}
 }
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 15/18] staging: sm750fb: use BIT macro for MODE0_GATE single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of MODE0_GATE register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h  | 44 +--
 2 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 1cf9d9a..a9a8884 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -174,7 +174,7 @@ unsigned int ddk750_getVMSize(void)
 
/* for 750,always use power mode0*/
reg = PEEK32(MODE0_GATE);
-   reg = FIELD_SET(reg, MODE0_GATE, GPIO, ON);
+   reg |= MODE0_GATE_GPIO;
POKE32(MODE0_GATE, reg);
 
/* get frame buffer size from GPIO */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index b4149ca..70b1567 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -438,39 +438,17 @@
 #define MODE0_GATE_M2XCLK_168MHZ  1
 #define MODE0_GATE_M2XCLK_112MHZ  2
 #define MODE0_GATE_M2XCLK_84MHZ   3
-#define MODE0_GATE_VGA10:10
-#define MODE0_GATE_VGA_OFF0
-#define MODE0_GATE_VGA_ON 1
-#define MODE0_GATE_PWM9:9
-#define MODE0_GATE_PWM_OFF0
-#define MODE0_GATE_PWM_ON 1
-#define MODE0_GATE_I2C8:8
-#define MODE0_GATE_I2C_OFF0
-#define MODE0_GATE_I2C_ON 1
-#define MODE0_GATE_SSP7:7
-#define MODE0_GATE_SSP_OFF0
-#define MODE0_GATE_SSP_ON 1
-#define MODE0_GATE_GPIO   6:6
-#define MODE0_GATE_GPIO_OFF   0
-#define MODE0_GATE_GPIO_ON1
-#define MODE0_GATE_ZVPORT 5:5
-#define MODE0_GATE_ZVPORT_OFF 0
-#define MODE0_GATE_ZVPORT_ON  1
-#define MODE0_GATE_CSC4:4
-#define MODE0_GATE_CSC_OFF0
-#define MODE0_GATE_CSC_ON 1
-#define MODE0_GATE_DE 3:3
-#define MODE0_GATE_DE_OFF 0
-#define MODE0_GATE_DE_ON  1
-#define MODE0_GATE_DISPLAY2:2
-#define MODE0_GATE_DISPLAY_OFF0
-#define MODE0_GATE_DISPLAY_ON 1
-#define MODE0_GATE_LOCALMEM   1:1
-#define MODE0_GATE_LOCALMEM_OFF   0
-#define MODE0_GATE_LOCALMEM_ON1
-#define MODE0_GATE_DMA0:0
-#define MODE0_GATE_DMA_OFF0
-#define MODE0_GATE_DMA_ON 1
+#define MODE0_GATE_VGABIT(10)
+#define MODE0_GATE_PWMBIT(9)
+#define MODE0_GATE_I2CBIT(8)
+#define MODE0_GATE_SSPBIT(7)
+#define MODE0_GATE_GPIO   BIT(6)
+#define MODE0_GATE_ZVPORT BIT(5)
+#define MODE0_GATE_CSCBIT(4)
+#define MODE0_GATE_DE BIT(3)
+#define MODE0_GATE_DISPLAYBIT(2)
+#define MODE0_GATE_LOCALMEM   BIT(1)
+#define MODE0_GATE_DMABIT(0)
 
 #define MODE1_GATE0x48
 #define MODE1_GATE_MCLK   15:14
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 07/18] staging: sm750fb: ddk750_initHw: rename ulReg to reg

2016-01-17 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 52 +--
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 0331d34..905c1a86 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -197,24 +197,24 @@ unsigned int ddk750_getVMSize(void)
 
 int ddk750_initHw(initchip_param_t *pInitParam)
 {
-   unsigned int ulReg;
+   unsigned int reg;
 
if (pInitParam->powerMode != 0)
pInitParam->powerMode = 0;
setPowerMode(pInitParam->powerMode);
 
/* Enable display power gate & LOCALMEM power gate*/
-   ulReg = PEEK32(CURRENT_GATE);
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, DISPLAY, ON);
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, LOCALMEM, ON);
-   setCurrentGate(ulReg);
+   reg = PEEK32(CURRENT_GATE);
+   reg = FIELD_SET(reg, CURRENT_GATE, DISPLAY, ON);
+   reg = FIELD_SET(reg, CURRENT_GATE, LOCALMEM, ON);
+   setCurrentGate(reg);
 
if (getChipType() != SM750LE) {
/*  set panel pll and graphic mode via mmio_88 */
-   ulReg = PEEK32(VGA_CONFIGURATION);
-   ulReg = FIELD_SET(ulReg, VGA_CONFIGURATION, PLL, PANEL);
-   ulReg = FIELD_SET(ulReg, VGA_CONFIGURATION, MODE, GRAPHIC);
-   POKE32(VGA_CONFIGURATION, ulReg);
+   reg = PEEK32(VGA_CONFIGURATION);
+   reg = FIELD_SET(reg, VGA_CONFIGURATION, PLL, PANEL);
+   reg = FIELD_SET(reg, VGA_CONFIGURATION, MODE, GRAPHIC);
+   POKE32(VGA_CONFIGURATION, reg);
} else {
 #if defined(__i386__) || defined(__x86_64__)
/* set graphic mode via IO method */
@@ -238,36 +238,36 @@ int ddk750_initHw(initchip_param_t *pInitParam)
   The memory should be resetted after changing the MXCLK.
 */
if (pInitParam->resetMemory == 1) {
-   ulReg = PEEK32(MISC_CTRL);
-   ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, RESET);
-   POKE32(MISC_CTRL, ulReg);
+   reg = PEEK32(MISC_CTRL);
+   reg = FIELD_SET(reg, MISC_CTRL, LOCALMEM_RESET, RESET);
+   POKE32(MISC_CTRL, reg);
 
-   ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, NORMAL);
-   POKE32(MISC_CTRL, ulReg);
+   reg = FIELD_SET(reg, MISC_CTRL, LOCALMEM_RESET, NORMAL);
+   POKE32(MISC_CTRL, reg);
}
 
if (pInitParam->setAllEngOff == 1) {
enable2DEngine(0);
 
/* Disable Overlay, if a former application left it on */
-   ulReg = PEEK32(VIDEO_DISPLAY_CTRL);
-   ulReg = FIELD_SET(ulReg, VIDEO_DISPLAY_CTRL, PLANE, DISABLE);
-   POKE32(VIDEO_DISPLAY_CTRL, ulReg);
+   reg = PEEK32(VIDEO_DISPLAY_CTRL);
+   reg = FIELD_SET(reg, VIDEO_DISPLAY_CTRL, PLANE, DISABLE);
+   POKE32(VIDEO_DISPLAY_CTRL, reg);
 
/* Disable video alpha, if a former application left it on */
-   ulReg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL);
-   ulReg = FIELD_SET(ulReg, VIDEO_ALPHA_DISPLAY_CTRL, PLANE, 
DISABLE);
-   POKE32(VIDEO_ALPHA_DISPLAY_CTRL, ulReg);
+   reg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL);
+   reg = FIELD_SET(reg, VIDEO_ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
+   POKE32(VIDEO_ALPHA_DISPLAY_CTRL, reg);
 
/* Disable alpha plane, if a former application left it on */
-   ulReg = PEEK32(ALPHA_DISPLAY_CTRL);
-   ulReg = FIELD_SET(ulReg, ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
-   POKE32(ALPHA_DISPLAY_CTRL, ulReg);
+   reg = PEEK32(ALPHA_DISPLAY_CTRL);
+   reg = FIELD_SET(reg, ALPHA_DISPLAY_CTRL, PLANE, DISABLE);
+   POKE32(ALPHA_DISPLAY_CTRL, reg);
 
/* Disable DMA Channel, if a former application left it on */
-   ulReg = PEEK32(DMA_ABORT_INTERRUPT);
-   ulReg = FIELD_SET(ulReg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT);
-   POKE32(DMA_ABORT_INTERRUPT, ulReg);
+   reg = PEEK32(DMA_ABORT_INTERRUPT);
+   reg = FIELD_SET(reg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT);
+   POKE32(DMA_ABORT_INTERRUPT, reg);
 
/* Disable DMA Power, if a former application left it on */
enableDMA(0);
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 00/18] staging: sm750fb: change some register fields defines

2016-01-17 Thread Mike Rapoport
Hi,

This is the first set of patches that aim to replace custom defines for
register fields. The ultimate goal is to have MSB:LSB notation for register
fields and FIELD_* macros removed. 

Mike Rapoport (18):
  staging: sm750fb: hw_sm750(le)_deWait: rename dwVal to val
  staging: sm750fb: use BIT macro for DE_STATE1 single-bit field
  staging: sm750fb: use BIT macro for DE_STATE2 single-bit fields
  staging: sm750fb: remove unused DE_STATE2_DE_RESERVED
  staging: sm750fb: use BIT macro for SYSTEM_CTRL single-bit fields
  staging: sm750fb: change definition of SYSTEM_CTRL multi-bit fields
  staging: sm750fb: ddk750_initHw: rename ulReg to reg
  staging: sm750fb: use BIT macro for MISC_CTRL single-bit fields
  staging: sm750fb: ddk750_sii164: fix defines for i2c{Read,Write}reg
  staging: sm750fb: use BIT macro for GPIO_MUX single-bit fields
  staging: sm750fb: change definition of MISC_CTRL multi-bit fields
  staging: sm750fb: use BIT macro for CURRENT_GATE single-bit fields
  staging: sm750fb: set{Memory,Master}Clock: rename ulReg to reg
  staging: sm750fb: change definition of CURRENT_GATE multi-bit fields
  staging: sm750fb: use BIT macro for MODE0_GATE single-bit fields
  staging: sm750fb: change definition of MODE0_GATE multi-bit fields
  staging: sm750fb: use BIT macro for POWER_MODE_CTRL single-bit fields
  staging: sm750fb: change definition of POWER_MODE_CTRL multi-bit field

 drivers/staging/sm750fb/ddk750_chip.c|  83 +++--
 drivers/staging/sm750fb/ddk750_display.c |  24 +-
 drivers/staging/sm750fb/ddk750_hwi2c.c   |   7 +-
 drivers/staging/sm750fb/ddk750_power.c   |  43 ++-
 drivers/staging/sm750fb/ddk750_power.h   |  11 +-
 drivers/staging/sm750fb/ddk750_reg.h | 503 ++-
 drivers/staging/sm750fb/ddk750_sii164.c  |   4 +-
 drivers/staging/sm750fb/sm750_hw.c   |  57 ++--
 8 files changed, 256 insertions(+), 476 deletions(-)

-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 02/18] staging: sm750fb: use BIT macro for DE_STATE1 single-bit field

2016-01-17 Thread Mike Rapoport
Replace complex definition of DE_STATE1 field and usage of FIELD_SET with
BIT() macro and open-coded register value modifications

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 4 +---
 drivers/staging/sm750fb/sm750_hw.c   | 4 ++--
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 16a01c2..7bbe53a 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -3,9 +3,7 @@
 
 /* New register for SM750LE */
 #define DE_STATE10x100054
-#define DE_STATE1_DE_ABORT   0:0
-#define DE_STATE1_DE_ABORT_OFF   0
-#define DE_STATE1_DE_ABORT_ON1
+#define DE_STATE1_DE_ABORT   BIT(0)
 
 #define DE_STATE20x100058
 #define DE_STATE2_DE_FIFO3:3
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index f9908d9..5754af5 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -468,11 +468,11 @@ void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
 
if (getChipType() == SM750LE) {
reg = PEEK32(DE_STATE1);
-   reg = FIELD_SET(reg, DE_STATE1, DE_ABORT, ON);
+   reg |= DE_STATE1_DE_ABORT;
POKE32(DE_STATE1, reg);
 
reg = PEEK32(DE_STATE1);
-   reg = FIELD_SET(reg, DE_STATE1, DE_ABORT, OFF);
+   reg &= ~DE_STATE1_DE_ABORT;
POKE32(DE_STATE1, reg);
 
} else {
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 11/18] staging: sm750fb: change definition of MISC_CTRL multi-bit fields

2016-01-17 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of MISC_CTRL
register and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h  | 28 ++--
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 08b4905..36c2e50 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -178,7 +178,7 @@ unsigned int ddk750_getVMSize(void)
POKE32(MODE0_GATE, reg);
 
/* get frame buffer size from GPIO */
-   reg = FIELD_GET(PEEK32(MISC_CTRL), MISC_CTRL, LOCALMEM_SIZE);
+   reg = PEEK32(MISC_CTRL) & MISC_CTRL_LOCALMEM_SIZE_MASK;
switch (reg) {
case MISC_CTRL_LOCALMEM_SIZE_8M:
data = SZ_8M;  break; /* 8  Mega byte */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6df5076..72eaf19 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -43,24 +43,24 @@
 
 #define MISC_CTRL 0x04
 #define MISC_CTRL_DRAM_RERESH_COUNT   BIT(27)
-#define MISC_CTRL_DRAM_REFRESH_TIME   26:25
-#define MISC_CTRL_DRAM_REFRESH_TIME_8 0
-#define MISC_CTRL_DRAM_REFRESH_TIME_161
-#define MISC_CTRL_DRAM_REFRESH_TIME_322
-#define MISC_CTRL_DRAM_REFRESH_TIME_643
+#define MISC_CTRL_DRAM_REFRESH_TIME_MASK  (0x3 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_8 (0x0 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_16(0x1 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_32(0x2 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_64(0x3 << 25)
 #define MISC_CTRL_INT_OUTPUT_INVERT   BIT(24)
 #define MISC_CTRL_PLL_CLK_COUNT   BIT(23)
 #define MISC_CTRL_DAC_POWER_OFF   BIT(20)
 #define MISC_CTRL_CLK_SELECT_TESTCLK  BIT(16)
-#define MISC_CTRL_DRAM_COLUMN_SIZE15:14
-#define MISC_CTRL_DRAM_COLUMN_SIZE_2560
-#define MISC_CTRL_DRAM_COLUMN_SIZE_5121
-#define MISC_CTRL_DRAM_COLUMN_SIZE_1024   2
-#define MISC_CTRL_LOCALMEM_SIZE   13:12
-#define MISC_CTRL_LOCALMEM_SIZE_8M3
-#define MISC_CTRL_LOCALMEM_SIZE_16M   0
-#define MISC_CTRL_LOCALMEM_SIZE_32M   1
-#define MISC_CTRL_LOCALMEM_SIZE_64M   2
+#define MISC_CTRL_DRAM_COLUMN_SIZE_MASK   (0x3 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_256(0x0 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_512(0x1 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_1024   (0x2 << 14)
+#define MISC_CTRL_LOCALMEM_SIZE_MASK  (0x3 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_8M(0x3 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_16M   (0x0 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_32M   (0x1 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_64M   (0x2 << 12)
 #define MISC_CTRL_DRAM_TWTR   BIT(11)
 #define MISC_CTRL_DRAM_TWRBIT(10)
 #define MISC_CTRL_DRAM_TRPBIT(9)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 09/18] staging: sm750fb: ddk750_sii164: fix defines for i2c{Read, Write}reg

2016-01-17 Thread Mike Rapoport
For case when USE_HW_I2C is not defined, i2c{Read,Write}reg was wrongly
defined to use old function names.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_sii164.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_sii164.c 
b/drivers/staging/sm750fb/ddk750_sii164.c
index 241b77b..9fd6afb 100644
--- a/drivers/staging/sm750fb/ddk750_sii164.c
+++ b/drivers/staging/sm750fb/ddk750_sii164.c
@@ -14,8 +14,8 @@
 #define i2cWriteReg sm750_hw_i2c_write_reg
 #define i2cReadReg  sm750_hw_i2c_read_reg
 #else
-#define i2cWriteReg swI2CWriteReg
-#define i2cReadReg  swI2CReadReg
+#define i2cWriteReg sm750_sw_i2c_write_reg
+#define i2cReadReg  sm750_sw_i2c_read_reg
 #endif
 
 /* SII164 Vendor and Device ID */
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 06/18] staging: sm750fb: change definition of SYSTEM_CTRL multi-bit fields

2016-01-17 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of
SYSTEM_CTRL register and replace FIELD_GET/SET for these fields with
open-coded implementation.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_power.c |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h   | 20 ++--
 drivers/staging/sm750fb/sm750_hw.c | 18 +-
 3 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 667e4f8..1c5001c 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -12,7 +12,7 @@ void ddk750_setDPMS(DPMS_t state)
 DPMS, state));
} else {
value = PEEK32(SYSTEM_CTRL);
-   value = FIELD_VALUE(value, SYSTEM_CTRL, DPMS, state);
+   value = (value & ~SYSTEM_CTRL_DPMS_MASK) | state;
POKE32(SYSTEM_CTRL, value);
}
 }
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 351a1dc..75a20e7 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -11,11 +11,11 @@
 #define DE_STATE2_DE_MEM_FIFO_EMPTY  BIT(1)
 
 #define SYSTEM_CTRL   0x00
-#define SYSTEM_CTRL_DPMS  31:30
-#define SYSTEM_CTRL_DPMS_VPHP 0
-#define SYSTEM_CTRL_DPMS_VPHN 1
-#define SYSTEM_CTRL_DPMS_VNHP 2
-#define SYSTEM_CTRL_DPMS_VNHN 3
+#define SYSTEM_CTRL_DPMS_MASK (0x3 << 30)
+#define SYSTEM_CTRL_DPMS_VPHP (0x0 << 30)
+#define SYSTEM_CTRL_DPMS_VPHN (0x1 << 30)
+#define SYSTEM_CTRL_DPMS_VNHP (0x2 << 30)
+#define SYSTEM_CTRL_DPMS_VNHN (0x3 << 30)
 #define SYSTEM_CTRL_PCI_BURST BIT(29)
 #define SYSTEM_CTRL_PCI_MASTERBIT(25)
 #define SYSTEM_CTRL_LATENCY_TIMER_OFF BIT(24)
@@ -31,11 +31,11 @@
 #define SYSTEM_CTRL_DE_ABORT  BIT(13)
 #define SYSTEM_CTRL_PCI_SUBSYS_ID_LOCKBIT(11)
 #define SYSTEM_CTRL_PCI_RETRY_OFF BIT(7)
-#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE 5:4
-#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_1   0
-#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_2   1
-#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_4   2
-#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_8   3
+#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_MASK(0x3 << 4)
+#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_1   (0x0 << 4)
+#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_2   (0x1 << 4)
+#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_4   (0x2 << 4)
+#define SYSTEM_CTRL_PCI_SLAVE_BURST_READ_SIZE_8   (0x3 << 4)
 #define SYSTEM_CTRL_CRT_TRISTATE  BIT(3)
 #define SYSTEM_CTRL_PCIMEM_TRISTATE   BIT(2)
 #define SYSTEM_CTRL_LOCALMEM_TRISTATE BIT(1)
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 59adeb6..357ee56 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -112,6 +112,7 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct 
pci_dev *pdev)
}
 
if (getChipType() != SM750LE) {
+   unsigned int val;
/* does user need CRT ?*/
if (sm750_dev->nocrt) {
POKE32(MISC_CTRL,
@@ -119,20 +120,18 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct 
pci_dev *pdev)
MISC_CTRL,
DAC_POWER, OFF));
/* shut off dpms */
-   POKE32(SYSTEM_CTRL,
-   FIELD_SET(PEEK32(SYSTEM_CTRL),
-   SYSTEM_CTRL,
-   DPMS, VNHN));
+   val = PEEK32(SYSTEM_CTRL) & ~SYSTEM_CTRL_DPMS_MASK;
+   val |= SYSTEM_CTRL_DPMS_VPHN;
+   POKE32(SYSTEM_CTRL, val);
} else {
POKE32(MISC_CTRL,
FIELD_SET(PEEK32(MISC_CTRL),
MISC_CTRL,
DAC_POWER, ON));
/* turn on dpms */
-   POKE32(SYSTEM_CTRL,
-   FIELD_SET(PEEK32(SYSTEM_CTRL),
-   SYSTEM_CTRL,
-   DPMS, VPHP));
+   val = PEEK32(SYSTEM_CTRL) & ~

[PATCH RESEND 03/18] staging: sm750fb: use BIT macro for DE_STATE2 single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of DE_STATE1 fields and usage of FIELD_GET
with BIT() macro and open-coded register value modifications

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 12 +++-
 drivers/staging/sm750fb/sm750_hw.c   |  8 
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 7bbe53a..db13bdf 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -6,15 +6,9 @@
 #define DE_STATE1_DE_ABORT   BIT(0)
 
 #define DE_STATE20x100058
-#define DE_STATE2_DE_FIFO3:3
-#define DE_STATE2_DE_FIFO_NOTEMPTY   0
-#define DE_STATE2_DE_FIFO_EMPTY  1
-#define DE_STATE2_DE_STATUS  2:2
-#define DE_STATE2_DE_STATUS_IDLE 0
-#define DE_STATE2_DE_STATUS_BUSY 1
-#define DE_STATE2_DE_MEM_FIFO1:1
-#define DE_STATE2_DE_MEM_FIFO_NOTEMPTY   0
-#define DE_STATE2_DE_MEM_FIFO_EMPTY  1
+#define DE_STATE2_DE_FIFO_EMPTY  BIT(3)
+#define DE_STATE2_DE_STATUS_BUSY BIT(2)
+#define DE_STATE2_DE_MEM_FIFO_EMPTY  BIT(1)
 #define DE_STATE2_DE_RESERVED0:0
 
 
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 5754af5..425bec8 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -493,15 +493,15 @@ void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
 int hw_sm750le_deWait(void)
 {
int i = 0x1000;
+   unsigned int mask = DE_STATE2_DE_STATUS_BUSY | DE_STATE2_DE_FIFO_EMPTY |
+   DE_STATE2_DE_MEM_FIFO_EMPTY;
 
while (i--) {
unsigned int val = PEEK32(DE_STATE2);
 
-   if ((FIELD_GET(val, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
-   (FIELD_GET(val, DE_STATE2, DE_FIFO) == 
DE_STATE2_DE_FIFO_EMPTY) &&
-   (FIELD_GET(val, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
+   if ((val & mask) ==
+   (DE_STATE2_DE_FIFO_EMPTY | DE_STATE2_DE_MEM_FIFO_EMPTY))
return 0;
-   }
}
/* timeout error */
return -1;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 08/18] staging: sm750fb: use BIT macro for MISC_CTRL single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of MISC_CTRL register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c  |  4 +-
 drivers/staging/sm750fb/ddk750_power.h | 11 ++
 drivers/staging/sm750fb/ddk750_reg.h   | 68 +-
 drivers/staging/sm750fb/sm750_hw.c |  8 +---
 4 files changed, 25 insertions(+), 66 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 905c1a86..08b4905 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -239,10 +239,10 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 */
if (pInitParam->resetMemory == 1) {
reg = PEEK32(MISC_CTRL);
-   reg = FIELD_SET(reg, MISC_CTRL, LOCALMEM_RESET, RESET);
+   reg &= ~MISC_CTRL_LOCALMEM_RESET;
POKE32(MISC_CTRL, reg);
 
-   reg = FIELD_SET(reg, MISC_CTRL, LOCALMEM_RESET, NORMAL);
+   reg |= MISC_CTRL_LOCALMEM_RESET;
POKE32(MISC_CTRL, reg);
}
 
diff --git a/drivers/staging/sm750fb/ddk750_power.h 
b/drivers/staging/sm750fb/ddk750_power.h
index 6e804d9..5963691 100644
--- a/drivers/staging/sm750fb/ddk750_power.h
+++ b/drivers/staging/sm750fb/ddk750_power.h
@@ -9,13 +9,10 @@ typedef enum _DPMS_t {
 }
 DPMS_t;
 
-#define setDAC(off) \
-   {   \
-   POKE32(MISC_CTRL, FIELD_VALUE(PEEK32(MISC_CTRL), \
-   
MISC_CTRL,  \
-   
DAC_POWER,  \
-   off));  
\
-   }
+#define setDAC(off) {  \
+   POKE32(MISC_CTRL,   \
+  (PEEK32(MISC_CTRL) & ~MISC_CTRL_DAC_POWER_OFF) | (off)); \
+}
 
 void ddk750_setDPMS(DPMS_t);
 
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 75a20e7..6fef904 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -42,26 +42,16 @@
 #define SYSTEM_CTRL_PANEL_TRISTATEBIT(0)
 
 #define MISC_CTRL 0x04
-#define MISC_CTRL_DRAM_RERESH_COUNT   27:27
-#define MISC_CTRL_DRAM_RERESH_COUNT_1ROW  0
-#define MISC_CTRL_DRAM_RERESH_COUNT_3ROW  1
+#define MISC_CTRL_DRAM_RERESH_COUNT   BIT(27)
 #define MISC_CTRL_DRAM_REFRESH_TIME   26:25
 #define MISC_CTRL_DRAM_REFRESH_TIME_8 0
 #define MISC_CTRL_DRAM_REFRESH_TIME_161
 #define MISC_CTRL_DRAM_REFRESH_TIME_322
 #define MISC_CTRL_DRAM_REFRESH_TIME_643
-#define MISC_CTRL_INT_OUTPUT  24:24
-#define MISC_CTRL_INT_OUTPUT_NORMAL   0
-#define MISC_CTRL_INT_OUTPUT_INVERT   1
-#define MISC_CTRL_PLL_CLK_COUNT   23:23
-#define MISC_CTRL_PLL_CLK_COUNT_OFF   0
-#define MISC_CTRL_PLL_CLK_COUNT_ON1
-#define MISC_CTRL_DAC_POWER   20:20
-#define MISC_CTRL_DAC_POWER_ON0
-#define MISC_CTRL_DAC_POWER_OFF   1
-#define MISC_CTRL_CLK_SELECT  16:16
-#define MISC_CTRL_CLK_SELECT_OSC  0
-#define MISC_CTRL_CLK_SELECT_TESTCLK  1
+#define MISC_CTRL_INT_OUTPUT_INVERT   BIT(24)
+#define MISC_CTRL_PLL_CLK_COUNT   BIT(23)
+#define MISC_CTRL_DAC_POWER_OFF   BIT(20)
+#define MISC_CTRL_CLK_SELECT_TESTCLK  BIT(16)
 #define MISC_CTRL_DRAM_COLUMN_SIZE15:14
 #define MISC_CTRL_DRAM_COLUMN_SIZE_2560
 #define MISC_CTRL_DRAM_COLUMN_SIZE_5121
@@ -71,42 +61,18 @@
 #define MISC_CTRL_LOCALMEM_SIZE_16M   0
 #define MISC_CTRL_LOCALMEM_SIZE_32M   1
 #define MISC_CTRL_LOCALMEM_SIZE_64M   2
-#define MISC_CTRL_DRAM_TWTR   11:11
-#define MISC_CTRL_DRAM_TWTR_2CLK  0
-#define MISC_CTRL_DRAM_TWTR_1CLK  1
-#define MISC_CTRL_DRAM_TWR10:10
-#define MISC_CTRL_DRAM_TWR_3CLK   0
-#define MISC_CTRL_DRAM_TWR_2CLK   1
-#define MISC_CTRL_DRAM_TRP9:9
-#define MISC_CTRL_DRAM_TRP_3CLK   0
-#define MISC_CTRL_DRAM_TRP_4CLK   1
-#define MISC_CTRL_DRAM_TRFC   8:8
-#define MISC_CTRL_DRAM_TRFC_12CLK 0
-#define MISC_CTRL_DRAM_TRFC_14CLK   

[PATCH RESEND 01/18] staging: sm750fb: hw_sm750(le)_deWait: rename dwVal to val

2016-01-17 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_hw.c | 16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 41822c6..f9908d9 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -495,11 +495,11 @@ int hw_sm750le_deWait(void)
int i = 0x1000;
 
while (i--) {
-   unsigned int dwVal = PEEK32(DE_STATE2);
+   unsigned int val = PEEK32(DE_STATE2);
 
-   if ((FIELD_GET(dwVal, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
-   (FIELD_GET(dwVal, DE_STATE2, DE_FIFO)  == 
DE_STATE2_DE_FIFO_EMPTY) &&
-   (FIELD_GET(dwVal, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
+   if ((FIELD_GET(val, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
+   (FIELD_GET(val, DE_STATE2, DE_FIFO) == 
DE_STATE2_DE_FIFO_EMPTY) &&
+   (FIELD_GET(val, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
return 0;
}
}
@@ -513,11 +513,11 @@ int hw_sm750_deWait(void)
int i = 0x1000;
 
while (i--) {
-   unsigned int dwVal = PEEK32(SYSTEM_CTRL);
+   unsigned int val = PEEK32(SYSTEM_CTRL);
 
-   if ((FIELD_GET(dwVal, SYSTEM_CTRL, DE_STATUS) == 
SYSTEM_CTRL_DE_STATUS_IDLE) &&
-   (FIELD_GET(dwVal, SYSTEM_CTRL, DE_FIFO)  == 
SYSTEM_CTRL_DE_FIFO_EMPTY) &&
-   (FIELD_GET(dwVal, SYSTEM_CTRL, DE_MEM_FIFO) == 
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY)) {
+   if ((FIELD_GET(val, SYSTEM_CTRL, DE_STATUS) == 
SYSTEM_CTRL_DE_STATUS_IDLE) &&
+   (FIELD_GET(val, SYSTEM_CTRL, DE_FIFO) == 
SYSTEM_CTRL_DE_FIFO_EMPTY) &&
+   (FIELD_GET(val, SYSTEM_CTRL, DE_MEM_FIFO) == 
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY)) {
return 0;
}
}
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 04/18] staging: sm750fb: remove unused DE_STATE2_DE_RESERVED

2016-01-17 Thread Mike Rapoport
Definition of reserved fields in a register is not interesting

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index db13bdf..38ebe95 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -9,9 +9,6 @@
 #define DE_STATE2_DE_FIFO_EMPTY  BIT(3)
 #define DE_STATE2_DE_STATUS_BUSY BIT(2)
 #define DE_STATE2_DE_MEM_FIFO_EMPTY  BIT(1)
-#define DE_STATE2_DE_RESERVED0:0
-
-
 
 #define SYSTEM_CTRL   0x00
 #define SYSTEM_CTRL_DPMS  31:30
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND 05/18] staging: sm750fb: use BIT macro for SYSTEM_CTRL single-bit fields

2016-01-17 Thread Mike Rapoport
Replace complex definition of SYSTEM_CTRL fields and usage of
FIELD_GET/SET with BIT() macro and open-coded register value modifications

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_display.c | 24 --
 drivers/staging/sm750fb/ddk750_reg.h | 76 
 drivers/staging/sm750fb/sm750_hw.c   | 15 ---
 3 files changed, 35 insertions(+), 80 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 84f6e8b..1a29ae0 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -136,17 +136,13 @@ static void waitNextVerticalSync(int ctrl, int delay)
while (delay-- > 0) {
/* Wait for end of vsync. */
do {
-   status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-  SYSTEM_CTRL,
-  PANEL_VSYNC);
-   } while (status == SYSTEM_CTRL_PANEL_VSYNC_ACTIVE);
+   status = PEEK32(SYSTEM_CTRL);
+   } while (status & SYSTEM_CTRL_PANEL_VSYNC_ACTIVE);
 
/* Wait for start of vsync. */
do {
-   status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-  SYSTEM_CTRL,
-  PANEL_VSYNC);
-   } while (status == SYSTEM_CTRL_PANEL_VSYNC_INACTIVE);
+   status = PEEK32(SYSTEM_CTRL);
+   } while (!(status & SYSTEM_CTRL_PANEL_VSYNC_ACTIVE));
}
 
} else {
@@ -163,17 +159,13 @@ static void waitNextVerticalSync(int ctrl, int delay)
while (delay-- > 0) {
/* Wait for end of vsync. */
do {
-   status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-  SYSTEM_CTRL,
-  CRT_VSYNC);
-   } while (status == SYSTEM_CTRL_CRT_VSYNC_ACTIVE);
+   status = PEEK32(SYSTEM_CTRL);
+   } while (status & SYSTEM_CTRL_PANEL_VSYNC_ACTIVE);
 
/* Wait for start of vsync. */
do {
-   status = FIELD_GET(PEEK32(SYSTEM_CTRL),
-  SYSTEM_CTRL,
-  CRT_VSYNC);
-   } while (status == SYSTEM_CTRL_CRT_VSYNC_INACTIVE);
+   status = PEEK32(SYSTEM_CTRL);
+   } while (!(status & SYSTEM_CTRL_PANEL_VSYNC_ACTIVE));
}
}
 }
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 38ebe95..351a1dc 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -16,68 +16,30 @@
 #define SYSTEM_CTRL_DPMS_VPHN 1
 #define SYSTEM_CTRL_DPMS_VNHP 2
 #define SYSTEM_CTRL_DPMS_VNHN 3
-#define SYSTEM_CTRL_PCI_BURST 29:29
-#define SYSTEM_CTRL_PCI_BURST_OFF 0
-#define SYSTEM_CTRL_PCI_BURST_ON  1
-#define SYSTEM_CTRL_PCI_MASTER25:25
-#define SYSTEM_CTRL_PCI_MASTER_OFF0
-#define SYSTEM_CTRL_PCI_MASTER_ON 1
-#define SYSTEM_CTRL_LATENCY_TIMER 24:24
-#define SYSTEM_CTRL_LATENCY_TIMER_ON  0
-#define SYSTEM_CTRL_LATENCY_TIMER_OFF 1
-#define SYSTEM_CTRL_DE_FIFO   23:23
-#define SYSTEM_CTRL_DE_FIFO_NOTEMPTY  0
-#define SYSTEM_CTRL_DE_FIFO_EMPTY 1
-#define SYSTEM_CTRL_DE_STATUS 22:22
-#define SYSTEM_CTRL_DE_STATUS_IDLE0
-#define SYSTEM_CTRL_DE_STATUS_BUSY1
-#define SYSTEM_CTRL_DE_MEM_FIFO   21:21
-#define SYSTEM_CTRL_DE_MEM_FIFO_NOTEMPTY  0
-#define SYSTEM_CTRL_DE_MEM_FIFO_EMPTY 1
-#define SYSTEM_CTRL_CSC_STATUS20:20
-#define SYSTEM_CTRL_CSC_STATUS_IDLE   0
-#define SYSTEM_CTRL_CSC_STATUS_BUSY   1
-#define SYSTEM_CTRL_CRT_VSYNC 19:19
-#define SYSTEM_CTRL_CRT_VSYNC_INACTIVE0
-#define SYSTEM_CTRL_CRT_VSYNC_ACTIVE  1
-#define SYSTEM_CTRL_PANEL_VSYNC   18:18
-#define SYSTEM_CTRL_PANEL_VSYNC_INACTIVE  0
-#define SYSTEM_CTRL_PANEL_VSYNC_ACTIVE

[PATCH RESEND v4 5/7] staging: sm750fb: introduce sm750fb_frambuffer_release

2016-01-17 Thread Mike Rapoport
Use a function to unregister framebuffer info and release its resources.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 25 +
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 1b3ab04..88a6405 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1002,6 +1002,18 @@ NO_PARAM:
}
 }
 
+static void sm750fb_frambuffer_release(struct sm750_dev *sm750_dev)
+{
+   struct fb_info *fb_info;
+
+   while (sm750_dev->fb_count) {
+   fb_info = sm750_dev->fbinfo[sm750_dev->fb_count - 1];
+   unregister_framebuffer(fb_info);
+   framebuffer_release(fb_info);
+   sm750_dev->fb_count--;
+   }
+}
+
 static int lynxfb_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
 {
@@ -1138,22 +1150,11 @@ disable_pci:
 
 static void lynxfb_pci_remove(struct pci_dev *pdev)
 {
-   struct fb_info *info;
struct sm750_dev *sm750_dev;
-   int cnt;
 
-   cnt = 2;
sm750_dev = pci_get_drvdata(pdev);
 
-   while (cnt-- > 0) {
-   info = sm750_dev->fbinfo[cnt];
-   if (!info)
-   continue;
-
-   unregister_framebuffer(info);
-   /* release frame buffer */
-   framebuffer_release(info);
-   }
+   sm750fb_frambuffer_release(sm750_dev);
arch_phys_wc_del(sm750_dev->mtrr.vram);
 
iounmap(sm750_dev->pvReg);
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 7/7] staging: sm750fb: lynxfb_pci_probe: remove some pr_info

2016-01-17 Thread Mike Rapoport
Several pr_info statements in lynxfb_pci_probe seem like debug leftovers
and may be removed.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 8 
 1 file changed, 8 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index c33c7ff..2ae2a52 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1067,8 +1067,6 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
sm750_dev->fbinfo[0] = sm750_dev->fbinfo[1] = NULL;
sm750_dev->devid = pdev->device;
sm750_dev->revid = pdev->revision;
-
-   pr_info("share->revid = %02x\n", sm750_dev->revid);
sm750_dev->pdev = pdev;
sm750_dev->mtrr_off = g_nomtrr;
sm750_dev->mtrr.vram = 0;
@@ -1086,9 +1084,6 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
sm750_dev->accel.de_fillrect = hw_fillrect;
sm750_dev->accel.de_copyarea = hw_copyarea;
sm750_dev->accel.de_imageblit = hw_imageblit;
-   pr_info("enable 2d acceleration\n");
-   } else {
-   pr_info("disable 2d acceleration\n");
}
 
/* call chip specific setup routine  */
@@ -1105,9 +1100,6 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
 
memset_io(sm750_dev->pvMem, 0, sm750_dev->vidmem_size);
 
-   pr_info("sm%3x mmio address = %p\n", sm750_dev->devid,
-   sm750_dev->pvReg);
-
pci_set_drvdata(pdev, sm750_dev);
 
/* call chipInit routine */
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 6/7] staging: sm750fb: introduce sm750fb_frambuffer_alloc

2016-01-17 Thread Mike Rapoport
Split framebuffer allocation and registration into a dedicated function
to simplify lynxfb_pci_probe

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 98 +
 1 file changed, 41 insertions(+), 57 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 88a6405..c33c7ff 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1014,11 +1014,43 @@ static void sm750fb_frambuffer_release(struct sm750_dev 
*sm750_dev)
}
 }
 
+static int sm750fb_frambuffer_alloc(struct sm750_dev *sm750_dev, int fbidx)
+{
+   struct fb_info *fb_info;
+   struct lynxfb_par *par;
+   int err;
+
+   fb_info = framebuffer_alloc(sizeof(struct lynxfb_par),
+   &sm750_dev->pdev->dev);
+   if (!fb_info)
+   return -ENOMEM;
+
+   sm750_dev->fbinfo[fbidx] = fb_info;
+   par = fb_info->par;
+   par->dev = sm750_dev;
+
+   err = lynxfb_set_fbinfo(fb_info, fbidx);
+   if (err)
+   goto release_fb;
+
+   err = register_framebuffer(fb_info);
+   if (err < 0)
+   goto release_fb;
+
+   sm750_dev->fb_count++;
+
+   return 0;
+
+release_fb:
+   framebuffer_release(fb_info);
+   return err;
+}
+
 static int lynxfb_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
 {
-   struct fb_info *info[] = {NULL, NULL};
struct sm750_dev *sm750_dev = NULL;
+   int max_fb;
int fbidx;
int err;
 
@@ -1081,66 +1113,18 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
/* call chipInit routine */
hw_sm750_inithw(sm750_dev, pdev);
 
-   /* allocate frame buffer info structor according to g_dualview */
-   fbidx = 0;
-ALLOC_FB:
-   err = -ENOMEM;
-   info[fbidx] = framebuffer_alloc(sizeof(struct lynxfb_par), &pdev->dev);
-   if (!info[fbidx]) {
-   pr_err("Could not allocate framebuffer #%d.\n", fbidx);
-   if (fbidx == 0)
-   goto err_info0_alloc;
-   else
-   goto err_info1_alloc;
-   } else {
-   struct lynxfb_par *par;
-
-   pr_info("framebuffer #%d alloc okay\n", fbidx);
-   sm750_dev->fbinfo[fbidx] = info[fbidx];
-   par = info[fbidx]->par;
-   par->dev = sm750_dev;
-
-   /* set fb_info structure */
-   if (lynxfb_set_fbinfo(info[fbidx], fbidx)) {
-   pr_err("Failed to initial fb_info #%d.\n", fbidx);
-   if (fbidx == 0)
-   goto err_info0_set;
-   else
-   goto err_info1_set;
-   }
-
-   /* register frame buffer */
-   pr_info("Ready to register framebuffer #%d.\n", fbidx);
-   err = register_framebuffer(info[fbidx]);
-   if (err < 0) {
-   pr_err("Failed to register fb_info #%d. err %d\n",
-  fbidx,
-  err);
-   if (fbidx == 0)
-   goto err_register0;
-   else
-   goto err_register1;
-   }
-   pr_info("Accomplished register framebuffer #%d.\n", fbidx);
+   /* allocate frame buffer info structures according to g_dualview */
+   max_fb = g_dualview ? 2 : 1;
+   for (fbidx = 0; fbidx < max_fb; fbidx++) {
+   err = sm750fb_frambuffer_alloc(sm750_dev, fbidx);
+   if (err)
+   goto release_fb;
}
 
-   /* no dual view by far */
-   fbidx++;
-   sm750_dev->fb_count++;
-   if (g_dualview && fbidx < 2)
-   goto ALLOC_FB;
-
return 0;
 
-err_register1:
-err_info1_set:
-   framebuffer_release(info[1]);
-err_info1_alloc:
-   unregister_framebuffer(info[0]);
-err_register0:
-err_info0_set:
-   framebuffer_release(info[0]);
-err_info0_alloc:
+release_fb:
+   sm750fb_frambuffer_release(sm750_dev);
 free_sm750_dev:
kfree(sm750_dev);
 disable_pci:
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 0/7] staging: sm750fb: refactor lynxfb_pci_probe

2016-01-17 Thread Mike Rapoport
Hi,

These patches refactor the lynxfb_pci_probe.

v4 changes:
* address Dan's comments

v3 changes:
* rebased on current Greg's staging-testing

v2 changes:
* add pci_disable_device on the cleanup path
* return actual error rather than ENODEV

Mike Rapoport (7):
  staging: sm750fb: disable PCI device if lynxfb_pci_probe fails
  staging: sm750fb: lynxfb_pci_probe: return actual errors
  staging: sm750fb: lynxfb_pci_remove: remove unused variable
  staging: sm750fb: replace dual member of sm750_dev with fb_count
  staging: sm750fb: introduce sm750fb_frambuffer_release
  staging: sm750fb: introduce sm750fb_frambuffer_alloc
  staging: sm750fb: lynxfb_pci_probe: remove some pr_info

 drivers/staging/sm750fb/sm750.c | 183 +---
 drivers/staging/sm750fb/sm750.h |   2 +-
 2 files changed, 80 insertions(+), 105 deletions(-)

-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 3/7] staging: sm750fb: lynxfb_pci_remove: remove unused variable

2016-01-17 Thread Mike Rapoport
The par variable in lynxfb_pci_remove is only assigned a value and never
used afterwards. Remove it.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 7eb3868..6ed4478 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1138,7 +1138,6 @@ static void lynxfb_pci_remove(struct pci_dev *pdev)
 {
struct fb_info *info;
struct sm750_dev *sm750_dev;
-   struct lynxfb_par *par;
int cnt;
 
cnt = 2;
@@ -1148,7 +1147,6 @@ static void lynxfb_pci_remove(struct pci_dev *pdev)
info = sm750_dev->fbinfo[cnt];
if (!info)
continue;
-   par = info->par;
 
unregister_framebuffer(info);
/* release frame buffer */
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 4/7] staging: sm750fb: replace dual member of sm750_dev with fb_count

2016-01-17 Thread Mike Rapoport
Will be used in futher refactoring of driver _probe and _remove methods.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 24 +---
 drivers/staging/sm750fb/sm750.h |  2 +-
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 6ed4478..1b3ab04 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -189,7 +189,7 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 * If not use spin_lock,system will die if user load driver
 * and immediately unload driver frequently (dual)
 */
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock);
 
sm750_dev->accel.de_fillrect(&sm750_dev->accel,
@@ -197,7 +197,7 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 region->dx, region->dy,
 region->width, region->height,
 color, rop);
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock);
 }
 
@@ -223,7 +223,7 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
 * If not use spin_lock, system will die if user load driver
 * and immediately unload driver frequently (dual)
 */
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock);
 
sm750_dev->accel.de_copyarea(&sm750_dev->accel,
@@ -231,7 +231,7 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
 base, pitch, Bpp, region->dx, region->dy,
 region->width, region->height,
 HW_ROP2_COPY);
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock);
 }
 
@@ -272,7 +272,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
 * If not use spin_lock, system will die if user load driver
 * and immediately unload driver frequently (dual)
 */
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_lock(&sm750_dev->slock);
 
sm750_dev->accel.de_imageblit(&sm750_dev->accel,
@@ -281,7 +281,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
  image->dx, image->dy,
  image->width, image->height,
  fgcol, bgcol, HW_ROP2_COPY);
-   if (sm750_dev->dual)
+   if (sm750_dev->fb_count > 1)
spin_unlock(&sm750_dev->slock);
 }
 
@@ -650,8 +650,10 @@ static int sm750fb_set_drv(struct lynxfb_par *par)
output = &par->output;
crtc = &par->crtc;
 
-   crtc->vidmem_size = (sm750_dev->dual) ? sm750_dev->vidmem_size >> 1 :
-sm750_dev->vidmem_size;
+   crtc->vidmem_size = sm750_dev->vidmem_size;
+   if (sm750_dev->fb_count > 1)
+   crtc->vidmem_size >>= 1;
+
/* setup crtc and output member */
sm750_dev->hwCursor = g_hwcursor;
 
@@ -981,7 +983,7 @@ static void sm750fb_setup(struct sm750_dev *sm750_dev, char 
*src)
 
 NO_PARAM:
if (sm750_dev->revid != SM750LE_REVISION_ID) {
-   if (sm750_dev->dual) {
+   if (sm750_dev->fb_count > 1) {
if (swap)
sm750_dev->dataflow = sm750_dual_swap;
else
@@ -1027,7 +1029,6 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
sm750_dev->mtrr_off = g_nomtrr;
sm750_dev->mtrr.vram = 0;
sm750_dev->accel_off = g_noaccel;
-   sm750_dev->dual = g_dualview;
spin_lock_init(&sm750_dev->slock);
 
if (!sm750_dev->accel_off) {
@@ -1113,7 +1114,8 @@ ALLOC_FB:
 
/* no dual view by far */
fbidx++;
-   if (sm750_dev->dual && fbidx < 2)
+   sm750_dev->fb_count++;
+   if (g_dualview && fbidx < 2)
goto ALLOC_FB;
 
return 0;
diff --git a/drivers/staging/sm750fb/sm750.h b/drivers/staging/sm750fb/sm750.h
index b0a93cd..fddffac 100644
--- a/drivers/staging/sm750fb/sm750.h
+++ b/drivers/staging/sm750fb/sm750.h
@@ -79,7 +79,7 @@ struct sm750_dev {
struct fb_info *fbinfo[2];
struct lynx_accel accel;
int accel_off;
-   int dual;
+   int fb_count;
int mtrr_off;
struct{
int vram;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 2/7] staging: sm750fb: lynxfb_pci_probe: return actual errors

2016-01-17 Thread Mike Rapoport
The lynxfb_pci_probe always returned -ENODEV in case of error. Modify it
so that actual error code will be propogated to the caller.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 37 +
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index c80b11c..7eb3868 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1006,18 +1006,17 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
struct fb_info *info[] = {NULL, NULL};
struct sm750_dev *sm750_dev = NULL;
int fbidx;
+   int err;
 
/* enable device */
-   if (pci_enable_device(pdev)) {
-   pr_err("can not enable device.\n");
-   goto err_enable;
-   }
+   err = pci_enable_device(pdev);
+   if (err)
+   return err;
 
+   err = -ENOMEM;
sm750_dev = kzalloc(sizeof(*sm750_dev), GFP_KERNEL);
-   if (!sm750_dev) {
-   pr_err("Could not allocate memory for share.\n");
-   goto err_share;
-   }
+   if (!sm750_dev)
+   goto disable_pci;
 
sm750_dev->fbinfo[0] = sm750_dev->fbinfo[1] = NULL;
sm750_dev->devid = pdev->device;
@@ -1051,10 +1050,9 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
sm750fb_setup(sm750_dev, g_settings);
 
/* call chip specific mmap routine */
-   if (hw_sm750_map(sm750_dev, pdev)) {
-   pr_err("Memory map failed\n");
-   goto err_map;
-   }
+   err = hw_sm750_map(sm750_dev, pdev);
+   if (err)
+   goto free_sm750_dev;
 
if (!sm750_dev->mtrr_off)
sm750_dev->mtrr.vram = arch_phys_wc_add(sm750_dev->vidmem_start,
@@ -1073,6 +1071,7 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
/* allocate frame buffer info structor according to g_dualview */
fbidx = 0;
 ALLOC_FB:
+   err = -ENOMEM;
info[fbidx] = framebuffer_alloc(sizeof(struct lynxfb_par), &pdev->dev);
if (!info[fbidx]) {
pr_err("Could not allocate framebuffer #%d.\n", fbidx);
@@ -1082,7 +1081,6 @@ ALLOC_FB:
goto err_info1_alloc;
} else {
struct lynxfb_par *par;
-   int errno;
 
pr_info("framebuffer #%d alloc okay\n", fbidx);
sm750_dev->fbinfo[fbidx] = info[fbidx];
@@ -1100,11 +1098,11 @@ ALLOC_FB:
 
/* register frame buffer */
pr_info("Ready to register framebuffer #%d.\n", fbidx);
-   errno = register_framebuffer(info[fbidx]);
-   if (errno < 0) {
+   err = register_framebuffer(info[fbidx]);
+   if (err < 0) {
pr_err("Failed to register fb_info #%d. err %d\n",
   fbidx,
-  errno);
+  err);
if (fbidx == 0)
goto err_register0;
else
@@ -1129,12 +1127,11 @@ err_register0:
 err_info0_set:
framebuffer_release(info[0]);
 err_info0_alloc:
-err_map:
+free_sm750_dev:
kfree(sm750_dev);
-err_share:
+disable_pci:
pci_disable_device(pdev);
-err_enable:
-   return -ENODEV;
+   return err;
 }
 
 static void lynxfb_pci_remove(struct pci_dev *pdev)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH RESEND v4 1/7] staging: sm750fb: disable PCI device if lynxfb_pci_probe fails

2016-01-17 Thread Mike Rapoport
In case of error during lynxfb_pci_probe, the function returned without
calling pci_disable_device. Fix it by adding pci_disable_device on the
error cleanup path.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index c78421b..c80b11c 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1132,6 +1132,7 @@ err_info0_alloc:
 err_map:
kfree(sm750_dev);
 err_share:
+   pci_disable_device(pdev);
 err_enable:
return -ENODEV;
 }
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 00/18] staging: sm750fb: change some register fields defines

2015-11-27 Thread Mike Rapoport
On Mon, Nov 16, 2015 at 09:59:49AM +0200, Mike Rapoport wrote:
> Hi,
> 
> This is the first set of patches that aim to replace custom defines for
> register fields. The ultimate goal is to have MSB:LSB notation for register
> fields and FIELD_* macros removed. 

I'd highly appreciate some feedback on these...
 
> Mike Rapoport (18):
>   staging: sm750fb: hw_sm750(le)_deWait: rename dwVal to val
>   staging: sm750fb: use BIT macro for DE_STATE1 single-bit field
>   staging: sm750fb: use BIT macro for DE_STATE2 single-bit fields
>   staging: sm750fb: remove unused DE_STATE2_DE_RESERVED
>   staging: sm750fb: use BIT macro for SYSTEM_CTRL single-bit fields
>   staging: sm750fb: change definition of SYSTEM_CTRL multi-bit fields
>   staging: sm750fb: ddk750_initHw: rename ulReg to reg
>   staging: sm750fb: use BIT macro for MISC_CTRL single-bit fields
>   staging: sm750fb: ddk750_sii164: fix defines for i2c{Read,Write}reg
>   staging: sm750fb: use BIT macro for GPIO_MUX single-bit fields
>   staging: sm750fb: change definition of MISC_CTRL multi-bit fields
>   staging: sm750fb: use BIT macro for CURRENT_GATE single-bit fields
>   staging: sm750fb: set{Memory,Master}Clock: rename ulReg to reg
>   staging: sm750fb: change definition of CURRENT_GATE multi-bit fields
>   staging: sm750fb: use BIT macro for MODE0_GATE single-bit fields
>   staging: sm750fb: change definition of MODE0_GATE multi-bit fields
>   staging: sm750fb: use BIT macro for POWER_MODE_CTRL single-bit fields
>   staging: sm750fb: change definition of POWER_MODE_CTRL multi-bit field
> 
>  drivers/staging/sm750fb/ddk750_chip.c|  83 +++--
>  drivers/staging/sm750fb/ddk750_display.c |  24 +-
>  drivers/staging/sm750fb/ddk750_hwi2c.c   |   7 +-
>  drivers/staging/sm750fb/ddk750_power.c   |  43 ++-
>  drivers/staging/sm750fb/ddk750_power.h   |  11 +-
>  drivers/staging/sm750fb/ddk750_reg.h | 503 
> ++-
>  drivers/staging/sm750fb/ddk750_sii164.c  |   4 +-
>  drivers/staging/sm750fb/sm750_hw.c   |  57 ++--
>  8 files changed, 256 insertions(+), 476 deletions(-)
> 
> -- 
> 1.9.1
> 
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v4 0/7] staging: sm750fb: refactor lynxfb_pci_probe

2015-11-27 Thread Mike Rapoport
On Sun, Nov 08, 2015 at 11:52:16AM +0200, Mike Rapoport wrote:
> Hi,
> 
> These patches refactor the lynxfb_pci_probe

Any comments on this? Should I resend?
 
> v4 changes:
> * address Dan's comments
> 
> v3 changes:
> * rebased on current Greg's staging-testing
> 
> v2 changes:
> * add pci_disable_device on the cleanup path
> * return actual error rather than ENODEV
> 
> 
> Mike Rapoport (7):
>   staging: sm750fb: disable PCI device if lynxfb_pci_probe fails
>   staging: sm750fb: lynxfb_pci_probe: return actual errors
>   staging: sm750fb: lynxfb_pci_remove: remove unused variable
>   staging: sm750fb: replace dual member of sm750_dev with fb_count
>   staging: sm750fb: introduce sm750fb_frambuffer_release
>   staging: sm750fb: introduce sm750fb_frambuffer_alloc
>   staging: sm750fb: lynxfb_pci_probe: remove some pr_info
> 
>  drivers/staging/sm750fb/sm750.c | 183 
> +---
>  drivers/staging/sm750fb/sm750.h |   2 +-
>  2 files changed, 80 insertions(+), 105 deletions(-)
> 
> -- 
> 1.9.1
> 
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 17/18] staging: sm750fb: use BIT macro for POWER_MODE_CTRL single-bit fields

2015-11-16 Thread Mike Rapoport
Replace complex definition of POWER_MODE_CTRL register fields with BIT()
macro and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_power.c | 10 --
 drivers/staging/sm750fb/ddk750_reg.h   | 12 +++-
 2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 4177025..4959482 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -60,17 +60,15 @@ void setPowerMode(unsigned int powerMode)
 
/* Set up other fields in Power Control Register */
if (powerMode == POWER_MODE_CTRL_MODE_SLEEP) {
-   control_value =
+   control_value &= ~POWER_MODE_CTRL_OSC_INPUT;
 #ifdef VALIDATION_CHIP
-   FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, OFF) |
+   control_value &= ~POWER_MODE_CTRL_336CLK;
 #endif
-   FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  OFF);
} else {
-   control_value =
+   control_value |= POWER_MODE_CTRL_OSC_INPUT;
 #ifdef VALIDATION_CHIP
-   FIELD_SET(control_value, POWER_MODE_CTRL, 336CLK, ON) |
+   control_value |= POWER_MODE_CTRL_336CLK;
 #endif
-   FIELD_SET(control_value, POWER_MODE_CTRL, OSC_INPUT,  ON);
}
 
/* Program new power mode. */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index d97859a..bc49b44 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -497,16 +497,10 @@
 
 #define POWER_MODE_CTRL   0x4C
 #ifdef VALIDATION_CHIP
-#define POWER_MODE_CTRL_336CLK4:4
-#define POWER_MODE_CTRL_336CLK_OFF0
-#define POWER_MODE_CTRL_336CLK_ON 1
+#define POWER_MODE_CTRL_336CLKBIT(4)
 #endif
-#define POWER_MODE_CTRL_OSC_INPUT 3:3
-#define POWER_MODE_CTRL_OSC_INPUT_OFF 0
-#define POWER_MODE_CTRL_OSC_INPUT_ON  1
-#define POWER_MODE_CTRL_ACPI  2:2
-#define POWER_MODE_CTRL_ACPI_OFF  0
-#define POWER_MODE_CTRL_ACPI_ON   1
+#define POWER_MODE_CTRL_OSC_INPUT BIT(3)
+#define POWER_MODE_CTRL_ACPI  BIT(2)
 #define POWER_MODE_CTRL_MODE  1:0
 #define POWER_MODE_CTRL_MODE_MODE00
 #define POWER_MODE_CTRL_MODE_MODE11
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/18] staging: sm750fb: use BIT macro for CURRENT_GATE single-bit fields

2015-11-16 Thread Mike Rapoport
Replace complex definition of CURRENT_GATE register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c  |  3 +--
 drivers/staging/sm750fb/ddk750_power.c | 18 +++---
 drivers/staging/sm750fb/ddk750_reg.h   | 44 +-
 3 files changed, 20 insertions(+), 45 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 36c2e50..b11231c 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -205,8 +205,7 @@ int ddk750_initHw(initchip_param_t *pInitParam)
 
/* Enable display power gate & LOCALMEM power gate*/
reg = PEEK32(CURRENT_GATE);
-   reg = FIELD_SET(reg, CURRENT_GATE, DISPLAY, ON);
-   reg = FIELD_SET(reg, CURRENT_GATE, LOCALMEM, ON);
+   reg |= (CURRENT_GATE_DISPLAY | CURRENT_GATE_LOCALMEM);
setCurrentGate(reg);
 
if (getChipType() != SM750LE) {
diff --git a/drivers/staging/sm750fb/ddk750_power.c 
b/drivers/staging/sm750fb/ddk750_power.c
index 1c5001c..4177025 100644
--- a/drivers/staging/sm750fb/ddk750_power.c
+++ b/drivers/staging/sm750fb/ddk750_power.c
@@ -112,11 +112,9 @@ void enable2DEngine(unsigned int enable)
 
gate = PEEK32(CURRENT_GATE);
if (enable) {
-   gate = FIELD_SET(gate, CURRENT_GATE, DE,  ON);
-   gate = FIELD_SET(gate, CURRENT_GATE, CSC, ON);
+   gate |= (CURRENT_GATE_DE | CURRENT_GATE_CSC);
} else {
-   gate = FIELD_SET(gate, CURRENT_GATE, DE,  OFF);
-   gate = FIELD_SET(gate, CURRENT_GATE, CSC, OFF);
+   gate &= ~(CURRENT_GATE_DE | CURRENT_GATE_CSC);
}
 
setCurrentGate(gate);
@@ -129,9 +127,9 @@ void enableDMA(unsigned int enable)
/* Enable DMA Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, DMA, ON);
+   gate |= CURRENT_GATE_DMA;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, DMA, OFF);
+   gate &= ~CURRENT_GATE_DMA;
 
setCurrentGate(gate);
 }
@@ -146,9 +144,9 @@ void enableGPIO(unsigned int enable)
/* Enable GPIO Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, GPIO, ON);
+   gate |= CURRENT_GATE_GPIO;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, GPIO, OFF);
+   gate &= ~CURRENT_GATE_GPIO;
 
setCurrentGate(gate);
 }
@@ -163,9 +161,9 @@ void enableI2C(unsigned int enable)
/* Enable I2C Gate */
gate = PEEK32(CURRENT_GATE);
if (enable)
-   gate = FIELD_SET(gate, CURRENT_GATE, I2C, ON);
+   gate |= CURRENT_GATE_I2C;
else
-   gate = FIELD_SET(gate, CURRENT_GATE, I2C, OFF);
+   gate &= ~CURRENT_GATE_I2C;
 
setCurrentGate(gate);
 }
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 72eaf19..e3ca832 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -415,39 +415,17 @@
 #define CURRENT_GATE_M2XCLK_DIV_3 2
 #define CURRENT_GATE_M2XCLK_DIV_4 3
 #endif
-#define CURRENT_GATE_VGA  10:10
-#define CURRENT_GATE_VGA_OFF  0
-#define CURRENT_GATE_VGA_ON   1
-#define CURRENT_GATE_PWM  9:9
-#define CURRENT_GATE_PWM_OFF  0
-#define CURRENT_GATE_PWM_ON   1
-#define CURRENT_GATE_I2C  8:8
-#define CURRENT_GATE_I2C_OFF  0
-#define CURRENT_GATE_I2C_ON   1
-#define CURRENT_GATE_SSP  7:7
-#define CURRENT_GATE_SSP_OFF  0
-#define CURRENT_GATE_SSP_ON   1
-#define CURRENT_GATE_GPIO 6:6
-#define CURRENT_GATE_GPIO_OFF 0
-#define CURRENT_GATE_GPIO_ON  1
-#define CURRENT_GATE_ZVPORT   5:5
-#define CURRENT_GATE_ZVPORT_OFF   0
-#define CURRENT_GATE_ZVPORT_ON1
-#define CURRENT_GATE_CSC  4:4
-#define CURRENT_GATE_CSC_OFF  0
-#define CURRENT_GATE_CSC_ON   1
-#define CURRENT_GATE_DE   3:3
-#define CURRENT_GATE_DE_OFF   0
-#define CURRENT_GATE_DE_ON1
-#define CURRENT_GATE_DISPLAY  2:2
-#define CURRENT_GATE_DISPLAY_OFF  0
-#define CURRENT_GATE_DISPLAY_ON   1
-#define CURRENT_GATE_LOCALMEM

[PATCH 13/18] staging: sm750fb: set{Memory, Master}Clock: rename ulReg to reg

2015-11-16 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c | 28 ++--
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index b11231c..37c52a3 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -79,7 +79,7 @@ static void setChipClock(unsigned int frequency)
 
 static void setMemoryClock(unsigned int frequency)
 {
-   unsigned int ulReg, divisor;
+   unsigned int reg, divisor;
 
/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. 
*/
if (getChipType() == SM750LE)
@@ -95,24 +95,24 @@ static void setMemoryClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   ulReg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE);
switch (divisor) {
default:
case 1:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_1);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_1);
break;
case 2:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_2);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_2);
break;
case 3:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_3);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_3);
break;
case 4:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, M2XCLK, DIV_4);
+   reg = FIELD_SET(reg, CURRENT_GATE, M2XCLK, DIV_4);
break;
}
 
-   setCurrentGate(ulReg);
+   setCurrentGate(reg);
}
 }
 
@@ -126,7 +126,7 @@ static void setMemoryClock(unsigned int frequency)
  */
 static void setMasterClock(unsigned int frequency)
 {
-   unsigned int ulReg, divisor;
+   unsigned int reg, divisor;
 
/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. 
*/
if (getChipType() == SM750LE)
@@ -142,24 +142,24 @@ static void setMasterClock(unsigned int frequency)
divisor = roundedDiv(get_mxclk_freq(), frequency);
 
/* Set the corresponding divisor in the register. */
-   ulReg = PEEK32(CURRENT_GATE);
+   reg = PEEK32(CURRENT_GATE);
switch (divisor) {
default:
case 3:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_3);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_3);
break;
case 4:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_4);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_4);
break;
case 6:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_6);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_6);
break;
case 8:
-   ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_8);
+   reg = FIELD_SET(reg, CURRENT_GATE, MCLK, DIV_8);
break;
}
 
-   setCurrentGate(ulReg);
+   setCurrentGate(reg);
}
 }
 
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/18] staging: sm750fb: ddk750_sii164: fix defines for i2c{Read, Write}reg

2015-11-16 Thread Mike Rapoport
For case when USE_HW_I2C is not defined, i2c{Read,Write}reg was wrongly
defined to use old function names.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_sii164.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_sii164.c 
b/drivers/staging/sm750fb/ddk750_sii164.c
index 241b77b..9fd6afb 100644
--- a/drivers/staging/sm750fb/ddk750_sii164.c
+++ b/drivers/staging/sm750fb/ddk750_sii164.c
@@ -14,8 +14,8 @@
 #define i2cWriteReg sm750_hw_i2c_write_reg
 #define i2cReadReg  sm750_hw_i2c_read_reg
 #else
-#define i2cWriteReg swI2CWriteReg
-#define i2cReadReg  swI2CReadReg
+#define i2cWriteReg sm750_sw_i2c_write_reg
+#define i2cReadReg  sm750_sw_i2c_read_reg
 #endif
 
 /* SII164 Vendor and Device ID */
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/18] staging: sm750fb: change definition of MISC_CTRL multi-bit fields

2015-11-16 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of MISC_CTRL
register and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_chip.c |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h  | 28 ++--
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 08b4905..36c2e50 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -178,7 +178,7 @@ unsigned int ddk750_getVMSize(void)
POKE32(MODE0_GATE, reg);
 
/* get frame buffer size from GPIO */
-   reg = FIELD_GET(PEEK32(MISC_CTRL), MISC_CTRL, LOCALMEM_SIZE);
+   reg = PEEK32(MISC_CTRL) & MISC_CTRL_LOCALMEM_SIZE_MASK;
switch (reg) {
case MISC_CTRL_LOCALMEM_SIZE_8M:
data = SZ_8M;  break; /* 8  Mega byte */
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6df5076..72eaf19 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -43,24 +43,24 @@
 
 #define MISC_CTRL 0x04
 #define MISC_CTRL_DRAM_RERESH_COUNT   BIT(27)
-#define MISC_CTRL_DRAM_REFRESH_TIME   26:25
-#define MISC_CTRL_DRAM_REFRESH_TIME_8 0
-#define MISC_CTRL_DRAM_REFRESH_TIME_161
-#define MISC_CTRL_DRAM_REFRESH_TIME_322
-#define MISC_CTRL_DRAM_REFRESH_TIME_643
+#define MISC_CTRL_DRAM_REFRESH_TIME_MASK  (0x3 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_8 (0x0 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_16(0x1 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_32(0x2 << 25)
+#define MISC_CTRL_DRAM_REFRESH_TIME_64(0x3 << 25)
 #define MISC_CTRL_INT_OUTPUT_INVERT   BIT(24)
 #define MISC_CTRL_PLL_CLK_COUNT   BIT(23)
 #define MISC_CTRL_DAC_POWER_OFF   BIT(20)
 #define MISC_CTRL_CLK_SELECT_TESTCLK  BIT(16)
-#define MISC_CTRL_DRAM_COLUMN_SIZE15:14
-#define MISC_CTRL_DRAM_COLUMN_SIZE_2560
-#define MISC_CTRL_DRAM_COLUMN_SIZE_5121
-#define MISC_CTRL_DRAM_COLUMN_SIZE_1024   2
-#define MISC_CTRL_LOCALMEM_SIZE   13:12
-#define MISC_CTRL_LOCALMEM_SIZE_8M3
-#define MISC_CTRL_LOCALMEM_SIZE_16M   0
-#define MISC_CTRL_LOCALMEM_SIZE_32M   1
-#define MISC_CTRL_LOCALMEM_SIZE_64M   2
+#define MISC_CTRL_DRAM_COLUMN_SIZE_MASK   (0x3 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_256(0x0 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_512(0x1 << 14)
+#define MISC_CTRL_DRAM_COLUMN_SIZE_1024   (0x2 << 14)
+#define MISC_CTRL_LOCALMEM_SIZE_MASK  (0x3 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_8M(0x3 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_16M   (0x0 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_32M   (0x1 << 12)
+#define MISC_CTRL_LOCALMEM_SIZE_64M   (0x2 << 12)
 #define MISC_CTRL_DRAM_TWTR   BIT(11)
 #define MISC_CTRL_DRAM_TWRBIT(10)
 #define MISC_CTRL_DRAM_TRPBIT(9)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/18] staging: sm750fb: use BIT macro for GPIO_MUX single-bit fields

2015-11-16 Thread Mike Rapoport
Replace complex definition of GPIO_MUX register fields with BIT() macro
and use open-coded implementation for register manipulations.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_hwi2c.c |   7 +-
 drivers/staging/sm750fb/ddk750_reg.h   | 128 +
 2 files changed, 35 insertions(+), 100 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_hwi2c.c 
b/drivers/staging/sm750fb/ddk750_hwi2c.c
index 7be2111..b824681e5 100644
--- a/drivers/staging/sm750fb/ddk750_hwi2c.c
+++ b/drivers/staging/sm750fb/ddk750_hwi2c.c
@@ -17,8 +17,7 @@ unsigned char bus_speed_mode
/* Enable GPIO 30 & 31 as IIC clock & data */
value = PEEK32(GPIO_MUX);
 
-   value = FIELD_SET(value, GPIO_MUX, 30, I2C) |
- FIELD_SET(0, GPIO_MUX, 31, I2C);
+   value |= (GPIO_MUX_30 | GPIO_MUX_31);
POKE32(GPIO_MUX, value);
 
/* Enable Hardware I2C power.
@@ -52,8 +51,8 @@ void sm750_hw_i2c_close(void)
 
/* Set GPIO 30 & 31 back as GPIO pins */
value = PEEK32(GPIO_MUX);
-   value = FIELD_SET(value, GPIO_MUX, 30, GPIO);
-   value = FIELD_SET(value, GPIO_MUX, 31, GPIO);
+   value &= ~GPIO_MUX_30;
+   value &= ~GPIO_MUX_31;
POKE32(GPIO_MUX, value);
 }
 
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 6fef904..6df5076 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -75,102 +75,38 @@
 #define MISC_CTRL_EMBEDDED_LOCALMEM_OFF   BIT(0)
 
 #define GPIO_MUX  0x08
-#define GPIO_MUX_31   31:31
-#define GPIO_MUX_31_GPIO  0
-#define GPIO_MUX_31_I2C   1
-#define GPIO_MUX_30   30:30
-#define GPIO_MUX_30_GPIO  0
-#define GPIO_MUX_30_I2C   1
-#define GPIO_MUX_29   29:29
-#define GPIO_MUX_29_GPIO  0
-#define GPIO_MUX_29_SSP1  1
-#define GPIO_MUX_28   28:28
-#define GPIO_MUX_28_GPIO  0
-#define GPIO_MUX_28_SSP1  1
-#define GPIO_MUX_27   27:27
-#define GPIO_MUX_27_GPIO  0
-#define GPIO_MUX_27_SSP1  1
-#define GPIO_MUX_26   26:26
-#define GPIO_MUX_26_GPIO  0
-#define GPIO_MUX_26_SSP1  1
-#define GPIO_MUX_25   25:25
-#define GPIO_MUX_25_GPIO  0
-#define GPIO_MUX_25_SSP1  1
-#define GPIO_MUX_24   24:24
-#define GPIO_MUX_24_GPIO  0
-#define GPIO_MUX_24_SSP0  1
-#define GPIO_MUX_23   23:23
-#define GPIO_MUX_23_GPIO  0
-#define GPIO_MUX_23_SSP0  1
-#define GPIO_MUX_22   22:22
-#define GPIO_MUX_22_GPIO  0
-#define GPIO_MUX_22_SSP0  1
-#define GPIO_MUX_21   21:21
-#define GPIO_MUX_21_GPIO  0
-#define GPIO_MUX_21_SSP0  1
-#define GPIO_MUX_20   20:20
-#define GPIO_MUX_20_GPIO  0
-#define GPIO_MUX_20_SSP0  1
-#define GPIO_MUX_19   19:19
-#define GPIO_MUX_19_GPIO  0
-#define GPIO_MUX_19_PWM   1
-#define GPIO_MUX_18   18:18
-#define GPIO_MUX_18_GPIO  0
-#define GPIO_MUX_18_PWM   1
-#define GPIO_MUX_17   17:17
-#define GPIO_MUX_17_GPIO  0
-#define GPIO_MUX_17_PWM   1
-#define GPIO_MUX_16   16:16
-#define GPIO_MUX_16_GPIO_ZVPORT   0
-#define GPIO_MUX_16_TEST_DATA 1
-#define GPIO_MUX_15   15:15
-#define GPIO_MUX_15_GPIO_ZVPORT   0
-#define GPIO_MUX_15_TEST_DATA 1
-#define GPIO_MUX_14   14:14
-#define GPIO_MUX_14_GPIO_ZVPORT   0
-#define GPIO_MUX_14_TEST_DATA 1
-#define GPIO_MUX_13   13:13
-#define GPIO_MUX_13_GPIO_ZVPORT   0
-#define GPIO_MUX_13_TEST_DATA 1

[PATCH 01/18] staging: sm750fb: hw_sm750(le)_deWait: rename dwVal to val

2015-11-16 Thread Mike Rapoport
Remove HungarianCamelCase notation

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/sm750_hw.c | 16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 41822c6..f9908d9 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -495,11 +495,11 @@ int hw_sm750le_deWait(void)
int i = 0x1000;
 
while (i--) {
-   unsigned int dwVal = PEEK32(DE_STATE2);
+   unsigned int val = PEEK32(DE_STATE2);
 
-   if ((FIELD_GET(dwVal, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
-   (FIELD_GET(dwVal, DE_STATE2, DE_FIFO)  == 
DE_STATE2_DE_FIFO_EMPTY) &&
-   (FIELD_GET(dwVal, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
+   if ((FIELD_GET(val, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
+   (FIELD_GET(val, DE_STATE2, DE_FIFO) == 
DE_STATE2_DE_FIFO_EMPTY) &&
+   (FIELD_GET(val, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
return 0;
}
}
@@ -513,11 +513,11 @@ int hw_sm750_deWait(void)
int i = 0x1000;
 
while (i--) {
-   unsigned int dwVal = PEEK32(SYSTEM_CTRL);
+   unsigned int val = PEEK32(SYSTEM_CTRL);
 
-   if ((FIELD_GET(dwVal, SYSTEM_CTRL, DE_STATUS) == 
SYSTEM_CTRL_DE_STATUS_IDLE) &&
-   (FIELD_GET(dwVal, SYSTEM_CTRL, DE_FIFO)  == 
SYSTEM_CTRL_DE_FIFO_EMPTY) &&
-   (FIELD_GET(dwVal, SYSTEM_CTRL, DE_MEM_FIFO) == 
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY)) {
+   if ((FIELD_GET(val, SYSTEM_CTRL, DE_STATUS) == 
SYSTEM_CTRL_DE_STATUS_IDLE) &&
+   (FIELD_GET(val, SYSTEM_CTRL, DE_FIFO) == 
SYSTEM_CTRL_DE_FIFO_EMPTY) &&
+   (FIELD_GET(val, SYSTEM_CTRL, DE_MEM_FIFO) == 
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY)) {
return 0;
}
}
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 16/18] staging: sm750fb: change definition of MODE0_GATE multi-bit fields

2015-11-16 Thread Mike Rapoport
Use more straight-forward definitions for multi-bit fields of MODE0_GATE
register.

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 70b1567..d97859a 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -428,16 +428,16 @@
 #define CURRENT_GATE_DMA  BIT(0)
 
 #define MODE0_GATE0x44
-#define MODE0_GATE_MCLK   15:14
-#define MODE0_GATE_MCLK_112MHZ0
-#define MODE0_GATE_MCLK_84MHZ 1
-#define MODE0_GATE_MCLK_56MHZ 2
-#define MODE0_GATE_MCLK_42MHZ 3
-#define MODE0_GATE_M2XCLK 13:12
-#define MODE0_GATE_M2XCLK_336MHZ  0
-#define MODE0_GATE_M2XCLK_168MHZ  1
-#define MODE0_GATE_M2XCLK_112MHZ  2
-#define MODE0_GATE_M2XCLK_84MHZ   3
+#define MODE0_GATE_MCLK_MASK  (0x3 << 14)
+#define MODE0_GATE_MCLK_112MHZ(0x0 << 14)
+#define MODE0_GATE_MCLK_84MHZ (0x1 << 14)
+#define MODE0_GATE_MCLK_56MHZ (0x2 << 14)
+#define MODE0_GATE_MCLK_42MHZ (0x3 << 14)
+#define MODE0_GATE_M2XCLK_MASK(0x3 << 12)
+#define MODE0_GATE_M2XCLK_336MHZ  (0x0 << 12)
+#define MODE0_GATE_M2XCLK_168MHZ  (0x1 << 12)
+#define MODE0_GATE_M2XCLK_112MHZ  (0x2 << 12)
+#define MODE0_GATE_M2XCLK_84MHZ   (0x3 << 12)
 #define MODE0_GATE_VGABIT(10)
 #define MODE0_GATE_PWMBIT(9)
 #define MODE0_GATE_I2CBIT(8)
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/18] staging: sm750fb: use BIT macro for DE_STATE2 single-bit fields

2015-11-16 Thread Mike Rapoport
Replace complex definition of DE_STATE1 fields and usage of FIELD_GET
with BIT() macro and open-coded register value modifications

Signed-off-by: Mike Rapoport 
---
 drivers/staging/sm750fb/ddk750_reg.h | 12 +++-
 drivers/staging/sm750fb/sm750_hw.c   |  8 
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 7bbe53a..db13bdf 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -6,15 +6,9 @@
 #define DE_STATE1_DE_ABORT   BIT(0)
 
 #define DE_STATE20x100058
-#define DE_STATE2_DE_FIFO3:3
-#define DE_STATE2_DE_FIFO_NOTEMPTY   0
-#define DE_STATE2_DE_FIFO_EMPTY  1
-#define DE_STATE2_DE_STATUS  2:2
-#define DE_STATE2_DE_STATUS_IDLE 0
-#define DE_STATE2_DE_STATUS_BUSY 1
-#define DE_STATE2_DE_MEM_FIFO1:1
-#define DE_STATE2_DE_MEM_FIFO_NOTEMPTY   0
-#define DE_STATE2_DE_MEM_FIFO_EMPTY  1
+#define DE_STATE2_DE_FIFO_EMPTY  BIT(3)
+#define DE_STATE2_DE_STATUS_BUSY BIT(2)
+#define DE_STATE2_DE_MEM_FIFO_EMPTY  BIT(1)
 #define DE_STATE2_DE_RESERVED0:0
 
 
diff --git a/drivers/staging/sm750fb/sm750_hw.c 
b/drivers/staging/sm750fb/sm750_hw.c
index 5754af5..425bec8 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -493,15 +493,15 @@ void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
 int hw_sm750le_deWait(void)
 {
int i = 0x1000;
+   unsigned int mask = DE_STATE2_DE_STATUS_BUSY | DE_STATE2_DE_FIFO_EMPTY |
+   DE_STATE2_DE_MEM_FIFO_EMPTY;
 
while (i--) {
unsigned int val = PEEK32(DE_STATE2);
 
-   if ((FIELD_GET(val, DE_STATE2, DE_STATUS) == 
DE_STATE2_DE_STATUS_IDLE) &&
-   (FIELD_GET(val, DE_STATE2, DE_FIFO) == 
DE_STATE2_DE_FIFO_EMPTY) &&
-   (FIELD_GET(val, DE_STATE2, DE_MEM_FIFO) == 
DE_STATE2_DE_MEM_FIFO_EMPTY)) {
+   if ((val & mask) ==
+   (DE_STATE2_DE_FIFO_EMPTY | DE_STATE2_DE_MEM_FIFO_EMPTY))
return 0;
-   }
}
/* timeout error */
return -1;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


  1   2   3   >