Lines Matching +full:- +full:clk
1 // SPDX-License-Identifier: GPL-2.0+
10 #include <linux/posix-clock.h>
15 #include "posix-timers.h"
22 struct posix_clock_context *pccontext = fp->private_data; in get_posix_clock()
23 struct posix_clock *clk = pccontext->clk; in get_posix_clock() local
25 down_read(&clk->rwsem); in get_posix_clock()
27 if (!clk->zombie) in get_posix_clock()
28 return clk; in get_posix_clock()
30 up_read(&clk->rwsem); in get_posix_clock()
35 static void put_posix_clock(struct posix_clock *clk) in put_posix_clock() argument
37 up_read(&clk->rwsem); in put_posix_clock()
43 struct posix_clock_context *pccontext = fp->private_data; in posix_clock_read()
44 struct posix_clock *clk = get_posix_clock(fp); in posix_clock_read() local
45 int err = -EINVAL; in posix_clock_read()
47 if (!clk) in posix_clock_read()
48 return -ENODEV; in posix_clock_read()
50 if (clk->ops.read) in posix_clock_read()
51 err = clk->ops.read(pccontext, fp->f_flags, buf, count); in posix_clock_read()
53 put_posix_clock(clk); in posix_clock_read()
60 struct posix_clock_context *pccontext = fp->private_data; in posix_clock_poll()
61 struct posix_clock *clk = get_posix_clock(fp); in posix_clock_poll() local
64 if (!clk) in posix_clock_poll()
67 if (clk->ops.poll) in posix_clock_poll()
68 result = clk->ops.poll(pccontext, fp, wait); in posix_clock_poll()
70 put_posix_clock(clk); in posix_clock_poll()
78 struct posix_clock_context *pccontext = fp->private_data; in posix_clock_ioctl()
79 struct posix_clock *clk = get_posix_clock(fp); in posix_clock_ioctl() local
80 int err = -ENOTTY; in posix_clock_ioctl()
82 if (!clk) in posix_clock_ioctl()
83 return -ENODEV; in posix_clock_ioctl()
85 if (clk->ops.ioctl) in posix_clock_ioctl()
86 err = clk->ops.ioctl(pccontext, cmd, arg); in posix_clock_ioctl()
88 put_posix_clock(clk); in posix_clock_ioctl()
97 struct posix_clock_context *pccontext = fp->private_data; in posix_clock_compat_ioctl()
98 struct posix_clock *clk = get_posix_clock(fp); in posix_clock_compat_ioctl() local
99 int err = -ENOTTY; in posix_clock_compat_ioctl()
101 if (!clk) in posix_clock_compat_ioctl()
102 return -ENODEV; in posix_clock_compat_ioctl()
104 if (clk->ops.ioctl) in posix_clock_compat_ioctl()
105 err = clk->ops.ioctl(pccontext, cmd, arg); in posix_clock_compat_ioctl()
107 put_posix_clock(clk); in posix_clock_compat_ioctl()
116 struct posix_clock *clk = in posix_clock_open() local
117 container_of(inode->i_cdev, struct posix_clock, cdev); in posix_clock_open()
120 down_read(&clk->rwsem); in posix_clock_open()
122 if (clk->zombie) { in posix_clock_open()
123 err = -ENODEV; in posix_clock_open()
128 err = -ENOMEM; in posix_clock_open()
131 pccontext->clk = clk; in posix_clock_open()
132 fp->private_data = pccontext; in posix_clock_open()
133 if (clk->ops.open) in posix_clock_open()
134 err = clk->ops.open(pccontext, fp->f_mode); in posix_clock_open()
139 get_device(clk->dev); in posix_clock_open()
142 up_read(&clk->rwsem); in posix_clock_open()
148 struct posix_clock_context *pccontext = fp->private_data; in posix_clock_release()
149 struct posix_clock *clk; in posix_clock_release() local
153 return -ENODEV; in posix_clock_release()
154 clk = pccontext->clk; in posix_clock_release()
156 if (clk->ops.release) in posix_clock_release()
157 err = clk->ops.release(pccontext); in posix_clock_release()
159 put_device(clk->dev); in posix_clock_release()
162 fp->private_data = NULL; in posix_clock_release()
180 int posix_clock_register(struct posix_clock *clk, struct device *dev) in posix_clock_register() argument
184 init_rwsem(&clk->rwsem); in posix_clock_register()
186 cdev_init(&clk->cdev, &posix_clock_file_operations); in posix_clock_register()
187 err = cdev_device_add(&clk->cdev, dev); in posix_clock_register()
190 dev_name(dev), MAJOR(dev->devt), MINOR(dev->devt)); in posix_clock_register()
193 clk->cdev.owner = clk->ops.owner; in posix_clock_register()
194 clk->dev = dev; in posix_clock_register()
200 void posix_clock_unregister(struct posix_clock *clk) in posix_clock_unregister() argument
202 cdev_device_del(&clk->cdev, clk->dev); in posix_clock_unregister()
204 down_write(&clk->rwsem); in posix_clock_unregister()
205 clk->zombie = true; in posix_clock_unregister()
206 up_write(&clk->rwsem); in posix_clock_unregister()
208 put_device(clk->dev); in posix_clock_unregister()
214 struct posix_clock *clk; member
220 int err = -EINVAL; in get_clock_desc()
225 if (fp->f_op->open != posix_clock_open || !fp->private_data) in get_clock_desc()
228 cd->fp = fp; in get_clock_desc()
229 cd->clk = get_posix_clock(fp); in get_clock_desc()
231 err = cd->clk ? 0 : -ENODEV; in get_clock_desc()
240 put_posix_clock(cd->clk); in put_clock_desc()
241 fput(cd->fp); in put_clock_desc()
253 if ((cd.fp->f_mode & FMODE_WRITE) == 0) { in pc_clock_adjtime()
254 err = -EACCES; in pc_clock_adjtime()
258 if (cd.clk->ops.clock_adjtime) in pc_clock_adjtime()
259 err = cd.clk->ops.clock_adjtime(cd.clk, tx); in pc_clock_adjtime()
261 err = -EOPNOTSUPP; in pc_clock_adjtime()
277 if (cd.clk->ops.clock_gettime) in pc_clock_gettime()
278 err = cd.clk->ops.clock_gettime(cd.clk, ts); in pc_clock_gettime()
280 err = -EOPNOTSUPP; in pc_clock_gettime()
296 if (cd.clk->ops.clock_getres) in pc_clock_getres()
297 err = cd.clk->ops.clock_getres(cd.clk, ts); in pc_clock_getres()
299 err = -EOPNOTSUPP; in pc_clock_getres()
315 if ((cd.fp->f_mode & FMODE_WRITE) == 0) { in pc_clock_settime()
316 err = -EACCES; in pc_clock_settime()
320 if (cd.clk->ops.clock_settime) in pc_clock_settime()
321 err = cd.clk->ops.clock_settime(cd.clk, ts); in pc_clock_settime()
323 err = -EOPNOTSUPP; in pc_clock_settime()