{
struct fw_unit *unit = fw_unit(dev);
+ fw_device_put(fw_parent_device(unit));
kfree(unit);
}
if (device_register(&unit->device) < 0)
goto skip_unit;
+ fw_device_get(device);
continue;
skip_unit:
#ifndef _FIREWIRE_CORE_H
#define _FIREWIRE_CORE_H
+#include <linux/device.h>
#include <linux/fs.h>
#include <linux/list.h>
#include <linux/idr.h>
extern struct idr fw_device_idr;
extern int fw_cdev_major;
+static inline struct fw_device *fw_device_get(struct fw_device *device)
+{
+ get_device(&device->device);
+
+ return device;
+}
+
+static inline void fw_device_put(struct fw_device *device)
+{
+ put_device(&device->device);
+}
+
struct fw_device *fw_device_get_by_devt(dev_t devt);
int fw_device_set_broadcast_channel(struct device *dev, void *gen);
void fw_node_event(struct fw_card *card, struct fw_node *node, int event);
return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN;
}
-static inline struct fw_device *fw_device_get(struct fw_device *device)
-{
- get_device(&device->device);
-
- return device;
-}
-
-static inline void fw_device_put(struct fw_device *device)
-{
- put_device(&device->device);
-}
-
int fw_device_enable_phys_dma(struct fw_device *device);
/*
fw_iso_resources_destroy(&isight->resources);
fw_unit_put(isight->unit);
- fw_device_put(isight->device);
mutex_destroy(&isight->mutex);
}
isight->card = card;
mutex_init(&isight->mutex);
isight->unit = fw_unit_get(unit);
- isight->device = fw_device_get(fw_dev);
+ isight->device = fw_dev;
isight->audio_base = get_unit_base(unit);
if (!isight->audio_base) {
dev_err(&unit->device, "audio unit base not found\n");
err_unit:
fw_unit_put(isight->unit);
- fw_device_put(isight->device);
mutex_destroy(&isight->mutex);
error:
snd_card_free(card);
static void fwspk_card_free(struct snd_card *card)
{
struct fwspk *fwspk = card->private_data;
- struct fw_device *dev = fw_parent_device(fwspk->unit);
amdtp_out_stream_destroy(&fwspk->stream);
cmp_connection_destroy(&fwspk->connection);
fw_unit_put(fwspk->unit);
- fw_device_put(dev);
mutex_destroy(&fwspk->mutex);
}
fwspk = card->private_data;
fwspk->card = card;
mutex_init(&fwspk->mutex);
- fw_device_get(fw_dev);
fwspk->unit = fw_unit_get(unit);
fwspk->device_info = fwspk_detect(fw_dev);
if (!fwspk->device_info) {
cmp_connection_destroy(&fwspk->connection);
err_unit:
fw_unit_put(fwspk->unit);
- fw_device_put(fw_dev);
mutex_destroy(&fwspk->mutex);
error:
snd_card_free(card);