Merge branch 'develop-3.0' of ssh://10.10.10.29/rk/kernel into develop-3.0

This commit is contained in:
ywj 2012-08-17 10:03:12 +08:00
commit bfeaf0792a
3 changed files with 63 additions and 24 deletions

View File

@ -236,7 +236,7 @@ void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq)
//calculate the timeout value for SDMMC; added by xbw at 2011-09-27
if(mrq->data)
{
unit = 3*(1<<20);// unit=3MB
unit = 2*(1<<20);// unit=2MB
datasize = mrq->data->blksz*mrq->data->blocks;
multi = datasize/unit;
multi += (datasize%unit)?1:0;
@ -260,8 +260,12 @@ void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq)
{
host->doneflag = 0;
mrq->cmd->error = -EIO;
printk(KERN_WARNING "%s..%d.. !!!!! wait for CMD%d timeout [%s]\n",\
__FUNCTION__, __LINE__, mrq->cmd->opcode, mmc_hostname(host));
if(0 == mrq->cmd->retries)
{
printk(KERN_WARNING "%s..%d.. !!!!! wait for CMD%d timeout [%s]\n",\
__FUNCTION__, __LINE__, mrq->cmd->opcode, mmc_hostname(host));
}
}
#else
wait_for_completion(&complete);

View File

@ -979,8 +979,8 @@ static void rk29_sdmmc_control_host_dma(struct rk29_sdmmc *host, bool enable)
static void send_stop_cmd(struct rk29_sdmmc *host)
{
int ret;
int timeout = 250;
unsigned int value;
// int timeout = 250;
// unsigned int value;
if(host->mrq->cmd->error)
@ -1001,7 +1001,8 @@ static void send_stop_cmd(struct rk29_sdmmc *host)
__FUNCTION__, __LINE__, host->dma_name);
}
}
#if 0 //modifyed at 2012-08-16
while (--timeout > 0)
{
value = rk29_sdmmc_read(host->regs, SDMMC_STATUS);
@ -1033,7 +1034,8 @@ static void send_stop_cmd(struct rk29_sdmmc *host)
__FUNCTION__, __LINE__, host->dma_name);
}
}
#endif
host->errorstep = 0xe1;
mod_timer(&host->request_timer, jiffies + msecs_to_jiffies(RK29_SDMMC_SEND_START_TIMEOUT+2500));
@ -1056,7 +1058,7 @@ static void send_stop_cmd(struct rk29_sdmmc *host)
{
rk29_sdmmc_start_error(host);
//host->state = STATE_IDLE;
host->state = STATE_IDLE;
host->complete_done = 4;
}
host->errorstep = 0xe2;
@ -1096,7 +1098,9 @@ static int rk29_sdmmc_submit_data_dma(struct rk29_sdmmc *host, struct mmc_data *
if (data->blksz & 3)
{
printk(KERN_WARNING "%s..%d... data_len not aligned to 4bytes. [%s]\n", __FUNCTION__, __LINE__, host->dma_name);
printk(KERN_ERR "%s..%d...data_len not aligned to 4bytes. [%s]\n", \
__FUNCTION__, __LINE__, host->dma_name);
return -EINVAL;
}
@ -1942,12 +1946,12 @@ static void rk29_sdmmc_INT_CMD_DONE_timeout(unsigned long host_data)
if(STATE_SENDING_CMD == host->state)
{
if(0==host->cmd->retries)
if((0==host->cmd->retries)&&(12 != host->cmd->opcode))
{
printk(KERN_WARNING "%d... cmd=%d, INT_CMD_DONE timeout, errorStep=0x%x, host->state=%x [%s]\n",\
__LINE__,host->cmd->opcode, host->errorstep,host->state,host->dma_name);
}
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS, 0xFFFFFFFE); // clear INT,except for SDMMC_INT_CD
rk29_sdmmc_dealwith_timeout(host);
}
@ -1972,7 +1976,7 @@ static void rk29_sdmmc_INT_DTO_timeout(unsigned long host_data)
printk(KERN_WARNING "%s..%d...cmd=%d DTO_timeout,cmdr=0x%x, errorStep=0x%x, Hoststate=%x [%s]\n", \
__FUNCTION__, __LINE__,host->cmd->opcode,host->cmdr ,host->errorstep,host->state,host->dma_name);
}
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS, 0xFFFFFFFE); // clear INT,except for SDMMC_INT_CD
rk29_sdmmc_dealwith_timeout(host);
}
rk29_sdmmc_enable_irq(host, true);
@ -2176,7 +2180,7 @@ static void rk29_sdmmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
}
else
{
if(host->error_times++ % (RK29_ERROR_PRINTK_INTERVAL*3) ==0)
if(host->error_times++ % (RK29_ERROR_PRINTK_INTERVAL*10) ==0)
{
printk(KERN_INFO "%s: Refuse to run CMD%2d(arg=0x%8x) due to the removal of card. 3==[%s]==\n", \
__FUNCTION__, mrq->cmd->opcode, mrq->cmd->arg, host->dma_name);
@ -2266,7 +2270,6 @@ static void rk29_sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
struct rk29_sdmmc *host = mmc_priv(mmc);
rk29_sdmmc_enable_irq(host, false);
//spin_lock(&host->lock);
if(test_bit(RK29_SDMMC_CARD_PRESENT, &host->flags) || (RK29_CTRL_SDMMC_ID == host->pdev->id))
{
@ -2381,7 +2384,6 @@ static void rk29_sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
rk29_sdmmc_change_clk_div(host, ios->clock);
}
out:
//spin_unlock(&host->lock);
rk29_sdmmc_enable_irq(host, true);
}
@ -2776,7 +2778,9 @@ static int rk29_sdmmc_command_complete(struct rk29_sdmmc *host,
cmd->resp[0] = rk29_sdmmc_read(host->regs, SDMMC_RESP0);
}
}
#if 0
//debug
if(cmd->error)
{
del_timer_sync(&host->DTO_timer);
@ -2793,6 +2797,8 @@ static int rk29_sdmmc_command_complete(struct rk29_sdmmc *host,
}
}
#endif
del_timer_sync(&host->request_timer);
@ -2923,7 +2929,7 @@ static void rk29_sdmmc_tasklet_func(unsigned long priv)
** use DTO_timer for waiting for INT_UNBUSY.
** max 250ms in specification, but adapt 500 for the compatibility of all kinds of sick sdcard.
*/
mod_timer(&host->DTO_timer, jiffies + msecs_to_jiffies(2000));
mod_timer(&host->DTO_timer, jiffies + msecs_to_jiffies(5000));
}
else
{
@ -3037,12 +3043,15 @@ static void rk29_sdmmc_tasklet_func(unsigned long priv)
{
host->errorstep = 0xf2;
if(0) //(12==host->cmd->opcode)
#if 0
//debug
if(12==host->cmd->opcode)
{
printk(KERN_ERR "%d... cmd=%d(arg=0x%x),blksz=%d,blocks=%d,errorStep=0x%x,\n host->state=%x, statusReg=0x%x [%s]\n",\
__LINE__,host->mrq->cmd->opcode, host->mrq->cmd->arg, host->mrq->cmd->data->blksz, host->mrq->cmd->data->blocks,\
host->errorstep,host->state,rk29_sdmmc_read(host->regs, SDMMC_STATUS),host->dma_name);
}
#endif
spin_unlock(&host->lock);//spin_unlock_irqrestore(&host->lock, iflags);
rk29_sdmmc_enable_irq(host, true);
@ -3074,7 +3083,7 @@ static inline void rk29_sdmmc_cmd_interrupt(struct rk29_sdmmc *host, u32 status)
host->errorstep = 0xfc;
if((MMC_STOP_TRANSMISSION != host->cmd->opcode) && (host->cmdr & SDMMC_CMD_DAT_EXP))
{
unit = 3*1024*1024;
unit = 2*1024*1024;
multi = rk29_sdmmc_read(host->regs, SDMMC_BYTCNT)/unit;
multi += ((rk29_sdmmc_read(host->regs, SDMMC_BYTCNT)%unit) ? 1 :0 );
multi = (multi>0) ? multi : 1;
@ -3153,9 +3162,6 @@ static irqreturn_t rk29_sdmmc_interrupt(int irq, void *dev_id)
}
xbwprintk(1,"\n*******test***********\n%s:INT_CD=0x%x,INT-En=%d,hostState=%d, cmd=%d,present Old=%d ==> New=%d [%s]\n",\
__FUNCTION__, pending, host->mmc->re_initialized_flags, host->state, host->cmd->opcode,present_old, present, host->dma_name);
if (pending & SDMMC_INT_CMD_DONE) {
xbwprintk(6, "%s..%d.. CMD%d INT_CMD_DONE INT=0x%x [%s]\n", \
@ -3233,7 +3239,8 @@ static irqreturn_t rk29_sdmmc_interrupt(int irq, void *dev_id)
printk(KERN_WARNING "%s: INT=0x%x Oh!My God,let me see!What happened?Why?Where? CMD%d(arg=0x%x, retries=%d). [%s]\n", \
__FUNCTION__, pending, host->cmd->opcode, host->cmd->arg, host->cmd->retries,host->dma_name);
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_FRUN);
//rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_FRUN);
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,0xFFFFFFFE);
goto Exit_INT;
}

View File

@ -1108,13 +1108,41 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(ZTE_VENDOR_ID, 0xFFFF) },
{ USB_DEVICE(LEADCORE_VENDOR_ID, 0x5700) },
{ USB_DEVICE(LEADCORE_VENDOR_ID, 0x6341) },
{ USB_DEVICE(0x230d, 0x000d) },
{ USB_DEVICE(0x230D, 0x000D) },
{ USB_DEVICE(0x0E8D, 0x00A2) },
{ USB_DEVICE(0x1E89, 0x1A20) },
{ USB_DEVICE(0x12D1, 0x1C05) },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0007, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0167, 0xff, 0xff, 0xff) },
{ USB_DEVICE(HUAWEI_VENDOR_ID, 0x14A8) },
{ USB_DEVICE(0x20A6, 0x1105) },
{ USB_DEVICE(0x1EE8, 0x005F) }, // Onda-MSA14.4
{ USB_DEVICE(0x0421, 0x061E) }, // Nokia CS-11
{ USB_DEVICE(0x0BDB, 0x190A) },
{ USB_DEVICE(0x1d09, 0x1010) },
{ USB_DEVICE(0x19D2, 0x1181) },
{ USB_DEVICE(0x2020, 0x1005)},//S830 3G Dongle
// cmy end
//xxh
{ USB_DEVICE_AND_INTERFACE_INFO(0x05c6, 0x1000, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x05c6, 0x6000, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x20A6, 0xF00E, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(0x20A6, 0x1105, 0xff, 0xff, 0xff) },
{ USB_DEVICE(0x21f5, 0x1101)},
{ USB_DEVICE(0x230d,0x0101)},
{ USB_DEVICE_AND_INTERFACE_INFO(0x230d, 0x1101, 0xff, 0xff, 0xff) },
{ USB_DEVICE(0x2077,0xa000)},
{ USB_DEVICE(0x1c9e,0x6061)},
{ USB_DEVICE(0x1c9e,0x9605)},
{ USB_DEVICE(0x19d2, 0x0170) },
{ USB_DEVICE(0x19d2, 0xffe8) },
{ USB_DEVICE(0x19D2,0x1177) },//K3770-Z
{ USB_DEVICE(0x230D, 0x000c) },
{ USB_DEVICE(0x21F5, 0x2009) },
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353) },
{ USB_DEVICE(0x15eb,0x0001)},
//xxh end
{ USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
{ USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */