Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
9ab7486e
Commit
9ab7486e
authored
Aug 29, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge HEAD from master.kernel.org:/home/rmk/linux-2.6-mmc.git
parents
975f957d
dce77377
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
112 additions
and
22 deletions
+112
-22
drivers/mmc/mmc.c
drivers/mmc/mmc.c
+13
-16
drivers/mmc/mmc.h
drivers/mmc/mmc.h
+5
-0
drivers/mmc/mmc_sysfs.c
drivers/mmc/mmc_sysfs.c
+88
-2
drivers/mmc/mmci.c
drivers/mmc/mmci.c
+2
-2
drivers/mmc/wbsd.c
drivers/mmc/wbsd.c
+1
-1
include/linux/mmc/host.h
include/linux/mmc/host.h
+3
-1
No files found.
drivers/mmc/mmc.c
View file @
9ab7486e
...
...
@@ -361,7 +361,7 @@ static void mmc_decode_cid(struct mmc_card *card)
default:
printk
(
"%s: card has unknown MMCA version %d
\n
"
,
card
->
host
->
host_name
,
card
->
csd
.
mmca_vsn
);
mmc_hostname
(
card
->
host
)
,
card
->
csd
.
mmca_vsn
);
mmc_card_set_bad
(
card
);
break
;
}
...
...
@@ -383,7 +383,7 @@ static void mmc_decode_csd(struct mmc_card *card)
csd_struct
=
UNSTUFF_BITS
(
resp
,
126
,
2
);
if
(
csd_struct
!=
1
&&
csd_struct
!=
2
)
{
printk
(
"%s: unrecognised CSD structure version %d
\n
"
,
card
->
host
->
host_name
,
csd_struct
);
mmc_hostname
(
card
->
host
)
,
csd_struct
);
mmc_card_set_bad
(
card
);
return
;
}
...
...
@@ -551,7 +551,7 @@ static void mmc_discover_cards(struct mmc_host *host)
}
if
(
err
!=
MMC_ERR_NONE
)
{
printk
(
KERN_ERR
"%s: error requesting CID: %d
\n
"
,
host
->
host_name
,
err
);
mmc_hostname
(
host
)
,
err
);
break
;
}
...
...
@@ -796,17 +796,13 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
{
struct
mmc_host
*
host
;
host
=
kmalloc
(
sizeof
(
struct
mmc_host
)
+
extra
,
GFP_KERNEL
);
host
=
mmc_alloc_host_sysfs
(
extra
,
dev
);
if
(
host
)
{
memset
(
host
,
0
,
sizeof
(
struct
mmc_host
)
+
extra
);
spin_lock_init
(
&
host
->
lock
);
init_waitqueue_head
(
&
host
->
wq
);
INIT_LIST_HEAD
(
&
host
->
cards
);
INIT_WORK
(
&
host
->
detect
,
mmc_rescan
,
host
);
host
->
dev
=
dev
;
/*
* By default, hosts do not support SGIO or large requests.
* They have to set these according to their abilities.
...
...
@@ -828,15 +824,15 @@ EXPORT_SYMBOL(mmc_alloc_host);
*/
int
mmc_add_host
(
struct
mmc_host
*
host
)
{
static
unsigned
int
host_num
;
int
ret
;
snprintf
(
host
->
host_name
,
sizeof
(
host
->
host_name
),
"mmc%d"
,
host_num
++
);
mmc_power_off
(
host
);
mmc_detect_change
(
host
);
ret
=
mmc_add_host_sysfs
(
host
);
if
(
ret
==
0
)
{
mmc_power_off
(
host
);
mmc_detect_change
(
host
);
}
return
0
;
return
ret
;
}
EXPORT_SYMBOL
(
mmc_add_host
);
...
...
@@ -859,6 +855,7 @@ void mmc_remove_host(struct mmc_host *host)
}
mmc_power_off
(
host
);
mmc_remove_host_sysfs
(
host
);
}
EXPORT_SYMBOL
(
mmc_remove_host
);
...
...
@@ -872,7 +869,7 @@ EXPORT_SYMBOL(mmc_remove_host);
void
mmc_free_host
(
struct
mmc_host
*
host
)
{
flush_scheduled_work
();
kfree
(
host
);
mmc_free_host_sysfs
(
host
);
}
EXPORT_SYMBOL
(
mmc_free_host
);
...
...
drivers/mmc/mmc.h
View file @
9ab7486e
...
...
@@ -13,4 +13,9 @@
void
mmc_init_card
(
struct
mmc_card
*
card
,
struct
mmc_host
*
host
);
int
mmc_register_card
(
struct
mmc_card
*
card
);
void
mmc_remove_card
(
struct
mmc_card
*
card
);
struct
mmc_host
*
mmc_alloc_host_sysfs
(
int
extra
,
struct
device
*
dev
);
int
mmc_add_host_sysfs
(
struct
mmc_host
*
host
);
void
mmc_remove_host_sysfs
(
struct
mmc_host
*
host
);
void
mmc_free_host_sysfs
(
struct
mmc_host
*
host
);
#endif
drivers/mmc/mmc_sysfs.c
View file @
9ab7486e
...
...
@@ -12,6 +12,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/idr.h>
#include <linux/mmc/card.h>
#include <linux/mmc/host.h>
...
...
@@ -20,6 +21,7 @@
#define dev_to_mmc_card(d) container_of(d, struct mmc_card, dev)
#define to_mmc_driver(d) container_of(d, struct mmc_driver, drv)
#define cls_dev_to_mmc_host(d) container_of(d, struct mmc_host, class_dev)
#define MMC_ATTR(name, fmt, args...) \
static ssize_t mmc_##name##_show (struct device *dev, struct device_attribute *attr, char *buf) \
...
...
@@ -206,7 +208,7 @@ void mmc_init_card(struct mmc_card *card, struct mmc_host *host)
int
mmc_register_card
(
struct
mmc_card
*
card
)
{
snprintf
(
card
->
dev
.
bus_id
,
sizeof
(
card
->
dev
.
bus_id
),
"%s:%04x"
,
card
->
host
->
host_name
,
card
->
rca
);
"%s:%04x"
,
mmc_hostname
(
card
->
host
)
,
card
->
rca
);
return
device_add
(
&
card
->
dev
);
}
...
...
@@ -224,13 +226,97 @@ void mmc_remove_card(struct mmc_card *card)
}
static
void
mmc_host_classdev_release
(
struct
class_device
*
dev
)
{
struct
mmc_host
*
host
=
cls_dev_to_mmc_host
(
dev
);
kfree
(
host
);
}
static
struct
class
mmc_host_class
=
{
.
name
=
"mmc_host"
,
.
release
=
mmc_host_classdev_release
,
};
static
DEFINE_IDR
(
mmc_host_idr
);
static
DEFINE_SPINLOCK
(
mmc_host_lock
);
/*
* Internal function. Allocate a new MMC host.
*/
struct
mmc_host
*
mmc_alloc_host_sysfs
(
int
extra
,
struct
device
*
dev
)
{
struct
mmc_host
*
host
;
host
=
kmalloc
(
sizeof
(
struct
mmc_host
)
+
extra
,
GFP_KERNEL
);
if
(
host
)
{
memset
(
host
,
0
,
sizeof
(
struct
mmc_host
)
+
extra
);
host
->
dev
=
dev
;
host
->
class_dev
.
dev
=
host
->
dev
;
host
->
class_dev
.
class
=
&
mmc_host_class
;
class_device_initialize
(
&
host
->
class_dev
);
}
return
host
;
}
/*
* Internal function. Register a new MMC host with the MMC class.
*/
int
mmc_add_host_sysfs
(
struct
mmc_host
*
host
)
{
int
err
;
if
(
!
idr_pre_get
(
&
mmc_host_idr
,
GFP_KERNEL
))
return
-
ENOMEM
;
spin_lock
(
&
mmc_host_lock
);
err
=
idr_get_new
(
&
mmc_host_idr
,
host
,
&
host
->
index
);
spin_unlock
(
&
mmc_host_lock
);
if
(
err
)
return
err
;
snprintf
(
host
->
class_dev
.
class_id
,
BUS_ID_SIZE
,
"mmc%d"
,
host
->
index
);
return
class_device_add
(
&
host
->
class_dev
);
}
/*
* Internal function. Unregister a MMC host with the MMC class.
*/
void
mmc_remove_host_sysfs
(
struct
mmc_host
*
host
)
{
class_device_del
(
&
host
->
class_dev
);
spin_lock
(
&
mmc_host_lock
);
idr_remove
(
&
mmc_host_idr
,
host
->
index
);
spin_unlock
(
&
mmc_host_lock
);
}
/*
* Internal function. Free a MMC host.
*/
void
mmc_free_host_sysfs
(
struct
mmc_host
*
host
)
{
class_device_put
(
&
host
->
class_dev
);
}
static
int
__init
mmc_init
(
void
)
{
return
bus_register
(
&
mmc_bus_type
);
int
ret
=
bus_register
(
&
mmc_bus_type
);
if
(
ret
==
0
)
{
ret
=
class_register
(
&
mmc_host_class
);
if
(
ret
)
bus_unregister
(
&
mmc_bus_type
);
}
return
ret
;
}
static
void
__exit
mmc_exit
(
void
)
{
class_unregister
(
&
mmc_host_class
);
bus_unregister
(
&
mmc_bus_type
);
}
...
...
drivers/mmc/mmci.c
View file @
9ab7486e
...
...
@@ -34,7 +34,7 @@
#ifdef CONFIG_MMC_DEBUG
#define DBG(host,fmt,args...) \
pr_debug("%s: %s: " fmt,
host->mmc->host_name
, __func__ , args)
pr_debug("%s: %s: " fmt,
mmc_hostname(host->mmc)
, __func__ , args)
#else
#define DBG(host,fmt,args...) do { } while (0)
#endif
...
...
@@ -541,7 +541,7 @@ static int mmci_probe(struct amba_device *dev, void *id)
mmc_add_host
(
mmc
);
printk
(
KERN_INFO
"%s: MMCI rev %x cfg %02x at 0x%08lx irq %d,%d
\n
"
,
mmc
->
host_name
,
amba_rev
(
dev
),
amba_config
(
dev
),
mmc
_hostname
(
mmc
)
,
amba_rev
(
dev
),
amba_config
(
dev
),
dev
->
res
.
start
,
dev
->
irq
[
0
],
dev
->
irq
[
1
]);
init_timer
(
&
host
->
timer
);
...
...
drivers/mmc/wbsd.c
View file @
9ab7486e
...
...
@@ -1796,7 +1796,7 @@ static int __devinit wbsd_init(struct device* dev, int base, int irq, int dma,
mmc_add_host
(
mmc
);
printk
(
KERN_INFO
"%s: W83L51xD"
,
mmc
->
host_name
);
printk
(
KERN_INFO
"%s: W83L51xD"
,
mmc
_hostname
(
mmc
)
);
if
(
host
->
chip_id
!=
0
)
printk
(
" id %x"
,
(
int
)
host
->
chip_id
);
printk
(
" at 0x%x irq %d"
,
(
int
)
host
->
base
,
(
int
)
host
->
irq
);
...
...
include/linux/mmc/host.h
View file @
9ab7486e
...
...
@@ -63,11 +63,12 @@ struct device;
struct
mmc_host
{
struct
device
*
dev
;
struct
class_device
class_dev
;
int
index
;
struct
mmc_host_ops
*
ops
;
unsigned
int
f_min
;
unsigned
int
f_max
;
u32
ocr_avail
;
char
host_name
[
8
];
/* host specific block data */
unsigned
int
max_seg_size
;
/* see blk_queue_max_segment_size */
...
...
@@ -97,6 +98,7 @@ extern void mmc_free_host(struct mmc_host *);
#define mmc_priv(x) ((void *)((x) + 1))
#define mmc_dev(x) ((x)->dev)
#define mmc_hostname(x) ((x)->class_dev.class_id)
extern
int
mmc_suspend_host
(
struct
mmc_host
*
,
pm_message_t
);
extern
int
mmc_resume_host
(
struct
mmc_host
*
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment