[PATCH] drivers/staging/wlan-ng/p80211conv.c: fixed a potential memory leak

2017-08-08 Thread Lynn Lei
Fixed a potential memory leak inside skb_ether_to_p80211()
When the wep_encrypt() fails  the code return 2 directly
Which causes the p80211_wep->data dangling

Add a kfree statement to reclaim that memory allocated

Signed-off-by: Lynn Lei 
---
 drivers/staging/wlan-ng/p80211conv.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/wlan-ng/p80211conv.c 
b/drivers/staging/wlan-ng/p80211conv.c
index fc8ad33ade9f..c1b6d426bcad 100644
--- a/drivers/staging/wlan-ng/p80211conv.c
+++ b/drivers/staging/wlan-ng/p80211conv.c
@@ -213,6 +213,7 @@ int skb_ether_to_p80211(struct wlandevice *wlandev, u32 
ethconv,
netdev_warn(wlandev->netdev,
"Host en-WEP failed, dropping frame 
(%d).\n",
foo);
+   kfree(p80211_wep->data);
return 2;
}
fc |= cpu_to_le16(WLAN_SET_FC_ISWEP(1));
-- 
2.13.3

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


[PATCH v3] staging: sm750fb: fixed a assignment typo

2017-07-03 Thread Lynn Lei
fixed a typo issue in get_mxclk_freq() function.

the original code using PLL_CTRL_M_SHIFT for shifting to set N flag.
which is not right, it should be PLL_CTRL_N_SHIFT.

both PLL_CTRL_M_SHIFT and PLL_CTRL_N_SHIFT
  defined in drivers/staging/sm750fb/ddk750_reg.h

Signed-off-by: Lynn Lei 
---
v3: improved commit comments
changes from v2 included

 drivers/staging/sm750fb/ddk750_chip.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 5e4bfb601cea..c51761221131 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -40,7 +40,7 @@ static unsigned int get_mxclk_freq(void)
 
pll_reg = peek32(MXCLK_PLL_CTRL);
M = (pll_reg & PLL_CTRL_M_MASK) >> PLL_CTRL_M_SHIFT;
-   N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_M_SHIFT;
+   N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_N_SHIFT;
OD = (pll_reg & PLL_CTRL_OD_MASK) >> PLL_CTRL_OD_SHIFT;
POD = (pll_reg & PLL_CTRL_POD_MASK) >> PLL_CTRL_POD_SHIFT;
 
-- 
2.13.2

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


[PATCH] staging: sm750fb: skip unnecessary comparisons

2017-07-02 Thread Lynn Lei
introduced early checks to skip unnecessary comparisons when flags set.

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/sm750.c | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 386d4adcd91d..9e57a2d32465 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -1171,11 +1171,16 @@ static int __init lynxfb_setup(char *options)
 */
while ((opt = strsep(&options, ":")) != NULL) {
/* options that mean for any lynx chips are configured here */
-   if (!strncmp(opt, "noaccel", strlen("noaccel"))) {
+
+   /*
+* NOTE: the length of options is hard-coded
+* if any of those options changed  please update its length
+*/
+   if (!g_noaccel && !strncmp(opt, "noaccel", 7)) {
g_noaccel = 1;
-   } else if (!strncmp(opt, "nomtrr", strlen("nomtrr"))) {
+   } else if (!g_nomtrr && !strncmp(opt, "nomtrr", 6)) {
g_nomtrr = 1;
-   } else if (!strncmp(opt, "dual", strlen("dual"))) {
+   } else if (!g_dualview && !strncmp(opt, "dual", 4)) {
g_dualview = 1;
} else {
strcat(tmp, opt);
-- 
2.13.2

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


[PATCH v2] staging: sm750fb: refactor method and fix potential type inconsistence

2017-07-02 Thread Lynn Lei
include PANEL_DISPLAY_CTRL_FPVDDEN control mask

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/ddk750_display.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 0f666dc2729a..c68367e6cdeb 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -89,7 +89,7 @@ static void swPanelPowerSequence(int disp, int delay)
u32 reg;
u32 opt[] = {
PANEL_DISPLAY_CTRL_FPEN, PANEL_DISPLAY_CTRL_DATA,
-   PANEL_DISPLAY_CTRL_VBIASEN, PANEL_DISPLAY_CTRL_FPEN,
+   PANEL_DISPLAY_CTRL_VBIASEN, PANEL_DISPLAY_CTRL_FPVDDEN,
};
u32 size, i;
 
-- 
2.13.2

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


[PATCH] staging: sm750fb: refactor method and fix potential type inconsistence

2017-07-02 Thread Lynn Lei
make reg variable typed `u32' not `unsigned int'
this can fix potential type inconsistence in some platforms

refactor swPanelPowerSequence() make the code less redundant

a early check for disp to skip unnecessary delay

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/ddk750_display.c | 36 ++--
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_display.c 
b/drivers/staging/sm750fb/ddk750_display.c
index 9b116ed6ecc7..0f666dc2729a 100644
--- a/drivers/staging/sm750fb/ddk750_display.c
+++ b/drivers/staging/sm750fb/ddk750_display.c
@@ -86,28 +86,24 @@ static void primary_wait_vertical_sync(int delay)
 
 static void swPanelPowerSequence(int disp, int delay)
 {
-   unsigned int reg;
+   u32 reg;
+   u32 opt[] = {
+   PANEL_DISPLAY_CTRL_FPEN, PANEL_DISPLAY_CTRL_DATA,
+   PANEL_DISPLAY_CTRL_VBIASEN, PANEL_DISPLAY_CTRL_FPEN,
+   };
+   u32 size, i;
+
+   if (disp == 0)
+   return;
+
+   size = sizeof(opt) / sizeof(u32);
 
/* disp should be 1 to open sequence */
-   reg = peek32(PANEL_DISPLAY_CTRL);
-   reg |= (disp ? PANEL_DISPLAY_CTRL_FPEN : 0);
-   poke32(PANEL_DISPLAY_CTRL, reg);
-   primary_wait_vertical_sync(delay);
-
-   reg = peek32(PANEL_DISPLAY_CTRL);
-   reg |= (disp ? PANEL_DISPLAY_CTRL_DATA : 0);
-   poke32(PANEL_DISPLAY_CTRL, reg);
-   primary_wait_vertical_sync(delay);
-
-   reg = peek32(PANEL_DISPLAY_CTRL);
-   reg |= (disp ? PANEL_DISPLAY_CTRL_VBIASEN : 0);
-   poke32(PANEL_DISPLAY_CTRL, reg);
-   primary_wait_vertical_sync(delay);
-
-   reg = peek32(PANEL_DISPLAY_CTRL);
-   reg |= (disp ? PANEL_DISPLAY_CTRL_FPEN : 0);
-   poke32(PANEL_DISPLAY_CTRL, reg);
-   primary_wait_vertical_sync(delay);
+   for (i = 0; i < size; i++) {
+   reg = peek32(PANEL_DISPLAY_CTRL) | opt[i];
+   poke32(PANEL_DISPLAY_CTRL, reg);
+   primary_wait_vertical_sync(delay);
+   }
 }
 
 void ddk750_setLogicalDispOut(disp_output_t output)
-- 
2.13.2

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


[PATCH] staging: sm750fb: refactor the clock frequency calculation method

2017-07-02 Thread Lynn Lei
speed up calculation by merging two divisions into one.

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/ddk750_chip.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index c51761221131..5970c3792f27 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -44,7 +44,7 @@ static unsigned int get_mxclk_freq(void)
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);
+   return DEFAULT_INPUT_CLOCK * M / N / (1 << (OD + POD));
 }
 
 /*
-- 
2.13.2

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


[PATCH] staging: sm750fb: fixed a assignment typo

2017-07-01 Thread Lynn Lei
Fixed a typo issue in get_mxclk_freq().

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/ddk750_chip.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/sm750fb/ddk750_chip.c 
b/drivers/staging/sm750fb/ddk750_chip.c
index 5e4bfb601cea..c51761221131 100644
--- a/drivers/staging/sm750fb/ddk750_chip.c
+++ b/drivers/staging/sm750fb/ddk750_chip.c
@@ -40,7 +40,7 @@ static unsigned int get_mxclk_freq(void)
 
pll_reg = peek32(MXCLK_PLL_CTRL);
M = (pll_reg & PLL_CTRL_M_MASK) >> PLL_CTRL_M_SHIFT;
-   N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_M_SHIFT;
+   N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_N_SHIFT;
OD = (pll_reg & PLL_CTRL_OD_MASK) >> PLL_CTRL_OD_SHIFT;
POD = (pll_reg & PLL_CTRL_POD_MASK) >> PLL_CTRL_POD_SHIFT;
 
-- 
2.13.2

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


[PATCH] staging: sm750fb: Combine set GPIO 30 & 31 into one statement

2017-04-25 Thread Lynn Lei
Combine two separate set GPIO(30 & 31) operations into one statement.

Signed-off-by: Lynn Lei 
---
 drivers/staging/sm750fb/ddk750_hwi2c.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/sm750fb/ddk750_hwi2c.c 
b/drivers/staging/sm750fb/ddk750_hwi2c.c
index 68716ef7cb06..ddb7a6dc265a 100644
--- a/drivers/staging/sm750fb/ddk750_hwi2c.c
+++ b/drivers/staging/sm750fb/ddk750_hwi2c.c
@@ -49,8 +49,7 @@ void sm750_hw_i2c_close(void)
 
/* Set GPIO 30 & 31 back as GPIO pins */
value = peek32(GPIO_MUX);
-   value &= ~GPIO_MUX_30;
-   value &= ~GPIO_MUX_31;
+   value &= ~(GPIO_MUX_30 | GPIO_MUX_31);
poke32(GPIO_MUX, value);
 }
 
-- 
2.12.2

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