aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/Kconfig2
-rw-r--r--drivers/block/mg_disk.c44
2 files changed, 41 insertions, 5 deletions
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index ddea8e485cc9..f42fa50d3550 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -412,7 +412,7 @@ config ATA_OVER_ETH
412 412
413config MG_DISK 413config MG_DISK
414 tristate "mGine mflash, gflash support" 414 tristate "mGine mflash, gflash support"
415 depends on ARM && ATA && GPIOLIB 415 depends on ARM && GPIOLIB
416 help 416 help
417 mGine mFlash(gFlash) block device driver 417 mGine mFlash(gFlash) block device driver
418 418
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
index 1a4cc968cfee..8e53cae9fa90 100644
--- a/drivers/block/mg_disk.c
+++ b/drivers/block/mg_disk.c
@@ -17,7 +17,7 @@
17#include <linux/fs.h> 17#include <linux/fs.h>
18#include <linux/blkdev.h> 18#include <linux/blkdev.h>
19#include <linux/hdreg.h> 19#include <linux/hdreg.h>
20#include <linux/libata.h> 20#include <linux/ata.h>
21#include <linux/interrupt.h> 21#include <linux/interrupt.h>
22#include <linux/delay.h> 22#include <linux/delay.h>
23#include <linux/platform_device.h> 23#include <linux/platform_device.h>
@@ -357,6 +357,42 @@ static irqreturn_t mg_irq(int irq, void *dev_id)
357 return IRQ_HANDLED; 357 return IRQ_HANDLED;
358} 358}
359 359
360/* local copy of ata_id_string() */
361static void mg_id_string(const u16 *id, unsigned char *s,
362 unsigned int ofs, unsigned int len)
363{
364 unsigned int c;
365
366 BUG_ON(len & 1);
367
368 while (len > 0) {
369 c = id[ofs] >> 8;
370 *s = c;
371 s++;
372
373 c = id[ofs] & 0xff;
374 *s = c;
375 s++;
376
377 ofs++;
378 len -= 2;
379 }
380}
381
382/* local copy of ata_id_c_string() */
383static void mg_id_c_string(const u16 *id, unsigned char *s,
384 unsigned int ofs, unsigned int len)
385{
386 unsigned char *p;
387
388 mg_id_string(id, s, ofs, len - 1);
389
390 p = s + strnlen(s, len - 1);
391 while (p > s && p[-1] == ' ')
392 p--;
393 *p = '\0';
394}
395
360static int mg_get_disk_id(struct mg_host *host) 396static int mg_get_disk_id(struct mg_host *host)
361{ 397{
362 u32 i; 398 u32 i;
@@ -403,9 +439,9 @@ static int mg_get_disk_id(struct mg_host *host)
403 host->n_sectors -= host->nres_sectors; 439 host->n_sectors -= host->nres_sectors;
404 } 440 }
405 441
406 ata_id_c_string(id, fwrev, ATA_ID_FW_REV, sizeof(fwrev)); 442 mg_id_c_string(id, fwrev, ATA_ID_FW_REV, sizeof(fwrev));
407 ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model)); 443 mg_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
408 ata_id_c_string(id, serial, ATA_ID_SERNO, sizeof(serial)); 444 mg_id_c_string(id, serial, ATA_ID_SERNO, sizeof(serial));
409 printk(KERN_INFO "mg_disk: model: %s\n", model); 445 printk(KERN_INFO "mg_disk: model: %s\n", model);
410 printk(KERN_INFO "mg_disk: firm: %.8s\n", fwrev); 446 printk(KERN_INFO "mg_disk: firm: %.8s\n", fwrev);
411 printk(KERN_INFO "mg_disk: serial: %s\n", serial); 447 printk(KERN_INFO "mg_disk: serial: %s\n", serial);