| .. | .. |
|---|
| 23 | 23 | MODULE_DESCRIPTION("Driver for Rio Karma"); |
|---|
| 24 | 24 | MODULE_AUTHOR("Bob Copeland <me@bobcopeland.com>, Keith Bennett <keith@mcs.st-and.ac.uk>"); |
|---|
| 25 | 25 | MODULE_LICENSE("GPL"); |
|---|
| 26 | +MODULE_IMPORT_NS(USB_STORAGE); |
|---|
| 26 | 27 | |
|---|
| 27 | 28 | #define RIO_PREFIX "RIOP\x00" |
|---|
| 28 | 29 | #define RIO_PREFIX_LEN 5 |
|---|
| .. | .. |
|---|
| 167 | 168 | static void rio_karma_destructor(void *extra) |
|---|
| 168 | 169 | { |
|---|
| 169 | 170 | struct karma_data *data = (struct karma_data *) extra; |
|---|
| 171 | + |
|---|
| 170 | 172 | kfree(data->recv); |
|---|
| 171 | 173 | } |
|---|
| 172 | 174 | |
|---|
| 173 | 175 | static int rio_karma_init(struct us_data *us) |
|---|
| 174 | 176 | { |
|---|
| 175 | | - int ret = 0; |
|---|
| 176 | 177 | struct karma_data *data = kzalloc(sizeof(struct karma_data), GFP_NOIO); |
|---|
| 178 | + |
|---|
| 177 | 179 | if (!data) |
|---|
| 178 | | - goto out; |
|---|
| 180 | + return -ENOMEM; |
|---|
| 179 | 181 | |
|---|
| 180 | 182 | data->recv = kmalloc(RIO_RECV_LEN, GFP_NOIO); |
|---|
| 181 | 183 | if (!data->recv) { |
|---|
| 182 | 184 | kfree(data); |
|---|
| 183 | | - goto out; |
|---|
| 185 | + return -ENOMEM; |
|---|
| 184 | 186 | } |
|---|
| 185 | 187 | |
|---|
| 186 | 188 | us->extra = data; |
|---|
| 187 | 189 | us->extra_destructor = rio_karma_destructor; |
|---|
| 188 | | - ret = rio_karma_send_command(RIO_ENTER_STORAGE, us); |
|---|
| 189 | | - data->in_storage = (ret == 0); |
|---|
| 190 | | -out: |
|---|
| 191 | | - return ret; |
|---|
| 190 | + if (rio_karma_send_command(RIO_ENTER_STORAGE, us)) |
|---|
| 191 | + return -EIO; |
|---|
| 192 | + |
|---|
| 193 | + data->in_storage = 1; |
|---|
| 194 | + |
|---|
| 195 | + return 0; |
|---|
| 192 | 196 | } |
|---|
| 193 | 197 | |
|---|
| 194 | 198 | static struct scsi_host_template karma_host_template; |
|---|