CINXE.COM

LKML: Christoph Hellwig: Re: [RFC][PATCH 1/6] RTC subsystem, class

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>LKML: Christoph Hellwig: Re: [RFC][PATCH 1/6] RTC subsystem, class</title><link href="/css/message.css" rel="stylesheet" type="text/css" /><link href="/css/wrap.css" rel="alternate stylesheet" type="text/css" title="wrap" /><link href="/css/nowrap.css" rel="stylesheet" type="text/css" title="nowrap" /><link href="/favicon.ico" rel="shortcut icon" /><script src="/js/simple-calendar.js" type="text/javascript"></script><script src="/js/styleswitcher.js" type="text/javascript"></script><link rel="alternate" type="application/rss+xml" title="lkml.org : last 100 messages" href="/rss.php" /><link rel="alternate" type="application/rss+xml" title="lkml.org : last messages by Christoph Hellwig" href="/groupie.php?aid=7367" /><!--Matomo--><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//m.lkml.org/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!--End Matomo Code--></head><body onload="es.jasper.simpleCalendar.init();" itemscope="itemscope" itemtype="http://schema.org/BlogPosting"><table border="0" cellpadding="0" cellspacing="0"><tr><td width="180" align="center"><a href="/"><img style="border:0;width:135px;height:32px" src="/images/toprowlk.gif" alt="lkml.org" /></a></td><td width="32">聽</td><td class="nb"><div><a class="nb" href="/lkml"> [lkml]</a> 聽 <a class="nb" href="/lkml/2005"> [2005]</a> 聽 <a class="nb" href="/lkml/2005/12"> [Dec]</a> 聽 <a class="nb" href="/lkml/2005/12/20"> [20]</a> 聽 <a class="nb" href="/lkml/last100"> [last100]</a> 聽 <a href="/rss.php"><img src="/images/rss-or.gif" border="0" alt="RSS Feed" /></a></div><div>Views: <a href="#" class="nowrap" onclick="setActiveStyleSheet('wrap');return false;">[wrap]</a><a href="#" class="wrap" onclick="setActiveStyleSheet('nowrap');return false;">[no wrap]</a> 聽 <a class="nb" href="/lkml/mheaders/2005/12/20/230" onclick="this.href='/lkml/headers'+'/2005/12/20/230';">[headers]</a>聽 <a href="/lkml/bounce/2005/12/20/230">[forward]</a>聽 </div></td><td width="32">聽</td></tr><tr><td valign="top"><div class="es-jasper-simpleCalendar" baseurl="/lkml/"></div><div class="threadlist">Messages in this thread</div><ul class="threadlist"><li class="root"><a href="/lkml/2005/12/20/218">First message in thread</a></li><li><a href="/lkml/2005/12/20/218">Alessandro Zummo</a><ul><li class="origin"><a href="/lkml/2005/12/20/236">Christoph Hellwig</a><ul><li><a href="/lkml/2005/12/20/236">Alessandro Zummo</a><ul><li><a href="/lkml/2005/12/20/312">Mitchell Blank Jr</a><ul><li><a href="/lkml/2005/12/21/47">Alessandro Zummo</a></li></ul></li></ul></li><li><a href="/lkml/2005/12/20/241">Russell King</a></li></ul></li><li><a href="/lkml/2005/12/20/314">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/12/21/52">Alessandro Zummo</a><ul><li><a href="/lkml/2005/12/21/199">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/12/21/288">Alessandro Zummo</a></li></ul></li></ul></li></ul></li><li><a href="/lkml/2005/12/22/110">Pavel Machek</a><ul><li><a href="/lkml/2005/12/26/75">Alessandro Zummo</a><ul><li><a href="/lkml/2005/12/26/91">Pavel Machek</a><ul><li><a href="/lkml/2005/12/26/151">Alessandro Zummo</a></li></ul></li></ul></li></ul></li></ul></li></ul></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerl.gif" width="32" height="32" alt="/" /></td><td class="c" rowspan="2" valign="top" style="padding-top: 1em"><table><tr><td><table><tr><td class="lp">Date</td><td class="rp" itemprop="datePublished">Tue, 20 Dec 2005 21:13:45 +0000</td></tr><tr><td class="lp">From</td><td class="rp" itemprop="author">Christoph Hellwig &lt;&gt;</td></tr><tr><td class="lp">Subject</td><td class="rp" itemprop="name">Re: [RFC][PATCH 1/6] RTC subsystem, class</td></tr></table></td><td></td></tr></table><pre itemprop="articleBody">On Tue, Dec 20, 2005 at 09:45:11PM +0100, Alessandro Zummo wrote:<br />&gt; This patch adds the basic RTC subsytem infrastructure<br />&gt; to the kernel.<br /><br />Whee, very cool. We've needed something like that for a long time.<br /><br />&gt; rtc/class.c - registration facilities for RTC drivers<br />&gt; rtc/intf.c - kernel/rtc interface functions <br />&gt; rtc/utils.c - misc rtc-related utility functions<br />&gt; <br />&gt; Signed-off-by: Alessandro Zummo &lt;a.zummo&#64;towertech.it&gt;<br />&gt; --<br />&gt; drivers/Kconfig | 2 <br />&gt; drivers/Makefile | 2 <br />&gt; drivers/rtc/Kconfig | 25 +++++++++++<br />&gt; drivers/rtc/Makefile | 8 +++<br />&gt; drivers/rtc/class.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++<br />&gt; drivers/rtc/intf.c | 67 +++++++++++++++++++++++++++++++<br />&gt; drivers/rtc/utils.c | 99 +++++++++++++++++++++++++++++++++++++++++++++<br /><br /><br />Given that the files are really tiny I'd suggest to put everything into<br />a single file (driver/char/rtc.c) instead of some arbitrary split.<br /><br />&gt; --- /dev/null 1970-01-01 00:00:00.000000000 +0000<br />&gt; +++ linux-nslu2/drivers/rtc/class.c 2005-12-15 10:22:20.000000000 +0100<br />&gt; &#64;&#64; -0,0 +1,110 &#64;&#64;<br />&gt; +/*<br />&gt; + * rtc-class.c - rtc subsystem, base class<br /><br />no need to put the file name into a comment. it gets out of date far<br />too easily (it already is in this case ;-))<br /><br /><br />&gt; +#define RTC_ID_PREFIX "rtc"<br />&gt; +#define RTC_ID_FORMAT RTC_ID_PREFIX "%d"<br /><br />Having a format specifier hidden in a macro makes reading code very<br />difficult, please just remove this.<br /><br />&gt; +<br />&gt; +static struct class *rtc_class;<br />&gt; +<br />&gt; +static DEFINE_IDR(rtc_idr);<br />&gt; +<br />&gt; +/**<br />&gt; + * rtc_device_register - register w/ hwmon sysfs class<br />&gt; + * &#64;dev: the device to register<br />&gt; + *<br />&gt; + * rtc_device_unregister() must be called when the class device is no<br />&gt; + * longer needed.<br />&gt; + *<br />&gt; + * Returns the pointer to the new struct class device.<br />&gt; + */<br />&gt; +struct class_device *rtc_device_register(struct device *dev,<br />&gt; + struct rtc_class_ops *ops)<br />&gt; +{<br />&gt; + struct class_device *cdev;<br />&gt; + int id;<br />&gt; +<br />&gt; + if (idr_pre_get(&amp;rtc_idr, GFP_KERNEL) == 0)<br />&gt; + return ERR_PTR(-ENOMEM);<br />&gt; +<br />&gt; + if (idr_get_new(&amp;rtc_idr, NULL, &amp;id) &lt; 0)<br />&gt; + return ERR_PTR(-ENOMEM);<br />&gt; +<br />&gt; + id = id &amp; MAX_ID_MASK;<br />&gt; + cdev = class_device_create(rtc_class, NULL, MKDEV(0,0), dev,<br />&gt; + RTC_ID_FORMAT, id);<br />&gt; +<br />&gt; + if (IS_ERR(cdev))<br />&gt; + idr_remove(&amp;rtc_idr, id);<br />&gt; + else<br />&gt; + dev_info(dev, "rtc core: registered\n");<br />&gt; +<br />&gt; + class_set_devdata(cdev, ops);<br />&gt; +<br />&gt; + return cdev;<br />&gt; +}<br /><br />&gt; +void rtc_device_unregister(struct class_device *cdev)<br />&gt; +{<br />&gt; + int id;<br />&gt; +<br />&gt; + if (sscanf(cdev-&gt;class_id, RTC_ID_FORMAT, &amp;id) == 1) {<br />&gt; + class_device_unregister(cdev);<br />&gt; + idr_remove(&amp;rtc_idr, id);<br />&gt; + } else<br />&gt; + dev_dbg(cdev-&gt;dev,<br />&gt; + "rtc_device_unregister() failed: bad class ID!\n");<br />&gt; +}<br /><br />The scanf looks really fragile. Can't you just have a rtc_device structure<br />that the cdev and id are embedded into that can be passed to the<br />unregistration function?<br /><br />&gt; +<br />&gt; +int rtc_interface_register(struct class_interface *intf)<br />&gt; +{<br />&gt; + intf-&gt;class = rtc_class;<br />&gt; + return class_interface_register(intf);<br /><br />spaces instead of a tab for indentation here.<br /><br />&gt; +int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm)<br />&gt; +{<br />&gt; + int err = -EINVAL;<br />&gt; + struct rtc_class_ops *ops = class_get_devdata(class_dev);<br />&gt; +<br />&gt; + if (ops-&gt;read_time) {<br />&gt; + memset(tm, 0, sizeof(struct rtc_time));<br /><br />do we really need the memset?<br /><br />&gt; +#<br />&gt; +# Makefile for RTC class/drivers.<br />&gt; +#<br />&gt; +<br />&gt; +obj-y += utils.o<br /><br />why is this always built?<br />&gt; +obj-$(CONFIG_RTC_CLASS) += rtc-core.o<br />&gt; +rtc-core-y := class.o intf.o<br />&gt; +rtc-core-objs := $(rtc-core-y)<br /><br />no need for this last line<br /><br />&gt; +struct rtc_class_ops {<br /><br />What about just rtc_ops?<br /><br />&gt; + int (*proc)(struct device *, char *buf);<br /><br />this should be seq_file based.<br /><br />&gt; +static const unsigned char rtc_days_in_month[] = {<br />&gt; + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31<br />&gt; +};<br />&gt; +EXPORT_SYMBOL(rtc_days_in_month);<br /><br />exporting static symbols is pretty wrong. Exporting tables is pretty<br />bad style aswell.<br /><br />-<br />To unsubscribe from this list: send the line "unsubscribe linux-kernel" in<br />the body of a message to majordomo&#64;vger.kernel.org<br />More majordomo info at <a href="http://vger.kernel.org/majordomo-info.html">http://vger.kernel.org/majordomo-info.html</a><br />Please read the FAQ at <a href="http://www.tux.org/lkml/">http://www.tux.org/lkml/</a><br /><br /></pre></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerr.gif" width="32" height="32" alt="\" /></td></tr><tr><td align="right" valign="bottom"> 聽 </td></tr><tr><td align="right" valign="bottom">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerl.gif" width="32" height="32" alt="\" /></td><td class="c">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerr.gif" width="32" height="32" alt="/" /></td></tr><tr><td align="right" valign="top" colspan="2"> 聽 </td><td class="lm">Last update: 2005-12-20 22:16 聽聽 [from the cache]<br />漏2003-2020 <a href="http://blog.jasper.es/"><span itemprop="editor">Jasper Spaans</span></a>|hosted at <a href="https://www.digitalocean.com/?refcode=9a8e99d24cf9">Digital Ocean</a> and my Meterkast|<a href="http://blog.jasper.es/categories.html#lkml-ref">Read the blog</a></td><td>聽</td></tr></table><script language="javascript" src="/js/styleswitcher.js" type="text/javascript"></script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10