Commit 91f8d011 authored by Alex Dubov's avatar Alex Dubov Committed by Pierre Ossman

tifm: layout fixes, small changes to comments and printfs

Cosmetic changes to the code.
Signed-off-by: default avatarAlex Dubov <oakad@yahoo.com>
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 13cdf48e
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
*/ */
#include <linux/tifm.h> #include <linux/tifm.h>
#include <linux/dma-mapping.h>
#include <linux/freezer.h>
#define DRIVER_NAME "tifm_7xx1" #define DRIVER_NAME "tifm_7xx1"
#define DRIVER_VERSION "0.8" #define DRIVER_VERSION "0.8"
...@@ -41,8 +39,7 @@ static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id) ...@@ -41,8 +39,7 @@ static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id)
{ {
struct tifm_adapter *fm = dev_id; struct tifm_adapter *fm = dev_id;
struct tifm_dev *sock; struct tifm_dev *sock;
unsigned int irq_status; unsigned int irq_status, cnt;
unsigned int cnt;
spin_lock(&fm->lock); spin_lock(&fm->lock);
irq_status = readl(fm->addr + FM_INTERRUPT_STATUS); irq_status = readl(fm->addr + FM_INTERRUPT_STATUS);
...@@ -134,11 +131,10 @@ static void tifm_7xx1_switch_media(struct work_struct *work) ...@@ -134,11 +131,10 @@ static void tifm_7xx1_switch_media(struct work_struct *work)
{ {
struct tifm_adapter *fm = container_of(work, struct tifm_adapter, struct tifm_adapter *fm = container_of(work, struct tifm_adapter,
media_switcher); media_switcher);
struct tifm_dev *sock;
unsigned long flags; unsigned long flags;
unsigned char media_id; unsigned char media_id;
int cnt; unsigned int socket_change_set, cnt;
struct tifm_dev *sock;
unsigned int socket_change_set;
spin_lock_irqsave(&fm->lock, flags); spin_lock_irqsave(&fm->lock, flags);
socket_change_set = fm->socket_change_set; socket_change_set = fm->socket_change_set;
......
...@@ -115,23 +115,23 @@ static int tifm_device_remove(struct device *dev) ...@@ -115,23 +115,23 @@ static int tifm_device_remove(struct device *dev)
static int tifm_device_suspend(struct device *dev, pm_message_t state) static int tifm_device_suspend(struct device *dev, pm_message_t state)
{ {
struct tifm_dev *fm_dev = container_of(dev, struct tifm_dev, dev); struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver, struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
driver); driver);
if (dev->driver && drv->suspend) if (dev->driver && drv->suspend)
return drv->suspend(fm_dev, state); return drv->suspend(sock, state);
return 0; return 0;
} }
static int tifm_device_resume(struct device *dev) static int tifm_device_resume(struct device *dev)
{ {
struct tifm_dev *fm_dev = container_of(dev, struct tifm_dev, dev); struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver, struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
driver); driver);
if (dev->driver && drv->resume) if (dev->driver && drv->resume)
return drv->resume(fm_dev); return drv->resume(sock);
return 0; return 0;
} }
...@@ -155,14 +155,14 @@ static struct device_attribute tifm_dev_attrs[] = { ...@@ -155,14 +155,14 @@ static struct device_attribute tifm_dev_attrs[] = {
}; };
static struct bus_type tifm_bus_type = { static struct bus_type tifm_bus_type = {
.name = "tifm", .name = "tifm",
.dev_attrs = tifm_dev_attrs, .dev_attrs = tifm_dev_attrs,
.match = tifm_bus_match, .match = tifm_bus_match,
.uevent = tifm_uevent, .uevent = tifm_uevent,
.probe = tifm_device_probe, .probe = tifm_device_probe,
.remove = tifm_device_remove, .remove = tifm_device_remove,
.suspend = tifm_device_suspend, .suspend = tifm_device_suspend,
.resume = tifm_device_resume .resume = tifm_device_resume
}; };
static void tifm_free(struct class_device *cdev) static void tifm_free(struct class_device *cdev)
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
* Special thanks to Brad Campbell for extensive testing of this driver.
*
*/ */
...@@ -39,6 +41,7 @@ module_param(fixed_timeout, bool, 0644); ...@@ -39,6 +41,7 @@ module_param(fixed_timeout, bool, 0644);
#define TIFM_MMCSD_ERRMASK 0x01e0 /* set bits: CCRC, CTO, DCRC, DTO */ #define TIFM_MMCSD_ERRMASK 0x01e0 /* set bits: CCRC, CTO, DCRC, DTO */
#define TIFM_MMCSD_EOC 0x0001 /* end of command phase */ #define TIFM_MMCSD_EOC 0x0001 /* end of command phase */
#define TIFM_MMCSD_CD 0x0002 /* card detect */
#define TIFM_MMCSD_CB 0x0004 /* card enter busy state */ #define TIFM_MMCSD_CB 0x0004 /* card enter busy state */
#define TIFM_MMCSD_BRS 0x0008 /* block received/sent */ #define TIFM_MMCSD_BRS 0x0008 /* block received/sent */
#define TIFM_MMCSD_EOFB 0x0010 /* card exit busy state */ #define TIFM_MMCSD_EOFB 0x0010 /* card exit busy state */
...@@ -48,6 +51,8 @@ module_param(fixed_timeout, bool, 0644); ...@@ -48,6 +51,8 @@ module_param(fixed_timeout, bool, 0644);
#define TIFM_MMCSD_CCRC 0x0100 /* command crc error */ #define TIFM_MMCSD_CCRC 0x0100 /* command crc error */
#define TIFM_MMCSD_AF 0x0400 /* fifo almost full */ #define TIFM_MMCSD_AF 0x0400 /* fifo almost full */
#define TIFM_MMCSD_AE 0x0800 /* fifo almost empty */ #define TIFM_MMCSD_AE 0x0800 /* fifo almost empty */
#define TIFM_MMCSD_OCRB 0x1000 /* OCR busy */
#define TIFM_MMCSD_CIRQ 0x2000 /* card irq (cmd40/sdio) */
#define TIFM_MMCSD_CERR 0x4000 /* card status error */ #define TIFM_MMCSD_CERR 0x4000 /* card status error */
#define TIFM_MMCSD_ODTO 0x0040 /* open drain / extended timeout */ #define TIFM_MMCSD_ODTO 0x0040 /* open drain / extended timeout */
...@@ -83,16 +88,16 @@ enum { ...@@ -83,16 +88,16 @@ enum {
}; };
struct tifm_sd { struct tifm_sd {
struct tifm_dev *dev; struct tifm_dev *dev;
unsigned short eject:1, unsigned short eject:1,
open_drain:1, open_drain:1,
no_dma:1; no_dma:1;
unsigned short cmd_flags; unsigned short cmd_flags;
unsigned int clk_freq; unsigned int clk_freq;
unsigned int clk_div; unsigned int clk_div;
unsigned long timeout_jiffies; unsigned long timeout_jiffies;
struct tasklet_struct finish_tasklet; struct tasklet_struct finish_tasklet;
struct timer_list timer; struct timer_list timer;
...@@ -627,7 +632,8 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq) ...@@ -627,7 +632,8 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
} }
if (host->req) { if (host->req) {
printk(KERN_ERR DRIVER_NAME ": unfinished request detected\n"); printk(KERN_ERR "%s : unfinished request detected\n",
sock->dev.bus_id);
spin_unlock_irqrestore(&sock->lock, flags); spin_unlock_irqrestore(&sock->lock, flags);
goto err_out; goto err_out;
} }
...@@ -737,7 +743,8 @@ static void tifm_sd_end_cmd(unsigned long data) ...@@ -737,7 +743,8 @@ static void tifm_sd_end_cmd(unsigned long data)
host->req = NULL; host->req = NULL;
if (!mrq) { if (!mrq) {
printk(KERN_ERR DRIVER_NAME ": no request to complete?\n"); printk(KERN_ERR " %s : no request to complete?\n",
sock->dev.bus_id);
spin_unlock_irqrestore(&sock->lock, flags); spin_unlock_irqrestore(&sock->lock, flags);
return; return;
} }
...@@ -775,8 +782,10 @@ static void tifm_sd_abort(unsigned long data) ...@@ -775,8 +782,10 @@ static void tifm_sd_abort(unsigned long data)
{ {
struct tifm_sd *host = (struct tifm_sd*)data; struct tifm_sd *host = (struct tifm_sd*)data;
printk(KERN_ERR DRIVER_NAME printk(KERN_ERR
": card failed to respond for a long period of time\n"); "%s : card failed to respond for a long period of time "
"(%x, %x)\n",
host->dev->dev.bus_id, host->req->cmd->opcode, host->cmd_flags);
tifm_eject(host->dev); tifm_eject(host->dev);
} }
...@@ -790,8 +799,11 @@ static void tifm_sd_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -790,8 +799,11 @@ static void tifm_sd_ios(struct mmc_host *mmc, struct mmc_ios *ios)
spin_lock_irqsave(&sock->lock, flags); spin_lock_irqsave(&sock->lock, flags);
dev_dbg(&sock->dev, "Setting bus width %d, power %d\n", ios->bus_width, dev_dbg(&sock->dev, "ios: clock = %u, vdd = %x, bus_mode = %x, "
ios->power_mode); "chip_select = %x, power_mode = %x, bus_width = %x\n",
ios->clock, ios->vdd, ios->bus_mode, ios->chip_select,
ios->power_mode, ios->bus_width);
if (ios->bus_width == MMC_BUS_WIDTH_4) { if (ios->bus_width == MMC_BUS_WIDTH_4) {
writel(TIFM_MMCSD_4BBUS | readl(sock->addr + SOCK_MMCSD_CONFIG), writel(TIFM_MMCSD_4BBUS | readl(sock->addr + SOCK_MMCSD_CONFIG),
sock->addr + SOCK_MMCSD_CONFIG); sock->addr + SOCK_MMCSD_CONFIG);
...@@ -937,7 +949,8 @@ static int tifm_sd_probe(struct tifm_dev *sock) ...@@ -937,7 +949,8 @@ static int tifm_sd_probe(struct tifm_dev *sock)
if (!(TIFM_SOCK_STATE_OCCUPIED if (!(TIFM_SOCK_STATE_OCCUPIED
& readl(sock->addr + SOCK_PRESENT_STATE))) { & readl(sock->addr + SOCK_PRESENT_STATE))) {
printk(KERN_WARNING DRIVER_NAME ": card gone, unexpectedly\n"); printk(KERN_WARNING "%s : card gone, unexpectedly\n",
sock->dev.bus_id);
return rc; return rc;
} }
...@@ -974,11 +987,9 @@ static int tifm_sd_probe(struct tifm_dev *sock) ...@@ -974,11 +987,9 @@ static int tifm_sd_probe(struct tifm_dev *sock)
if (!rc) if (!rc)
rc = mmc_add_host(mmc); rc = mmc_add_host(mmc);
if (rc) if (!rc)
goto out_free_mmc; return 0;
return 0;
out_free_mmc:
mmc_free_host(mmc); mmc_free_host(mmc);
return rc; return rc;
} }
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/wait.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/kthread.h> #include <linux/workqueue.h>
/* Host registers (relative to pci base address): */ /* Host registers (relative to pci base address): */
enum { enum {
FM_SET_INTERRUPT_ENABLE = 0x008, FM_SET_INTERRUPT_ENABLE = 0x008,
FM_CLEAR_INTERRUPT_ENABLE = 0x00c, FM_CLEAR_INTERRUPT_ENABLE = 0x00c,
FM_INTERRUPT_STATUS = 0x014 }; FM_INTERRUPT_STATUS = 0x014
};
/* Socket registers (relative to socket base address): */ /* Socket registers (relative to socket base address): */
enum { enum {
...@@ -58,7 +58,8 @@ enum { ...@@ -58,7 +58,8 @@ enum {
SOCK_MS_DATA = 0x188, SOCK_MS_DATA = 0x188,
SOCK_MS_STATUS = 0x18c, SOCK_MS_STATUS = 0x18c,
SOCK_MS_SYSTEM = 0x190, SOCK_MS_SYSTEM = 0x190,
SOCK_FIFO_ACCESS = 0x200 }; SOCK_FIFO_ACCESS = 0x200
};
#define TIFM_CTRL_LED 0x00000040 #define TIFM_CTRL_LED 0x00000040
#define TIFM_CTRL_FAST_CLK 0x00000100 #define TIFM_CTRL_FAST_CLK 0x00000100
...@@ -66,14 +67,14 @@ enum { ...@@ -66,14 +67,14 @@ enum {
#define TIFM_SOCK_STATE_OCCUPIED 0x00000008 #define TIFM_SOCK_STATE_OCCUPIED 0x00000008
#define TIFM_SOCK_STATE_POWERED 0x00000080 #define TIFM_SOCK_STATE_POWERED 0x00000080
#define TIFM_FIFO_ENABLE 0x00000001 /* Meaning of this constant is unverified */ #define TIFM_FIFO_ENABLE 0x00000001
#define TIFM_FIFO_READY 0x00000001 /* Meaning of this constant is unverified */ #define TIFM_FIFO_READY 0x00000001
#define TIFM_FIFO_INT_SETALL 0x0000ffff #define TIFM_FIFO_INT_SETALL 0x0000ffff
#define TIFM_FIFO_INTMASK 0x00000005 /* Meaning of this constant is unverified */ #define TIFM_FIFO_INTMASK 0x00000005
#define TIFM_DMA_RESET 0x00000002 /* Meaning of this constant is unverified */ #define TIFM_DMA_RESET 0x00000002
#define TIFM_DMA_TX 0x00008000 /* Meaning of this constant is unverified */ #define TIFM_DMA_TX 0x00008000
#define TIFM_DMA_EN 0x00000001 /* Meaning of this constant is unverified */ #define TIFM_DMA_EN 0x00000001
#define TIFM_DMA_TSIZE 0x0000007f #define TIFM_DMA_TSIZE 0x0000007f
#define TIFM_TYPE_XD 1 #define TIFM_TYPE_XD 1
...@@ -86,44 +87,44 @@ struct tifm_device_id { ...@@ -86,44 +87,44 @@ struct tifm_device_id {
struct tifm_driver; struct tifm_driver;
struct tifm_dev { struct tifm_dev {
char __iomem *addr; char __iomem *addr;
spinlock_t lock; spinlock_t lock;
unsigned char type; unsigned char type;
unsigned int socket_id; unsigned int socket_id;
void (*card_event)(struct tifm_dev *sock); void (*card_event)(struct tifm_dev *sock);
void (*data_event)(struct tifm_dev *sock); void (*data_event)(struct tifm_dev *sock);
struct device dev; struct device dev;
}; };
struct tifm_driver { struct tifm_driver {
struct tifm_device_id *id_table; struct tifm_device_id *id_table;
int (*probe)(struct tifm_dev *dev); int (*probe)(struct tifm_dev *dev);
void (*remove)(struct tifm_dev *dev); void (*remove)(struct tifm_dev *dev);
int (*suspend)(struct tifm_dev *dev, int (*suspend)(struct tifm_dev *dev,
pm_message_t state); pm_message_t state);
int (*resume)(struct tifm_dev *dev); int (*resume)(struct tifm_dev *dev);
struct device_driver driver; struct device_driver driver;
}; };
struct tifm_adapter { struct tifm_adapter {
char __iomem *addr; char __iomem *addr;
spinlock_t lock; spinlock_t lock;
unsigned int irq_status; unsigned int irq_status;
unsigned int socket_change_set; unsigned int socket_change_set;
unsigned int id; unsigned int id;
unsigned int num_sockets; unsigned int num_sockets;
struct completion *finish_me; struct completion *finish_me;
struct work_struct media_switcher; struct work_struct media_switcher;
struct class_device cdev; struct class_device cdev;
void (*eject)(struct tifm_adapter *fm, void (*eject)(struct tifm_adapter *fm,
struct tifm_dev *sock); struct tifm_dev *sock);
struct tifm_dev *sockets[0]; struct tifm_dev *sockets[0];
}; };
struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets, struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets,
...@@ -147,7 +148,7 @@ void tifm_queue_work(struct work_struct *work); ...@@ -147,7 +148,7 @@ void tifm_queue_work(struct work_struct *work);
static inline void *tifm_get_drvdata(struct tifm_dev *dev) static inline void *tifm_get_drvdata(struct tifm_dev *dev)
{ {
return dev_get_drvdata(&dev->dev); return dev_get_drvdata(&dev->dev);
} }
static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data) static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment