Re: [PATCH v1 2/2] drm/bridge: anx7625: Add anx7625 MIPI to DP bridge driver
On Mon, Sep 23, 2019 at 05:03:55PM +0300, Dan Carpenter wrote: > I wish you would think more about the error codes that you're returning. > Most functions do "ret |= frob()." which ORs the error codes together, > and results in a nonsense negative error code. But then some functions > return 1 on error and zero on success which is sometimes a bug, > sometimes confusing but always ugly. Hi Dan Carpenter, I'll take more care about return error codes. As I cannot to check all I2C operation result, so I use "ret |= frob()." to combine them, if one of them has negative return value, I'll pop out error message and retuan. Anyway I'll use uniform return error code(negative value as failed, 0 as success). Thanks, Xin > > On Fri, Sep 20, 2019 at 06:07:43AM +, Xin Ji wrote: > > The ANX7625 is an ultra-low power 4K Mobile HD Transmitter designed > > for portable device. It converts MIPI to DisplayPort 1.3 4K. > > > > Signed-off-by: Xin Ji > > --- > > drivers/gpu/drm/bridge/Makefile |2 +- > > drivers/gpu/drm/bridge/analogix/Kconfig |6 + > > drivers/gpu/drm/bridge/analogix/Makefile |1 + > > drivers/gpu/drm/bridge/analogix/anx7625.c | 2085 > > + > > drivers/gpu/drm/bridge/analogix/anx7625.h | 397 ++ > > 5 files changed, 2490 insertions(+), 1 deletion(-) > > create mode 100644 drivers/gpu/drm/bridge/analogix/anx7625.c > > create mode 100644 drivers/gpu/drm/bridge/analogix/anx7625.h > > > > diff --git a/drivers/gpu/drm/bridge/Makefile > > b/drivers/gpu/drm/bridge/Makefile > > index 4934fcf..bcd388a 100644 > > --- a/drivers/gpu/drm/bridge/Makefile > > +++ b/drivers/gpu/drm/bridge/Makefile > > @@ -12,8 +12,8 @@ obj-$(CONFIG_DRM_SII9234) += sii9234.o > > obj-$(CONFIG_DRM_THINE_THC63LVD1024) += thc63lvd1024.o > > obj-$(CONFIG_DRM_TOSHIBA_TC358764) += tc358764.o > > obj-$(CONFIG_DRM_TOSHIBA_TC358767) += tc358767.o > > -obj-$(CONFIG_DRM_ANALOGIX_DP) += analogix/ > > obj-$(CONFIG_DRM_I2C_ADV7511) += adv7511/ > > obj-$(CONFIG_DRM_TI_SN65DSI86) += ti-sn65dsi86.o > > obj-$(CONFIG_DRM_TI_TFP410) += ti-tfp410.o > > +obj-y += analogix/ > > obj-y += synopsys/ > > diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig > > b/drivers/gpu/drm/bridge/analogix/Kconfig > > index e930ff9..b2f127e 100644 > > --- a/drivers/gpu/drm/bridge/analogix/Kconfig > > +++ b/drivers/gpu/drm/bridge/analogix/Kconfig > > @@ -2,3 +2,9 @@ > > config DRM_ANALOGIX_DP > > tristate > > depends on DRM > > + > > +config ANALOGIX_ANX7625 > > + tristate "Analogix MIPI to DP interface support" > > + help > > + ANX7625 is an ultra-low power 4K mobile HD transmitter designed > > + for portable devices. It converts MIPI/DPI to DisplayPort1.3 4K. > > diff --git a/drivers/gpu/drm/bridge/analogix/Makefile > > b/drivers/gpu/drm/bridge/analogix/Makefile > > index fdbf3fd..8a52867 100644 > > --- a/drivers/gpu/drm/bridge/analogix/Makefile > > +++ b/drivers/gpu/drm/bridge/analogix/Makefile > > @@ -1,3 +1,4 @@ > > # SPDX-License-Identifier: GPL-2.0-only > > +obj-$(CONFIG_ANALOGIX_ANX7625) += anx7625.o > > analogix_dp-objs := analogix_dp_core.o analogix_dp_reg.o > > obj-$(CONFIG_DRM_ANALOGIX_DP) += analogix_dp.o > > diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c > > b/drivers/gpu/drm/bridge/analogix/anx7625.c > > new file mode 100644 > > index 000..eceadef > > --- /dev/null > > +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c > > @@ -0,0 +1,2085 @@ > > +// SPDX-License-Identifier: GPL-2.0-only > > +/* > > + * Copyright(c) 2016, Analogix Semiconductor. All rights reserved. > > + * > > + */ > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > + > > +#include "anx7625.h" > > + > > +/* > > + * there is a sync issue while access I2C register between AP(CPU) and > > + * internal firmware(OCM), to avoid the race condition, AP should access > > + * the reserved slave address before slave address occurs changes. > > + */ > > +static int i2c_access_workaround(struct anx7625_data *ctx, > > +struct i2c_client *client) > > +{ > > + u8 offset; > > + struct device *dev = >dev; > > + struct i2c_client *last_client = ctx->last_client; > > + int ret = 0; > > + > > + if (client != last_client) { > > Flip this around: > > if (client == last_client) > return 0; > > > + ctx->last_client = client; > > + > > + if (client == ctx->i2c.tcpc_client) > > + offset = RSVD_00_ADDR; > > + else if (client == ctx->i2c.tx_p0_client) > > + offset = RSVD_D1_ADDR; > > + else if (client == ctx->i2c.tx_p1_client) > > +
Please my good friend
This message is not spam Please my good friend I have a lucrative business proposal that I would like to share with you. I'm glad about your quick answer E-mail; fulan3...@gmail.com greetings Mr. Fu Lan ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[staging:staging-testing 14/19] drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:191: undefined reference to `cs5535_gpio_set'
tree: https://kernel.googlesource.com/pub/scm/linux/kernel/git/gregkh/staging.git staging-testing head: 3f1962fdc723cb48f0ea4e8a733d3ffa88708e98 commit: a3f54564061da0c8c0b60033ff44acfa356b8779 [14/19] staging: olpc_dcon: allow simultaneous XO-1 and XO-1.5 support config: i386-randconfig-g002-201938 (attached as .config) compiler: gcc-7 (Debian 7.4.0-13) 7.4.0 reproduce: git checkout a3f54564061da0c8c0b60033ff44acfa356b8779 # save the attached .config to linux build tree make ARCH=i386 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All errors (new ones prefixed by >>): ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o: in function `dcon_read_status_xo_1': >> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:191: undefined reference to >> `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o: in function `dcon_wiggle_xo_1': drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:156: undefined reference to `cs5535_gpio_set' >> ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:157: undefined reference to >> `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:158: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:159: undefined reference to `cs5535_gpio_set' >> ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:160: undefined reference to >> `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:161: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:162: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:163: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:164: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o:drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:165: more undefined references to `cs5535_gpio_clear' follow ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o: in function `dcon_wiggle_xo_1': drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:171: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:174: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:175: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:176: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:177: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o: in function `dcon_init_xo_1': >> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:57: undefined reference to >> `cs5535_gpio_clear' >> ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:69: undefined reference to >> `cs5535_gpio_isset' >> ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:85: undefined reference to >> `cs5535_gpio_setup_event' >> ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:88: undefined reference to >> `cs5535_gpio_set_irq' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:102: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:105: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:108: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:111: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:112: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:115: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:118: undefined reference to `cs5535_gpio_clear' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:121: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:124: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:127: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:128: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:131: undefined reference to `cs5535_gpio_set' ld: drivers/staging/olpc_dcon/olpc_dcon_xo_1.o:drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:132: more undefined references to `cs5535_gpio_set' follow vim +191 drivers/staging/olpc_dcon/olpc_dcon_xo_1.c 2159fb3729293c Nishad Kamdar 2018-11-07 38 53c43c5ca13328 Greg Kroah-Hartman 2016-04-04 39 static int dcon_init_xo_1(struct dcon_priv *dcon) 53c43c5ca13328 Greg Kroah-Hartman 2016-04-04 40 { 53c43c5ca13328 Greg Kroah-Hartman 2016-04-04 41 unsigned char lob; 2159fb3729293c Nishad Kamdar 2018-11-07 42 int ret, i; ae0a6d2017f733 Arnd Bergmann 2019-03-04 43 const struct dcon_gpio *pin = _asis[0]; 2159fb3729293c Nishad Kamdar 2018-11-07 44 2159fb3729293c Nishad Kamdar 2018-11-07 45 for (i = 0; i < ARRAY_SIZE(gpios_asis); i++) {
[staging:staging-testing 14/19] ERROR: "cs5535_gpio_set" [drivers/staging/olpc_dcon/olpc-dcon.ko] undefined!
tree: https://kernel.googlesource.com/pub/scm/linux/kernel/git/gregkh/staging.git staging-testing head: 3f1962fdc723cb48f0ea4e8a733d3ffa88708e98 commit: a3f54564061da0c8c0b60033ff44acfa356b8779 [14/19] staging: olpc_dcon: allow simultaneous XO-1 and XO-1.5 support config: i386-randconfig-c001-201938 (attached as .config) compiler: gcc-7 (Debian 7.4.0-13) 7.4.0 reproduce: git checkout a3f54564061da0c8c0b60033ff44acfa356b8779 # save the attached .config to linux build tree make ARCH=i386 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All errors (new ones prefixed by >>): >> ERROR: "cs5535_gpio_set" [drivers/staging/olpc_dcon/olpc-dcon.ko] undefined! >> ERROR: "cs5535_gpio_set_irq" [drivers/staging/olpc_dcon/olpc-dcon.ko] >> undefined! >> ERROR: "cs5535_gpio_clear" [drivers/staging/olpc_dcon/olpc-dcon.ko] >> undefined! >> ERROR: "cs5535_gpio_setup_event" [drivers/staging/olpc_dcon/olpc-dcon.ko] >> undefined! >> ERROR: "cs5535_gpio_isset" [drivers/staging/olpc_dcon/olpc-dcon.ko] >> undefined! --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: application/gzip ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Dear Friend,
Dear Friend, I am Mr Jude Clacke, the director of the accounts & auditing dept .at the Bank OF Africa Ouagadougou-west Africa. (B O A) With due respect, I have decided to contact you on a business transaction that will be beneficial to both of us. At the bank's last accounts/auditing evaluations, my staff came across an old account which was being maintained by a foreign client who we learnt was among the deceased passengers of motor accident. Since his death, even the members of his family haven't applied for claims over this fund and it has been in the safe deposit account until I discovered that it cannot be claimed since our client is a foreign national and we are sure that he has no next of kin here to file claims over the money. As the director of the department, this discovery was brought to my office so as to decide what is to be done. I decided to seek ways through which to transfer this money out of the bank and out of the country too. The total amount in the account is thirty three million five hundred thousand dollars (USD 33,500,000.00).with my positions as staffs of the bank, I am handicapped because I cannot operate foreign accounts and cannot lay bonafide claim over this money. The client was a foreign national and you will only be asked to act as his next of kin and I will supply you with all the necessary information and bank data to assist you in being able to transfer this money to any bank of your choice where this money could be transferred into. I want to assure you that this transaction is absolutely risk free since I work in this bank that is why you should be confident in the success of this transaction because you will be updated with information as at when desired. I will wish you to keep this transaction secret and confidential as I am hoping to retire with my share of this money at the end of transaction which will be when this money is safety in your account. I will then come over to your country for sharing according to the previously agreed percentages. You might even have to advise me on possibilities of investment in your country or elsewhere of our choice. May God help you to help me to a restive retirement, Amen. Please for further information and enquiries feel free to contact me back immediately for more explanation and better understanding through this email address (jude.clak...@gmail.com) I am waiting for your urgent response!!! Thanks and remain blessed. Mr Jude Clacke ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: NACK: [PATCH] staging: rtl8188eu: remove dead code in do-while conditional step
This email is fine, but I just want to make sure that you don't think it's required. We all assumed that you would send a v2. I sort of hate the word NACK as well because it sounds like shouting or ducks and those are my two pet peeves. Sometimes people send a v2 patch without any replies to the original email and we apply the v1 patch that's the only thing to avoid. regards, dan carpenter ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [RESEND PATCH] staging: rtl8192u: Fix indentation for cleaner code
On Fri, Sep 13, 2019 at 11:31:01PM +0530, Sumera Priyadarsini wrote: > Fixes indentation for if condition in the file r8190_rtl8256.c for better > readability as suggested by Dan Carpenter. Please wrap your lines at 72 columns. > > Reported-by: Dan Carpenter > Signed-off-by: Sumera Priyadarsini > --- > drivers/staging/rtl8192u/r8190_rtl8256.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Why was this resent? What changed from the 1st one that caused this to be required to be resent? Now you owe me a v2 of this patch with the changelog text fixed up :) thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v2] staging: rtl8188eu: remove dead code/vestigial do..while loop
The local variable 'bcmd_down' is always set to true almost immediately before the do-while's condition is checked. As a result, !bcmd_down evaluates to false which short circuits the logical AND operator meaning that the second operand is never reached and is therefore dead code. Furthermore, the do..while loop may be removed since it will always only execute once because 'bcmd_down' is always set to true, so the !bcmd_down evaluates to false and the loop exits immediately after the first pass. Fix this by removing the loop and its condition variables 'bcmd_down' and 'retry_cnts' While we're in there, also fix some checkpatch.pl suggestions regarding spaces around arithmetic operators like '+' Addresses-Coverity: ("Logically dead code") Signed-off-by: Connor Kuehl --- v1 -> v2: - remove the loop and its condition variable bcmd_down - address some non-invasive checkpatch.pl suggestions as a result of deleting the loop drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c | 55 +--- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c index 47352f210c0b..7646167a0b36 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c @@ -47,8 +47,6 @@ static u8 _is_fw_read_cmd_down(struct adapter *adapt, u8 msgbox_num) **/ static s32 FillH2CCmd_88E(struct adapter *adapt, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer) { - u8 bcmd_down = false; - s32 retry_cnts = 100; u8 h2c_box_num; u32 msgbox_addr; u32 msgbox_ex_addr; @@ -71,39 +69,34 @@ static s32 FillH2CCmd_88E(struct adapter *adapt, u8 ElementID, u32 CmdLen, u8 *p goto exit; /* pay attention to if race condition happened in H2C cmd setting. */ - do { - h2c_box_num = adapt->HalData->LastHMEBoxNum; - - if (!_is_fw_read_cmd_down(adapt, h2c_box_num)) { - DBG_88E(" fw read cmd failed...\n"); - goto exit; - } - - *(u8 *)(_cmd) = ElementID; - - if (CmdLen <= 3) { - memcpy((u8 *)(_cmd)+1, pCmdBuffer, CmdLen); - } else { - memcpy((u8 *)(_cmd)+1, pCmdBuffer, 3); - ext_cmd_len = CmdLen-3; - memcpy((u8 *)(_cmd_ex), pCmdBuffer+3, ext_cmd_len); + h2c_box_num = adapt->HalData->LastHMEBoxNum; - /* Write Ext command */ - msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num * RTL88E_EX_MESSAGE_BOX_SIZE); - for (cmd_idx = 0; cmd_idx < ext_cmd_len; cmd_idx++) - usb_write8(adapt, msgbox_ex_addr+cmd_idx, *((u8 *)(_cmd_ex)+cmd_idx)); - } - /* Write command */ - msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * RTL88E_MESSAGE_BOX_SIZE); - for (cmd_idx = 0; cmd_idx < RTL88E_MESSAGE_BOX_SIZE; cmd_idx++) - usb_write8(adapt, msgbox_addr+cmd_idx, *((u8 *)(_cmd)+cmd_idx)); + if (!_is_fw_read_cmd_down(adapt, h2c_box_num)) { + DBG_88E(" fw read cmd failed...\n"); + goto exit; + } - bcmd_down = true; + *(u8 *)(_cmd) = ElementID; - adapt->HalData->LastHMEBoxNum = - (h2c_box_num+1) % RTL88E_MAX_H2C_BOX_NUMS; + if (CmdLen <= 3) { + memcpy((u8 *)(_cmd) + 1, pCmdBuffer, CmdLen); + } else { + memcpy((u8 *)(_cmd) + 1, pCmdBuffer, 3); + ext_cmd_len = CmdLen - 3; + memcpy((u8 *)(_cmd_ex), pCmdBuffer + 3, ext_cmd_len); + + /* Write Ext command */ + msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num * RTL88E_EX_MESSAGE_BOX_SIZE); + for (cmd_idx = 0; cmd_idx < ext_cmd_len; cmd_idx++) + usb_write8(adapt, msgbox_ex_addr + cmd_idx, *((u8 *)(_cmd_ex) + cmd_idx)); + } + /* Write command */ + msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * RTL88E_MESSAGE_BOX_SIZE); + for (cmd_idx = 0; cmd_idx < RTL88E_MESSAGE_BOX_SIZE; cmd_idx++) + usb_write8(adapt, msgbox_addr + cmd_idx, *((u8 *)(_cmd) + cmd_idx)); - } while ((!bcmd_down) && (retry_cnts--)); + adapt->HalData->LastHMEBoxNum = + (h2c_box_num + 1) % RTL88E_MAX_H2C_BOX_NUMS; ret = _SUCCESS; -- 2.17.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
NACK: [PATCH] staging: rtl8188eu: remove dead code in do-while conditional step
I'm sending a V2 with the loop removed. Thanks, Connor ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: rtl8188eu: remove dead code in do-while conditional step
On Mon, Sep 23, 2019 at 03:38:39PM -0500, Larry Finger wrote: > This patch is correct; however, the do..while loop will always be executed s/correct/harmless/. > once, thus you could remove the loop and the loop variable bcmd_down. > > @greg: If you would prefer a two-step process, then this one is OK. It has to be done in one step. regards, dan carpenter ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: rtl8188eu: remove dead code in do-while conditional step
On Mon, Sep 23, 2019 at 12:48:06PM -0700, Connor Kuehl wrote: > @@ -103,7 +102,7 @@ static s32 FillH2CCmd_88E(struct adapter *adapt, u8 > ElementID, u32 CmdLen, u8 *p > adapt->HalData->LastHMEBoxNum = > (h2c_box_num+1) % RTL88E_MAX_H2C_BOX_NUMS; > > - } while ((!bcmd_down) && (retry_cnts--)); > + } while (!bcmd_down); Just get rid of the whole do while loop, because it just goes through one time. It doesn't loop. Get rid of bcmd_down as well. regards, dan carpenter ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel