diff options
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/mmc_block.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c index 198561d21710..d5f28981596b 100644 --- a/drivers/mmc/mmc_block.c +++ b/drivers/mmc/mmc_block.c | |||
@@ -113,31 +113,18 @@ static int mmc_blk_release(struct inode *inode, struct file *filp) | |||
113 | } | 113 | } |
114 | 114 | ||
115 | static int | 115 | static int |
116 | mmc_blk_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) | 116 | mmc_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
117 | { | 117 | { |
118 | struct block_device *bdev = inode->i_bdev; | 118 | geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16); |
119 | 119 | geo->heads = 4; | |
120 | if (cmd == HDIO_GETGEO) { | 120 | geo->sectors = 16; |
121 | struct hd_geometry geo; | 121 | return 0; |
122 | |||
123 | memset(&geo, 0, sizeof(struct hd_geometry)); | ||
124 | |||
125 | geo.cylinders = get_capacity(bdev->bd_disk) / (4 * 16); | ||
126 | geo.heads = 4; | ||
127 | geo.sectors = 16; | ||
128 | geo.start = get_start_sect(bdev); | ||
129 | |||
130 | return copy_to_user((void __user *)arg, &geo, sizeof(geo)) | ||
131 | ? -EFAULT : 0; | ||
132 | } | ||
133 | |||
134 | return -ENOTTY; | ||
135 | } | 122 | } |
136 | 123 | ||
137 | static struct block_device_operations mmc_bdops = { | 124 | static struct block_device_operations mmc_bdops = { |
138 | .open = mmc_blk_open, | 125 | .open = mmc_blk_open, |
139 | .release = mmc_blk_release, | 126 | .release = mmc_blk_release, |
140 | .ioctl = mmc_blk_ioctl, | 127 | .getgeo = mmc_blk_getgeo, |
141 | .owner = THIS_MODULE, | 128 | .owner = THIS_MODULE, |
142 | }; | 129 | }; |
143 | 130 | ||