dreambox: use backported DVB API from mercurial for kernel 2.6.18
[openembedded.git] / recipes / linux / files / opendreambox / linux-2.6.18-hdd-detection-fix.patch
1 --- a/drivers/ata/sata_svw.c
2 +++ b/drivers/ata/sata_svw.c
3 @@ -1164,10 +1164,11 @@ static int k2_sata_do_softreset(struct ata_link *link, unsigned int *class, int
4         void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
5         struct k2_port_priv *pp = ap->private_data;
6         struct ata_taskfile tf;
7 +       int retry_cnt = 0;
8  
9         if (pp->do_port_srst)
10                 goto out;
11 -               
12 +
13         if (ata_link_offline(link)) {
14                 *class = ATA_DEV_NONE;
15                 goto out;
16 @@ -1177,17 +1178,27 @@ static int k2_sata_do_softreset(struct ata_link *link, unsigned int *class, int
17  
18         writeb(ATA_SRST, (void __iomem *) ap->ioaddr.ctl_addr);
19         msleep(1);
20 -       writeb(0x0, (void __iomem *) ap->ioaddr.ctl_addr);      
21 +       writeb(0x0, (void __iomem *) ap->ioaddr.ctl_addr);
22         msleep(1);
23 -               
24 -       memset(&tf, 0, sizeof(tf));
25  
26 +tf_read_retry:
27 +       memset(&tf, 0, sizeof(tf));
28         ap->ops->tf_read(ap, &tf);
29 -       *class = ata_dev_classify(&tf);
30  
31 -       if (*class == ATA_DEV_UNKNOWN)
32 -               *class = ATA_DEV_NONE;
33 +       *class = ata_dev_classify(&tf);
34  
35 +       if (*class == ATA_DEV_UNKNOWN) {
36 +               printk("tf_read status %02x, device %02x, feature %02x, nsect %02x, class %02x %02x %02x\n", tf.command, tf.device, tf.feature, tf.nsect, tf.lbal, tf.lbam, tf.lbah);
37 +               if (retry_cnt < 20) {
38 +                       printk("dev_classify try %d failed.. retry\n", retry_cnt);
39 +                       msleep(250);
40 +                       ++retry_cnt;
41 +                       goto tf_read_retry;
42 +               }
43 +               *class = ATA_DEV_NONE;
44 +       }
45 +       else if (retry_cnt)
46 +               printk("tf_read status %02x, device %02x, feature %02x, nsect %02x, class %02x %02x %02x\n", tf.command, tf.device, tf.feature, tf.nsect, tf.lbal, tf.lbam, tf.lbah);
47  out:
48         pp->do_port_srst = 1;
49         return 0;