video: adf: make device node names less hierarchical

adf/foobar/device -> adf0
adf/foobar/interface1 -> adf-interface0.1
adf/foobar/overlay-engine1 -> adf-overlay-engine0.1

Change-Id: I7af7f84ce3f101ecb02f448070c200ff3e03f2ec
Signed-off-by: Greg Hackmann <ghackmann@google.com>
This commit is contained in:
Greg Hackmann 2013-11-07 10:12:00 -08:00 committed by John Stultz
parent 3d46874e09
commit 36a63d840c
2 changed files with 18 additions and 26 deletions

View file

@ -37,6 +37,8 @@
#define ADF_SHORT_FENCE_TIMEOUT (1 * MSEC_PER_SEC) #define ADF_SHORT_FENCE_TIMEOUT (1 * MSEC_PER_SEC)
#define ADF_LONG_FENCE_TIMEOUT (10 * MSEC_PER_SEC) #define ADF_LONG_FENCE_TIMEOUT (10 * MSEC_PER_SEC)
static DEFINE_IDR(adf_devices);
static void adf_fence_wait(struct adf_device *dev, struct sync_fence *fence) static void adf_fence_wait(struct adf_device *dev, struct sync_fence *fence)
{ {
/* sync_fence_wait() dumps debug information on timeout. Experience /* sync_fence_wait() dumps debug information on timeout. Experience
@ -455,23 +457,20 @@ static int adf_obj_init(struct adf_obj *obj, enum adf_obj_type type,
struct idr *idr, struct adf_device *parent, struct idr *idr, struct adf_device *parent,
const struct adf_obj_ops *ops, const char *fmt, va_list args) const struct adf_obj_ops *ops, const char *fmt, va_list args)
{ {
int ret;
if (ops && ops->supports_event && !ops->set_event) { if (ops && ops->supports_event && !ops->set_event) {
pr_err("%s: %s implements supports_event but not set_event\n", pr_err("%s: %s implements supports_event but not set_event\n",
__func__, adf_obj_type_str(type)); __func__, adf_obj_type_str(type));
return -EINVAL; return -EINVAL;
} }
if (idr) { ret = idr_alloc(idr, obj, 0, 0, GFP_KERNEL);
int ret = idr_alloc(idr, obj, 0, 0, GFP_KERNEL); if (ret < 0) {
if (ret < 0) { pr_err("%s: allocating object id failed: %d\n", __func__, ret);
pr_err("%s: allocating object id failed: %d\n", return ret;
__func__, ret);
return ret;
}
obj->id = ret;
} else {
obj->id = -1;
} }
obj->id = ret;
vscnprintf(obj->name, sizeof(obj->name), fmt, args); vscnprintf(obj->name, sizeof(obj->name), fmt, args);
@ -498,8 +497,7 @@ static void adf_obj_destroy(struct adf_obj *obj, struct idr *idr)
} }
mutex_destroy(&obj->event_lock); mutex_destroy(&obj->event_lock);
if (idr) idr_remove(idr, obj->id);
idr_remove(idr, obj->id);
} }
/** /**
@ -543,8 +541,8 @@ int adf_device_init(struct adf_device *dev, struct device *parent,
memset(dev, 0, sizeof(*dev)); memset(dev, 0, sizeof(*dev));
va_start(args, fmt); va_start(args, fmt);
ret = adf_obj_init(&dev->base, ADF_OBJ_DEVICE, NULL, dev, &ops->base, ret = adf_obj_init(&dev->base, ADF_OBJ_DEVICE, &adf_devices, dev,
fmt, args); &ops->base, fmt, args);
va_end(args); va_end(args);
if (ret < 0) if (ret < 0)
return ret; return ret;
@ -612,7 +610,7 @@ void adf_device_destroy(struct adf_device *dev)
} }
mutex_destroy(&dev->post_lock); mutex_destroy(&dev->post_lock);
mutex_destroy(&dev->client_lock); mutex_destroy(&dev->client_lock);
adf_obj_destroy(&dev->base, NULL); adf_obj_destroy(&dev->base, &adf_devices);
} }
EXPORT_SYMBOL(adf_device_destroy); EXPORT_SYMBOL(adf_device_destroy);

View file

@ -105,11 +105,6 @@ static struct device_attribute adf_interface_attrs[] = {
__ATTR_RO(vsync_timestamp), __ATTR_RO(vsync_timestamp),
}; };
static char *adf_devnode(struct device *dev, umode_t *mode)
{
return kasprintf(GFP_KERNEL, "adf/%s", dev_name(dev));
}
int adf_obj_sysfs_init(struct adf_obj *obj, struct device *parent) int adf_obj_sysfs_init(struct adf_obj *obj, struct device *parent)
{ {
int ret = idr_alloc(&adf_minors, obj, 0, 0, GFP_KERNEL); int ret = idr_alloc(&adf_minors, obj, 0, 0, GFP_KERNEL);
@ -142,7 +137,7 @@ static char *adf_device_devnode(struct device *dev, umode_t *mode,
kuid_t *uid, kgid_t *gid) kuid_t *uid, kgid_t *gid)
{ {
struct adf_obj *obj = container_of(dev, struct adf_obj, dev); struct adf_obj *obj = container_of(dev, struct adf_obj, dev);
return kasprintf(GFP_KERNEL, "adf/%s/device", obj->name); return kasprintf(GFP_KERNEL, "adf%d", obj->id);
} }
static char *adf_interface_devnode(struct device *dev, umode_t *mode, static char *adf_interface_devnode(struct device *dev, umode_t *mode,
@ -151,8 +146,8 @@ static char *adf_interface_devnode(struct device *dev, umode_t *mode,
struct adf_obj *obj = container_of(dev, struct adf_obj, dev); struct adf_obj *obj = container_of(dev, struct adf_obj, dev);
struct adf_interface *intf = adf_obj_to_interface(obj); struct adf_interface *intf = adf_obj_to_interface(obj);
struct adf_device *parent = adf_interface_parent(intf); struct adf_device *parent = adf_interface_parent(intf);
return kasprintf(GFP_KERNEL, "adf/%s/interface%d", return kasprintf(GFP_KERNEL, "adf-interface%d.%d",
parent->base.name, intf->base.id); parent->base.id, intf->base.id);
} }
static char *adf_overlay_engine_devnode(struct device *dev, umode_t *mode, static char *adf_overlay_engine_devnode(struct device *dev, umode_t *mode,
@ -161,8 +156,8 @@ static char *adf_overlay_engine_devnode(struct device *dev, umode_t *mode,
struct adf_obj *obj = container_of(dev, struct adf_obj, dev); struct adf_obj *obj = container_of(dev, struct adf_obj, dev);
struct adf_overlay_engine *eng = adf_obj_to_overlay_engine(obj); struct adf_overlay_engine *eng = adf_obj_to_overlay_engine(obj);
struct adf_device *parent = adf_overlay_engine_parent(eng); struct adf_device *parent = adf_overlay_engine_parent(eng);
return kasprintf(GFP_KERNEL, "adf/%s/overlay-engine%d", return kasprintf(GFP_KERNEL, "adf-overlay-engine%d.%d",
parent->base.name, eng->base.id); parent->base.id, eng->base.id);
} }
static void adf_noop_release(struct device *dev) static void adf_noop_release(struct device *dev)
@ -285,7 +280,6 @@ int adf_sysfs_init(void)
goto err_chrdev; goto err_chrdev;
} }
class->devnode = adf_devnode;
adf_class = class; adf_class = class;
adf_major = ret; adf_major = ret;
return 0; return 0;