On Tue, Apr 3, 2018 at 11:23 AM, Dan Carpenter <[email protected]> wrote:
> On Fri, Mar 30, 2018 at 05:13:20PM +0200, Sergio Paracuellos wrote:
>> This commit extracts process to check if firmware is running
>> into a new inline function called ks7010_is_firmware_running.
>>
>> Signed-off-by: Sergio Paracuellos <[email protected]>
>> ---
>> drivers/staging/ks7010/ks7010_sdio.c | 22 +++++++++++-----------
>> 1 file changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/staging/ks7010/ks7010_sdio.c
>> b/drivers/staging/ks7010/ks7010_sdio.c
>> index 5b6c7a7..11d5be1 100644
>> --- a/drivers/staging/ks7010/ks7010_sdio.c
>> +++ b/drivers/staging/ks7010/ks7010_sdio.c
>> @@ -639,12 +639,20 @@ static int ks7010_sdio_data_compare(struct
>> ks_wlan_private *priv, u32 address,
>> return ret;
>> }
>>
>> +static inline bool ks7010_is_firmware_running(struct ks_wlan_private *priv,
>> + int *ret)
>> +{
>> + unsigned char byte;
>> +
>> + *ret = ks7010_sdio_readb(priv, GCR_A, &byte);
>> + return (byte == GCR_A_RUN);
>> +}
>> +
>> static int ks7010_upload_firmware(struct ks_sdio_card *card)
>> {
>> struct ks_wlan_private *priv = card->priv;
>> unsigned int size, offset, n = 0;
>> unsigned char *rom_buf;
>> - unsigned char byte = 0;
>> int ret;
>> unsigned int length;
>> const struct firmware *fw_entry = NULL;
>> @@ -655,9 +663,7 @@ static int ks7010_upload_firmware(struct ks_sdio_card
>> *card)
>>
>> sdio_claim_host(card->func);
>>
>> - /* Firmware running ? */
>> - ret = ks7010_sdio_readb(priv, GCR_A, &byte);
>> - if (byte == GCR_A_RUN) {
>> + if (ks7010_is_firmware_running(priv, &ret)) {
>> netdev_dbg(priv->net_dev, "MAC firmware running ...\n");
>> goto release_host_and_free;
>
>
> The original code is obviously buggy with regards to return values so
> this doesn't make it noticeably worse, but I hate how mmc code uses the
> parameters as a return value. For example:
>
> void sdio_writeb(struct sdio_func *func, u8 b, unsigned int addr, int
> *err_ret)
>
> It should just return the error code... :/
I agree with you in this, sdio_writeb should just return error code,
but in this moment is the API that exists in the kernel.
I don't know if this is going to be changed but this patch makes a bit
clear the original code now.
If it is nonsense because it is going to be changed just skip this
patch, please.
>
> Anyway, if the readb succeeds but the byte isn't GCR_A_RUN then we're
> returning ret == sucess here. To be honest, once we fix the error
> handling there propably isn't a lot to be gained from making this a
> separate function.
>
> ret = ks7010_sdio_readb(priv, GCR_A, &status);
> if (ret)
> goto release_host_and_free;
> if (status == GCR_A_RUN) {
> ret = -EBUSY;
> goto release_host_and_free;
> }
>
> regards,
> dan carpenter
Best regards,
Sergio Paracuellos
>
>
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel