[patch] staging: wilc1000: fix mgmt_tx()
There was a missing curly brace so this function returns failure instead of succeeding. Fixes: 06fb9336acdc ('staging: wilc1000: wilc_wfi_cfgoperations.c: replaces PRINT_ER with netdev_err') Signed-off-by: Dan Carpenter diff --git a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c index bf264d3..97d1b80 100644 --- a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c +++ b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c @@ -1832,9 +1832,10 @@ static int mgmt_tx(struct wiphy *wiphy, return -EFAULT; mgmt_tx->buff = kmalloc(buf_len, GFP_KERNEL); - if (!mgmt_tx->buff) + if (!mgmt_tx->buff) { kfree(mgmt_tx); - return -EFAULT; + return -ENOMEM; + } memcpy(mgmt_tx->buff, buf, len); mgmt_tx->size = len; ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [patch] staging: wilc1000: fix mgmt_tx()
Am 10.02.2016 10:05, schrieb Dan Carpenter: > There was a missing curly brace so this function returns failure instead > of succeeding. > > Fixes: 06fb9336acdc ('staging: wilc1000: wilc_wfi_cfgoperations.c: replaces > PRINT_ER with netdev_err') > Signed-off-by: Dan Carpenter > > diff --git a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c > b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c > index bf264d3..97d1b80 100644 > --- a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c > +++ b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c > @@ -1832,9 +1832,10 @@ static int mgmt_tx(struct wiphy *wiphy, > return -EFAULT; > > mgmt_tx->buff = kmalloc(buf_len, GFP_KERNEL); > - if (!mgmt_tx->buff) > + if (!mgmt_tx->buff) { > kfree(mgmt_tx); > - return -EFAULT; > + return -ENOMEM; > + } > > memcpy(mgmt_tx->buff, buf, len); > mgmt_tx->size = len; perhaps this is a case for kmemdup() ? mgmt_tx->buff = kmemdup(buf, buf_len or len ?, GFP_KERNEL); sorry, i can not see what len from this patch. re, wh ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH net] hv_netvsc: Restore needed_headroom request
Vitaly Kuznetsov writes: > Commit c0eb454034aa ("hv_netvsc: Don't ask for additional head room in the > skb") got rid of needed_headroom setting for the driver. With the change I > hit the following issue trying to use ptkgen module: > > [ 57.522021] kernel BUG at net/core/skbuff.c:1128! > [ 57.522021] invalid opcode: [#1] SMP DEBUG_PAGEALLOC > ... > [ 58.721068] Call Trace: > [ 58.721068] [] netvsc_start_xmit+0x4c6/0x8e0 [hv_netvsc] > ... > [ 58.721068] [] ? pktgen_finalize_skb+0x25c/0x2a0 > [pktgen] > [ 58.721068] [] ? __netdev_alloc_skb+0xc0/0x100 > [ 58.721068] [] pktgen_thread_worker+0x257/0x1920 > [pktgen] > > Basically, we're calling skb_cow_head(skb, RNDIS_AND_PPI_SIZE) and crash on > if (skb_shared(skb)) > BUG(); > > We probably need to restore needed_headroom setting (but shrunk to > RNDIS_AND_PPI_SIZE as we don't need more) to request the required headroom > space. In theory, it should not give us performance penalty. I'm sorry for the ping but this is kind of a regression and it would be nice to have it fixed in 4.5. Here is a script to trigger kernel crash: #! /bin/sh modprobe pktgen echo "rem_device_all" > /proc/net/pktgen/kpktgend_0 echo "add_device eth0" > /proc/net/pktgen/kpktgend_0 echo "pkt_size 60" > /proc/net/pktgen/eth0 echo "clone_skb 100" > /proc/net/pktgen/eth0 echo "count 10" > /proc/net/pktgen/eth0 echo "dst " > /proc/net/pktgen/eth0 echo "dst_mac " > /proc/net/pktgen/eth0 echo "start" > /proc/net/pktgen/pgctrl cat /proc/net/pktgen/eth0 Please review. > > Signed-off-by: Vitaly Kuznetsov > --- > drivers/net/hyperv/netvsc_drv.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c > index 1d3a665..98e34fe 100644 > --- a/drivers/net/hyperv/netvsc_drv.c > +++ b/drivers/net/hyperv/netvsc_drv.c > @@ -1089,6 +1089,9 @@ static int netvsc_probe(struct hv_device *dev, > net->ethtool_ops = ðtool_ops; > SET_NETDEV_DEV(net, &dev->device); > > + /* We always need headroom for rndis header */ > + net->needed_headroom = RNDIS_AND_PPI_SIZE; > + > /* Notify the netvsc driver of the new device */ > memset(&device_info, 0, sizeof(device_info)); > device_info.ring_size = ring_size; -- Vitaly ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH net] hv_netvsc: Restore needed_headroom request
From: Vitaly Kuznetsov Date: Wed, 10 Feb 2016 11:05:50 +0100 > I'm sorry for the ping but this is kind of a regression and it would be > nice to have it fixed in 4.5. In case you can't figure it out, I'm several days backlogged and busy conferencing, travelling, etc. so there will be up to another week of latency in dealing with any patch or request on my part. ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 01/30] staging: sm750fb: formatPllReg: rename ulPllReg to reg
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 02/30] staging: sm750fb: formatPllReg: fix comment formatting
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 03/30] staging: sm750fb: rename PANEL_PLL_CTRL_* fields to PLL_CTRL_*
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 15:14 +#define PLL_CTRL_OD
[PATCH 06/30] staging: sm750fb: change defintion of PANEL_PLL_CTRL multi-bit fields
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 07/30] staging: sm750fb: drop redundant defines for PLL_CTRL fields
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 04/30] staging: sm750fb: use PLL_CTRL_POWER defines for CRT_PLL_CTRL
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
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 fi
[PATCH 05/30] staging: sm750fb: use BIT macro for PLL_CTRL single-bit fields
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 09/30] staging: sm750fb: change definition of VGA_CONFIGURATION multi-bit field
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
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, CRT_DISPLAY_CTRL, TIMING, ENABLE);
[PATCH 08/30] staging: sm750fb: use BIT macro for VGA_CONFIGURATION single-bit fields
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 14/30] staging: sm750fb: refactor setDisplayControl function
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)); - printk("Set Crt Plane enbit:after tried
[PATCH 13/30] staging: sm750fb: merge reserved bits of PANEL/CRT_DISPLAY_CTRL registers
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 1 @@
[PATCH 15/30] staging: sm750fb: hw_sm750_setBLANK: reduce printk verbosity
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 17/30] staging: sm750fb: remove PANEL_DISPLAY_CTRL_TFT_DISP defines
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 18/30] staging: sm750fb: change definition of PANEL_DISPLAY_CTRL multi-bit fields
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 */ POKE32(CRT_FB_ADDRESS, crtc->oScreen); -- 1.9.1 ___ devel mailing list de...@linuxd
[PATCH 19/30] staging: sm750fb: change definition of PANEL_FB_ADDRESS fields
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 20/30] staging: sm750fb: change definition of PANEL_FB_WIDTH fields
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
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 23/30] staging: sm750fb: change definition of PANEL_PLANE_TL fields
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
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
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 27/30] staging: sm750fb: change definition of CRT_DISPLAY_CTRL multi-bit fields
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_0 0 -#define CRT_DISPLAY_CTRL_DPMS_1 1 -#define CRT_DISPLAY_CTRL_DPMS_2
[PATCH 22/30] staging: sm750fb: change definition of PANEL_WINDOW_HEIGHT fields
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 29/30] staging: sm750fb: use BIT macro for I2C_STATUS fields
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 28/30] staging: sm750fb: use BIT macro for I2C_CTRL fields
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 30/30] staging: sm750fb: change definition of PANEL_HORIZONTAL_TOTAL fields
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 26/30] staging: sm750fb: use BIT macro for CRT_DISPLAY_CTRL single-bit fields
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 1 +#def
[PATCH 00/30] staging: sm750fb: change some register fields defines
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 10/30] staging: sm750fb: programModeRegisters: rename local vairables
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) break; - POKE32(PANEL_DISPLAY_CTRL, ulTmpValu
[PATCH 16/30] staging: sm750fb: use BIT macro for PANEL_DISPLAY_CTRL single-bit fields
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_CTRL); - reg = FIELD_VALUE(reg, PANEL_D
Fwd: Re: wilc1000 staging driver initialization failure
Sorry for the mass forward, I was instructed to email more than just the linux-wireless mailing list. Any help would be appreciated. Thanks! -Andrew Forwarded Message Subject: Re: wilc1000 staging driver initialization failure Date: Thu, 4 Feb 2016 13:26:04 -0500 From: Andrew Boyce To: linux-wireless-u79uwxl29ty76z2rm5m...@public.gmane.org Newsgroups: gmane.linux.kernel.wireless.general References: I've enabled more debugging. The core of the issue seems to be that wilc_lock_timeout() is for some reason failing to down_timeout(). I do not currently understand enough of the internals to understand why. [ 6852.53] wilc1000: module is from the staging directory, the quality is unknown, you have been warned. [ 6852.57] wilc1000_sdio: module is from the staging directory, the quality is unknown, you have been warned. [ 6852.58] wilc1000_sdio mmc0:0001:1: Initializing netdev [ 6852.58] DBG [wilc_create_wiphy: 2783]Registering wifi device [ 6852.58] DBG [WILC_WFI_CfgAlloc: 2747]Allocating wireless device [ 6852.58] INFO [wilc_create_wiphy]Max number of PMKIDs = 16 [ 6852.58] INFO [wilc_create_wiphy]Max scan ids = 10,Max scan IE len = 1000,Signal Type = 1,Interface Modes = 844,Interface Type = 2 [ 6852.58] DBG [wilc_create_wiphy: 2822]Successful Registering [ 6852.58] DBG [wilc_create_wiphy: 2783]Registering wifi device [ 6852.58] DBG [WILC_WFI_CfgAlloc: 2747]Allocating wireless device [ 6852.58] INFO [wilc_create_wiphy]Max number of PMKIDs = 16 [ 6852.58] INFO [wilc_create_wiphy]Max scan ids = 10,Max scan IE len = 1000,Signal Type = 1,Interface Modes = 844,Interface Type = 2 [ 6852.58] DBG [wilc_create_wiphy: 2822]Successful Registering [ 6852.58] wilc1000_sdio mmc0:0001:1: Driver Initializing success [ 6856.90] DBG [wilc_mac_open: 1020]MAC OPEN[cd8c9000] [ 6856.90] DBG [wilc_init_host_int: 2835]Host[cd8c9000][cd97cd00] [ 6856.90] DBG [wilc_init: 3790]Initializing host interface for client 1 [ 6856.90] DBG [wilc_init: 3810]Global handle pointer value=cee0f400 [ 6856.90] DBG [wilc_init: 3824]INIT: CLIENT COUNT 0 [ 6856.90] INFO [wilc_init]Initialization values, Site survey value: 2 Scan source: 0 Active scan time: 10 Passive scan time: 1200 Current tx Rate = 0 [ 6856.90] DBG [wilc_mac_open: 1029]*** re-init *** [ 6856.90] DBG [wlan_init_locks: 809]Initializing Locks ... [ 6856.90] DBG [wilc_wlan_init: 1593]Initializing WILC_Wlan ... [ 6856.90] ERR [wilc1000_wlan_init: 900]Initializing WILC_Wlan FAILED [ 6856.90] ERR [wilc1000_wlan_init: 900]Initializing WILC_Wlan FAILED [ 6856.90] DBG [wlan_deinit_locks: 835]De-Initializing Locks [ 6856.90] ERR [wilc1000_wlan_init: 983]WLAN Iinitialization FAILED [ 6856.90] ERR [wilc1000_wlan_init: 983]WLAN Iinitialization FAILED [ 6856.90] ERR [wilc_mac_open: 1032]Failed to initialize wilc1000 [ 6856.90] ERR [wilc_mac_open: 1032]Failed to initialize wilc1000 [ 6856.90] DBG [wilc_deinit: 3896]De-initializing host interface for client 1 [ 6856.90] DBG [wilc_deinit: 3905]>> Connect timer is active [ 6856.90] DBG [wilc_send_config_pkt: 619]Sending config SET PACKET WID:2085 [ 6856.90] Sending config SET PACKET WID:2085 [ 6856.90] Sending config SET PACKET val: [ 6856.90] DBG [wilc_wlan_cfg_set: 1443][WILC]PACKET Commit with sequence number 0 [ 6856.90] [WILC]PACKET Commit with sequence number 0 [ 6856.90] DBG [wilc_wlan_cfg_set: 1446]Processing cfg_set() [ 6856.90] Processing cfg_set() [ 6856.90] DBG [wilc_wlan_txq_add_cfg_pkt: 368]Adding config packet ... [ 6856.90] DBG [wilc_wlan_txq_add_cfg_pkt: 389]Adding the config packet at the Queue tail [ 6856.90] DBG [wilc_lock_timeout: 257]Locking cd9eb82c [ 6856.90] Locking cd9eb82c [ 6856.90] timeout 2000 [ 6856.90] Failed, mutex is NULL [ 6856.90] DBG [wilc_wlan_txq_add_to_head: 150]Number of entries in TxQ = 1 [ 6856.90] DBG [wilc_wlan_txq_add_to_head: 155]Wake up the txq_handler [ 6856.90] DBG [wilc_lock_timeout: 257]Locking cd9eb850 [ 6856.90] Locking cd9eb850 [ 6856.90] timeout 2000 [ 6858.90] Failed, mutex is NULL [ 6858.90] DBG [hostIFthread: 2793]THREAD: Exiting HostIfThread [ 6858.90] DBG [hostIFthread: 2989]Releasing thread exit semaphore [ 6858.90] INFO [clear_shadow_scan]destroy aging timer [ 6858.90] DBG [wilc_deinit_host_int: 2878]destroy during ip Any help would be appreciated. Thanks! -Andrew On 2/3/16 6:09 PM, Andrew Boyce wrote: I've been working to build and test the staging wilc1000-sdio driver and have run into a problem. I've built a kernel from Greg KH's staging-testing branch and loaded it onto our device. When I try to bring the interface up, I get the following: root@test:~# ifconfig wlan0 up kernel: [ 3510.40] DBG [wilc_mac_open: 1014]MAC OPEN[cef2] kernel: [ 3510.40] DBG [wilc_init_host_int: 2835]Host[cef2][cd0df1c0] kernel:
[PATCH 3/5] staging/lustre: Adjust import state history output format
From: Oleg Drokin New test scripts expect spaces around state names and square brackets when parsing debugfs output, so add them to avoid false failures. Signed-off-by: Oleg Drokin --- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 9a1434d..eda44d8 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -642,21 +642,21 @@ int lprocfs_rd_import(struct seq_file *m, void *data) "target: %s\n" "state: %s\n" "instance: %u\n" -"connect_flags: [", +"connect_flags: [ ", obd->obd_name, obd2cli_tgt(obd), ptlrpc_import_state_name(imp->imp_state), imp->imp_connect_data.ocd_instance); obd_connect_seq_flags2str(m, imp->imp_connect_data.ocd_connect_flags, ", "); seq_printf(m, - "]\n" - "import_flags: ["); + " ]\n" + "import_flags: [ "); obd_import_flags2str(imp, m); seq_printf(m, - "]\n" + " ]\n" "connection:\n" - " failover_nids: ["); + " failover_nids: [ "); spin_lock(&imp->imp_lock); j = 0; list_for_each_entry(conn, &imp->imp_conn_list, oic_item) { @@ -671,7 +671,7 @@ int lprocfs_rd_import(struct seq_file *m, void *data) else strncpy(nidstr, "", sizeof(nidstr)); seq_printf(m, - "]\n" + " ]\n" " current_connection: %s\n" " connection_attempts: %u\n" " generation: %u\n" @@ -795,7 +795,7 @@ int lprocfs_rd_state(struct seq_file *m, void *data) &imp->imp_state_hist[(k + j) % IMP_STATE_HIST_LEN]; if (ish->ish_state == 0) continue; - seq_printf(m, " - [%lld, %s]\n", (s64)ish->ish_time, + seq_printf(m, " - [ %lld, %s ]\n", (s64)ish->ish_time, ptlrpc_import_state_name(ish->ish_state)); } -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 1/5] staging/lustre/obdecho: Remove always true condition
From: Oleg Drokin Dan Carpenter noticed that since we already checked for (oa->o_valid & OBD_MD_FLID) == 0, that means (oa->o_valid & OBD_MD_FLID) is always true after that so no point in checking for it. Signed-off-by: Oleg Drokin Reported-by: Dan Carpenter --- drivers/staging/lustre/lustre/obdecho/echo_client.c | 6 ++ 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index d3e398f..e1c9d11 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -1222,10 +1222,8 @@ static int echo_create_object(const struct lu_env *env, struct echo_device *ed, } /* setup object ID here */ - if (oa->o_valid & OBD_MD_FLID) { - LASSERT(oa->o_valid & OBD_MD_FLGROUP); - lsm->lsm_oi = oa->o_oi; - } + LASSERT(oa->o_valid & OBD_MD_FLGROUP); + lsm->lsm_oi = oa->o_oi; if (ostid_id(&lsm->lsm_oi) == 0) ostid_set_id(&lsm->lsm_oi, ++last_object_id); -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 0/5] Few misc Lustre fixes
From: Oleg Drokin This patchset fixes some minor Lustre problems and also updates the internal version. Please consider. Oleg Drokin (5): staging/lustre/obdecho: Remove always true condition staging/lustre/obdecho: Better handle invalid create requests staging/lustre: Adjust import state history output format staging/lustre: Update internal client version. staging/lustre: Remove unused LUSTRE_VERSION_ALLOWED_OFFSET define drivers/staging/lustre/lustre/include/lustre_ver.h | 18 ++ .../staging/lustre/lustre/obdclass/lprocfs_status.c| 14 +++--- drivers/staging/lustre/lustre/obdecho/echo_client.c| 15 +-- 3 files changed, 18 insertions(+), 29 deletions(-) -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 5/5] staging/lustre: Remove unused LUSTRE_VERSION_ALLOWED_OFFSET define
From: Oleg Drokin LUSTRE_VERSION_ALLOWED_OFFSET is only used on the server to disallow connection of old userspace clients. Signed-off-by: Oleg Drokin --- drivers/staging/lustre/lustre/include/lustre_ver.h | 9 +++-- 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/lustre_ver.h b/drivers/staging/lustre/lustre/include/lustre_ver.h index 01205b8..64559a1 100644 --- a/drivers/staging/lustre/lustre/include/lustre_ver.h +++ b/drivers/staging/lustre/lustre/include/lustre_ver.h @@ -11,13 +11,10 @@ LUSTRE_MINOR, LUSTRE_PATCH, \ LUSTRE_FIX) -/* liblustre clients are only allowed to connect if their LUSTRE_FIX mismatches - * by this amount (set in lustre/autoconf/lustre-version.ac). */ -#define LUSTRE_VERSION_ALLOWED_OFFSET OBD_OCD_VERSION(0, 0, 1, 32) - -/* If lustre version of client and servers it connects to differs by more +/* + * If lustre version of client and servers it connects to differs by more * than this amount, client would issue a warning. - * (set in lustre/autoconf/lustre-version.ac) */ + */ #define LUSTRE_VERSION_OFFSET_WARN OBD_OCD_VERSION(0, 4, 0, 0) #endif -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 4/5] staging/lustre: Update internal client version.
From: Oleg Drokin While initial code drop was corresponding to 2.3.64, lots of different changes went in since then, and also quite a bunch of fixes, but almost none of the new features. Code-wise we are almost at 2.5.0, so let's call it 2.4.60 - this is a version that was never reached in the actual pre-2.5 development, so it should be a clear distinction of where we are now. Signed-off-by: Oleg Drokin --- drivers/staging/lustre/lustre/include/lustre_ver.h | 9 +++-- 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/lustre_ver.h b/drivers/staging/lustre/lustre/include/lustre_ver.h index caa4da1..01205b8 100644 --- a/drivers/staging/lustre/lustre/include/lustre_ver.h +++ b/drivers/staging/lustre/lustre/include/lustre_ver.h @@ -1,14 +1,11 @@ #ifndef _LUSTRE_VER_H_ #define _LUSTRE_VER_H_ -/* This file automatically generated from lustre/include/lustre_ver.h.in, - * based on parameters in lustre/autoconf/lustre-version.ac. - * Changes made directly to this file will be lost. */ #define LUSTRE_MAJOR 2 -#define LUSTRE_MINOR 3 -#define LUSTRE_PATCH 64 +#define LUSTRE_MINOR 4 +#define LUSTRE_PATCH 60 #define LUSTRE_FIX 0 -#define LUSTRE_VERSION_STRING "2.3.64" +#define LUSTRE_VERSION_STRING "2.4.60" #define LUSTRE_VERSION_CODE OBD_OCD_VERSION(LUSTRE_MAJOR, \ LUSTRE_MINOR, LUSTRE_PATCH, \ -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 2/5] staging/lustre/obdecho: Better handle invalid create requests
From: Oleg Drokin When gettng an invalid create request in echo code (wrong group, or no group at all), just return an error instead of crashing. Signed-off-by: Oleg Drokin --- drivers/staging/lustre/lustre/obdecho/echo_client.c | 11 --- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index e1c9d11..4ca82af 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -1210,8 +1210,10 @@ static int echo_create_object(const struct lu_env *env, struct echo_device *ed, int rc; int created = 0; - if ((oa->o_valid & OBD_MD_FLID) == 0) { /* no obj id */ - CERROR("No valid oid\n"); + if (!(oa->o_valid & OBD_MD_FLID) || + !(oa->o_valid & OBD_MD_FLGROUP) || + !fid_seq_is_echo(ostid_seq(&oa->o_oi))) { + CERROR("invalid oid " DOSTID "\n", POSTID(&oa->o_oi)); return -EINVAL; } @@ -1222,16 +1224,11 @@ static int echo_create_object(const struct lu_env *env, struct echo_device *ed, } /* setup object ID here */ - LASSERT(oa->o_valid & OBD_MD_FLGROUP); lsm->lsm_oi = oa->o_oi; if (ostid_id(&lsm->lsm_oi) == 0) ostid_set_id(&lsm->lsm_oi, ++last_object_id); - /* Only echo objects are allowed to be created */ - LASSERT((oa->o_valid & OBD_MD_FLGROUP) && - (ostid_seq(&oa->o_oi) == FID_SEQ_ECHO)); - rc = obd_create(env, ec->ec_exp, oa, &lsm, oti); if (rc != 0) { CERROR("Cannot create objects: rc = %d\n", rc); -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH v2 7/9] Staging: rts5208: rtsx_transport.c: Remove unnecessary parentheses
On Tue 2016-02-09 at 21:26 (-0800), Sudip Mukherjee wrote: > On Mon, Feb 08, 2016 at 05:31:23PM -0800, Shaun Ren wrote: >> This patch removes all unnecessary parentheses found by checkpatch.pl. >> >> Signed-off-by: Shaun Ren > > This will not apply anymore because of some other changes done by: > 9a66d05d82db ("Staging: rts5208: fix check for dma mapping error") I don't see that commit anywhere. Is it in linux-next? Regards, -- Shaun Ren ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v2] Staging: fix coding style in rtl8188eu/core
Set constant operand on right of test, and refactor the code in a more compact and readable way. Signed-off-by: Colin Vidal --- drivers/staging/rtl8188eu/core/rtw_iol.c | 13 + 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/staging/rtl8188eu/core/rtw_iol.c b/drivers/staging/rtl8188eu/core/rtw_iol.c index cdcf0ea..00e1136 100644 --- a/drivers/staging/rtl8188eu/core/rtw_iol.c +++ b/drivers/staging/rtl8188eu/core/rtw_iol.c @@ -18,14 +18,11 @@ * **/ -#include +#include -bool rtw_IOL_applied(struct adapter *adapter) +bool rtw_IOL_applied(struct adapter *adapter) { - if (1 == adapter->registrypriv.fw_iol) - return true; - - if ((2 == adapter->registrypriv.fw_iol) && (!adapter_to_dvobj(adapter)->ishighspeed)) - return true; - return false; + return adapter->registrypriv.fw_iol == 1 || + (adapter->registrypriv.fw_iol == 2 && +!adapter_to_dvobj(adapter)->ishighspeed); } -- 2.5.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
网络推广专员SEM
你的老朋友邀你来Q群:343257759 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Business Partnership
Hello, I am Mr. LAURENT EYADEMA from Republic of Togo.please read the attached proposal. Thanks in anticipation of your urgent response, LAURENT EYADEMA proposal.docx Description: Binary data ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Business Partnership
Hello, I am Mr. LAURENT EYADEMA from Republic of Togo.please read the attached proposal. Thanks in anticipation of your urgent response, LAURENT EYADEMA proposal.docx Description: Binary data ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH V2 4/4] staging: wilc1000: rename counter in wilc_send_config_pkt
This patch renames the name of counter variable to i. This change makes more readability because wilc_send_config_pkt has a similar argument name as count. Signed-off-by: Chaehyun Lim --- v2: rebase latest staging-testing drivers/staging/wilc1000/wilc_wlan.c | 31 +++ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c index c6bfec3..8712eda 100644 --- a/drivers/staging/wilc1000/wilc_wlan.c +++ b/drivers/staging/wilc1000/wilc_wlan.c @@ -1352,32 +1352,31 @@ int wilc_wlan_cfg_get_val(u32 wid, u8 *buffer, u32 buffer_size) int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, u32 count, u32 drv) { - int counter; + int i; int ret = 0; if (mode == GET_CFG) { - for (counter = 0; counter < count; counter++) { - if (!wilc_wlan_cfg_get(vif, !counter, - wids[counter].id, - (counter == count - 1), + for (i = 0; i < count; i++) { + if (!wilc_wlan_cfg_get(vif, !i, + wids[i].id, + (i == count - 1), drv)) { ret = -ETIMEDOUT; break; } } - for (counter = 0; counter < count; counter++) { - wids[counter].size = wilc_wlan_cfg_get_val( - wids[counter].id, - wids[counter].val, - wids[counter].size); + for (i = 0; i < count; i++) { + wids[i].size = wilc_wlan_cfg_get_val(wids[i].id, +wids[i].val, +wids[i].size); } } else if (mode == SET_CFG) { - for (counter = 0; counter < count; counter++) { - if (!wilc_wlan_cfg_set(vif, !counter, - wids[counter].id, - wids[counter].val, - wids[counter].size, - (counter == count - 1), + for (i = 0; i < count; i++) { + if (!wilc_wlan_cfg_set(vif, !i, + wids[i].id, + wids[i].val, + wids[i].size, + (i == count - 1), drv)) { ret = -ETIMEDOUT; break; -- 2.7.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH V2 3/4] staging: wilc1000: remove initialization code of counter variable
There is no need to set to 0 for counter variable before entering next for-loop statement because counter is initialized again in for-loop statement, so just remove it. Signed-off-by: Chaehyun Lim --- v2: rebase latest staging-testing drivers/staging/wilc1000/wilc_wlan.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c index f3140e0..c6bfec3 100644 --- a/drivers/staging/wilc1000/wilc_wlan.c +++ b/drivers/staging/wilc1000/wilc_wlan.c @@ -1365,7 +1365,6 @@ int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, break; } } - counter = 0; for (counter = 0; counter < count; counter++) { wids[counter].size = wilc_wlan_cfg_get_val( wids[counter].id, -- 2.7.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH V2 1/4] staging: wilc1000: fix return type of wilc_send_config_pkt
wilc_send_config_pkt is returned 0 or -ETIMEDOUT according to return value of wilc_wlan_cfg_set or wilc_wlan_cfg_set. It is better to use int type to represent linux standard error code. Signed-off-by: Chaehyun Lim --- v2: rebase latest staging-testing drivers/staging/wilc1000/wilc_wlan.c | 5 +++-- drivers/staging/wilc1000/wilc_wlan.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c index 98b21d4..2bc2970 100644 --- a/drivers/staging/wilc1000/wilc_wlan.c +++ b/drivers/staging/wilc1000/wilc_wlan.c @@ -1349,10 +1349,11 @@ int wilc_wlan_cfg_get_val(u32 wid, u8 *buffer, u32 buffer_size) return ret; } -s32 wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, +int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, u32 count, u32 drv) { - s32 counter = 0, ret = 0; + s32 counter = 0; + int ret = 0; if (mode == GET_CFG) { for (counter = 0; counter < count; counter++) { diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h index d362fa8..06d02ab 100644 --- a/drivers/staging/wilc1000/wilc_wlan.h +++ b/drivers/staging/wilc1000/wilc_wlan.h @@ -301,6 +301,6 @@ void host_sleep_notify(struct wilc *wilc); extern bool wilc_enable_ps; void chip_allow_sleep(struct wilc *wilc); void chip_wakeup(struct wilc *wilc); -s32 wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, +int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, u32 count, u32 drv); #endif -- 2.7.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH V2 2/4] staging: wilc1000: use int type for counter variable
counter is used as for-loop control variable and indicating index of struct wid array so that it is better to use int type. There is no need to set to 0 when it is declared at the top of this function. It is initialized as 0 in for-loop statement. Signed-off-by: Chaehyun Lim --- v2: rebase latest staging-testing drivers/staging/wilc1000/wilc_wlan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c index 2bc2970..f3140e0 100644 --- a/drivers/staging/wilc1000/wilc_wlan.c +++ b/drivers/staging/wilc1000/wilc_wlan.c @@ -1352,7 +1352,7 @@ int wilc_wlan_cfg_get_val(u32 wid, u8 *buffer, u32 buffer_size) int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, u32 count, u32 drv) { - s32 counter = 0; + int counter; int ret = 0; if (mode == GET_CFG) { -- 2.7.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel