<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-dev/include/linux/dvb, branch master</title>
<subtitle>Linux kernel development work - see feature branches</subtitle>
<id>https://git.zx2c4.com/linux-dev/atom/include/linux/dvb?h=master</id>
<link rel='self' href='https://git.zx2c4.com/linux-dev/atom/include/linux/dvb?h=master'/>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/'/>
<updated>2012-10-19T10:41:50Z</updated>
<entry>
<title>[media] Remove include/linux/dvb/ stuff</title>
<updated>2012-10-19T10:41:50Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
<email>mchehab@redhat.com</email>
</author>
<published>2012-10-19T10:41:50Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=74df06daf632ce2d321d01cb046004768352efc4'/>
<id>urn:sha1:74df06daf632ce2d321d01cb046004768352efc4</id>
<content type='text'>
The only file left there is include/linux/dvb/video.h. The
only function for it is to include linux/compiler.h, but this
is already indirectly included. So, get rid of it.

Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] remove include/linux/dvb/dmx.h</title>
<updated>2012-10-19T10:29:17Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
<email>mchehab@redhat.com</email>
</author>
<published>2012-10-19T10:29:17Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=b2409b65d9401f7e3c572fc59db6a920fc7a163e'/>
<id>urn:sha1:b2409b65d9401f7e3c572fc59db6a920fc7a163e</id>
<content type='text'>
The only reason for this header is to make sure that include
linux/time.h were added before uapi/*/dmx.h. Just push down the
time.h header on the few places where this is used, and drop
this new header.

Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>UAPI: (Scripted) Disintegrate include/linux/dvb</title>
<updated>2012-10-17T13:00:29Z</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2012-10-09T08:48:42Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=c57fd0219292884aabe368cf811cd1911acf798e'/>
<id>urn:sha1:c57fd0219292884aabe368cf811cd1911acf798e</id>
<content type='text'>
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Arnd Bergmann &lt;arnd@arndb.de&gt;
Acked-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Acked-by: Michael Kerrisk &lt;mtk.manpages@gmail.com&gt;
Acked-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Acked-by: Dave Jones &lt;davej@redhat.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media]  dvb: LNA implementation changes</title>
<updated>2012-10-07T13:27:49Z</updated>
<author>
<name>Antti Palosaari</name>
<email>crope@iki.fi</email>
</author>
<published>2012-10-03T07:28:56Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=33eebec55c94c755f5f4785e46a72af9238999e2'/>
<id>urn:sha1:33eebec55c94c755f5f4785e46a72af9238999e2</id>
<content type='text'>
* use dvb property cache
* implement get (thus API minor++)
* PCTV 290e: 1=LNA ON, all the other values LNA OFF
  Also fix PCTV 290e LNA comment, it is disabled by default
Hans and Mauro proposed use of cache implementation of get as they
were planning to extend LNA usage for analog side too.

Reported-by: Hans Verkuil &lt;hverkuil@xs4all.nl&gt;
Reported-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
Signed-off-by: Antti Palosaari &lt;crope@iki.fi&gt;
Acked-by: Hans Verkuil &lt;hans.verkuil@cisco.com&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] add LNA support for DVB API</title>
<updated>2012-09-27T17:28:09Z</updated>
<author>
<name>Antti Palosaari</name>
<email>crope@iki.fi</email>
</author>
<published>2012-07-12T00:54:50Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=8a2697abc1f0388d44b78ac109d9f03ec75c2683'/>
<id>urn:sha1:8a2697abc1f0388d44b78ac109d9f03ec75c2683</id>
<content type='text'>
Signed-off-by: Antti Palosaari &lt;crope@iki.fi&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] dvb_frontend: add multistream support</title>
<updated>2012-09-23T23:59:32Z</updated>
<author>
<name>Evgeny Plehov</name>
<email>EvgenyPlehov@ukr.net</email>
</author>
<published>2012-09-13T13:13:30Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=287cefd096b124874dc4d6d155f53547c0654860'/>
<id>urn:sha1:287cefd096b124874dc4d6d155f53547c0654860</id>
<content type='text'>
Unify multistream support at the DVBAPI: several delivery systems
allow it. Yet, each one had its own name. So, instead of adding
a third version of this field, remove the per-standard naming,
unifying it into a common name.

The legacy code number can still be used by old applications.

Version increased to 5.8.

[mchehab@redhat.com: joined the va1j5jf007s patch, in order to
 avoid compilation breakage]
Signed-off-by: Evgeny Plehov &lt;EvgenyPlehov@ukr.net&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] frontend.h, Docbook: Improve status documentation</title>
<updated>2012-08-13T20:03:12Z</updated>
<author>
<name>Mauro Carvalho Chehab</name>
<email>mchehab@redhat.com</email>
</author>
<published>2012-08-13T20:03:12Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=0d27bbfe81cb087748dc1511683bd3e7335a7da5'/>
<id>urn:sha1:0d27bbfe81cb087748dc1511683bd3e7335a7da5</id>
<content type='text'>
No functional changes. It just improves the description of the frontend
status, using Documentation/kernel-doc-nano-HOWTO.txt for the status
enumeration, and a table inside the DocBook.

Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] DVB API: add INTERLEAVING_AUTO</title>
<updated>2012-08-13T19:01:28Z</updated>
<author>
<name>Antti Palosaari</name>
<email>crope@iki.fi</email>
</author>
<published>2012-08-13T01:33:22Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=8746adda9eec9da9a2c5c2944740163628bd1d68'/>
<id>urn:sha1:8746adda9eec9da9a2c5c2944740163628bd1d68</id>
<content type='text'>
After thinking twice, I ended up adding own value for AUTO
interleaving instead of using NONE.

API minor number is not needed to increase as that patch should
be the same Kernel as interleaving parameter is initially added.

Signed-off-by: Antti Palosaari &lt;crope@iki.fi&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] add DTMB support for DVB API</title>
<updated>2012-08-13T19:01:17Z</updated>
<author>
<name>Antti Palosaari</name>
<email>crope@iki.fi</email>
</author>
<published>2012-08-13T01:33:21Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=224b6642f5e82a1b21f6b552c799fa02e527d542'/>
<id>urn:sha1:224b6642f5e82a1b21f6b552c799fa02e527d542</id>
<content type='text'>
Cc: Patrick Boettcher &lt;pboettcher@kernellabs.com&gt;
Cc: Andreas Oberritter &lt;obi@linuxtv.org&gt;
Cc: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
Acked-by: Patrick Boettcher &lt;pboettcher@kernellabs.com&gt;
Signed-off-by: Antti Palosaari &lt;crope@iki.fi&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
<entry>
<title>[media] DVB: remove "stats" property bits from ATSC-MH API property additions</title>
<updated>2012-05-20T13:06:08Z</updated>
<author>
<name>Michael Krufky</name>
<email>mkrufky@linuxtv.org</email>
</author>
<published>2012-05-14T21:50:34Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/linux-dev/commit/?id=10d67371fc6e7d4e3b869166843ba174763fe5aa'/>
<id>urn:sha1:10d67371fc6e7d4e3b869166843ba174763fe5aa</id>
<content type='text'>
Mauro is proposing a new API to handle statistics. This functionality will
be returned after the statistics API is ready. Just remove them for now.

Signed-off-by: Michael Krufky &lt;mkrufky@linuxtv.org&gt;
Signed-off-by: Mauro Carvalho Chehab &lt;mchehab@redhat.com&gt;
</content>
</entry>
</feed>
5</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
</pre></td>
<td class='lines'><pre><code><style>
@media only all and (prefers-color-scheme: dark) {
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #49483e }
.highlight .c { color: #959077 } /* Comment */
.highlight .err { color: #ED007E; background-color: #1E0010 } /* Error */
.highlight .esc { color: #F8F8F2 } /* Escape */
.highlight .g { color: #F8F8F2 } /* Generic */
.highlight .k { color: #66D9EF } /* Keyword */
.highlight .l { color: #AE81FF } /* Literal */
.highlight .n { color: #F8F8F2 } /* Name */
.highlight .o { color: #FF4689 } /* Operator */
.highlight .x { color: #F8F8F2 } /* Other */
.highlight .p { color: #F8F8F2 } /* Punctuation */
.highlight .ch { color: #959077 } /* Comment.Hashbang */
.highlight .cm { color: #959077 } /* Comment.Multiline */
.highlight .cp { color: #959077 } /* Comment.Preproc */
.highlight .cpf { color: #959077 } /* Comment.PreprocFile */
.highlight .c1 { color: #959077 } /* Comment.Single */
.highlight .cs { color: #959077 } /* Comment.Special */
.highlight .gd { color: #FF4689 } /* Generic.Deleted */
.highlight .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */
.highlight .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #F8F8F2 } /* Generic.Error */
.highlight .gh { color: #F8F8F2 } /* Generic.Heading */
.highlight .gi { color: #A6E22E } /* Generic.Inserted */
.highlight .go { color: #66D9EF } /* Generic.Output */
.highlight .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */
.highlight .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #959077 } /* Generic.Subheading */
.highlight .gt { color: #F8F8F2 } /* Generic.Traceback */
.highlight .kc { color: #66D9EF } /* Keyword.Constant */
.highlight .kd { color: #66D9EF } /* Keyword.Declaration */
.highlight .kn { color: #FF4689 } /* Keyword.Namespace */
.highlight .kp { color: #66D9EF } /* Keyword.Pseudo */
.highlight .kr { color: #66D9EF } /* Keyword.Reserved */
.highlight .kt { color: #66D9EF } /* Keyword.Type */
.highlight .ld { color: #E6DB74 } /* Literal.Date */
.highlight .m { color: #AE81FF } /* Literal.Number */
.highlight .s { color: #E6DB74 } /* Literal.String */
.highlight .na { color: #A6E22E } /* Name.Attribute */
.highlight .nb { color: #F8F8F2 } /* Name.Builtin */
.highlight .nc { color: #A6E22E } /* Name.Class */
.highlight .no { color: #66D9EF } /* Name.Constant */
.highlight .nd { color: #A6E22E } /* Name.Decorator */
.highlight .ni { color: #F8F8F2 } /* Name.Entity */
.highlight .ne { color: #A6E22E } /* Name.Exception */
.highlight .nf { color: #A6E22E } /* Name.Function */
.highlight .nl { color: #F8F8F2 } /* Name.Label */
.highlight .nn { color: #F8F8F2 } /* Name.Namespace */
.highlight .nx { color: #A6E22E } /* Name.Other */
.highlight .py { color: #F8F8F2 } /* Name.Property */
.highlight .nt { color: #FF4689 } /* Name.Tag */
.highlight .nv { color: #F8F8F2 } /* Name.Variable */
.highlight .ow { color: #FF4689 } /* Operator.Word */
.highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */
.highlight .w { color: #F8F8F2 } /* Text.Whitespace */
.highlight .mb { color: #AE81FF } /* Literal.Number.Bin */
.highlight .mf { color: #AE81FF } /* Literal.Number.Float */
.highlight .mh { color: #AE81FF } /* Literal.Number.Hex */
.highlight .mi { color: #AE81FF } /* Literal.Number.Integer */
.highlight .mo { color: #AE81FF } /* Literal.Number.Oct */
.highlight .sa { color: #E6DB74 } /* Literal.String.Affix */
.highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */
.highlight .sc { color: #E6DB74 } /* Literal.String.Char */
.highlight .dl { color: #E6DB74 } /* Literal.String.Delimiter */
.highlight .sd { color: #E6DB74 } /* Literal.String.Doc */
.highlight .s2 { color: #E6DB74 } /* Literal.String.Double */
.highlight .se { color: #AE81FF } /* Literal.String.Escape */
.highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */
.highlight .si { color: #E6DB74 } /* Literal.String.Interpol */
.highlight .sx { color: #E6DB74 } /* Literal.String.Other */
.highlight .sr { color: #E6DB74 } /* Literal.String.Regex */
.highlight .s1 { color: #E6DB74 } /* Literal.String.Single */
.highlight .ss { color: #E6DB74 } /* Literal.String.Symbol */
.highlight .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #A6E22E } /* Name.Function.Magic */
.highlight .vc { color: #F8F8F2 } /* Name.Variable.Class */
.highlight .vg { color: #F8F8F2 } /* Name.Variable.Global */
.highlight .vi { color: #F8F8F2 } /* Name.Variable.Instance */
.highlight .vm { color: #F8F8F2 } /* Name.Variable.Magic */
.highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888 } /* Comment */
.highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */
.highlight .k { color: #080; font-weight: bold } /* Keyword */
.highlight .ch { color: #888 } /* Comment.Hashbang */
.highlight .cm { color: #888 } /* Comment.Multiline */
.highlight .cp { color: #C00; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888 } /* Comment.Single */
.highlight .cs { color: #C00; font-weight: bold; background-color: #FFF0F0 } /* Comment.Special */
.highlight .gd { color: #000; background-color: #FDD } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #A00 } /* Generic.Error */
.highlight .gh { color: #333 } /* Generic.Heading */
.highlight .gi { color: #000; background-color: #DFD } /* Generic.Inserted */
.highlight .go { color: #888 } /* Generic.Output */
.highlight .gp { color: #555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666 } /* Generic.Subheading */
.highlight .gt { color: #A00 } /* Generic.Traceback */
.highlight .kc { color: #080; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #080; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #080; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #080 } /* Keyword.Pseudo */
.highlight .kr { color: #080; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #00D; font-weight: bold } /* Literal.Number */
.highlight .s { color: #D20; background-color: #FFF0F0 } /* Literal.String */
.highlight .na { color: #369 } /* Name.Attribute */
.highlight .nb { color: #038 } /* Name.Builtin */
.highlight .nc { color: #B06; font-weight: bold } /* Name.Class */
.highlight .no { color: #036; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555 } /* Name.Decorator */
.highlight .ne { color: #B06; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #06B; font-weight: bold } /* Name.Function */
.highlight .nl { color: #369; font-style: italic } /* Name.Label */
.highlight .nn { color: #B06; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #369; font-weight: bold } /* Name.Property */
.highlight .nt { color: #B06; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #369 } /* Name.Variable */
.highlight .ow { color: #080 } /* Operator.Word */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #00D; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #00D; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #00D; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #00D; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #00D; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #D20; background-color: #FFF0F0 } /* Literal.String.Affix */
.highlight .sb { color: #D20; background-color: #FFF0F0 } /* Literal.String.Backtick */
.highlight .sc { color: #D20; background-color: #FFF0F0 } /* Literal.String.Char */
.highlight .dl { color: #D20; background-color: #FFF0F0 } /* Literal.String.Delimiter */
.highlight .sd { color: #D20; background-color: #FFF0F0 } /* Literal.String.Doc */
.highlight .s2 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Double */
.highlight .se { color: #04D; background-color: #FFF0F0 } /* Literal.String.Escape */
.highlight .sh { color: #D20; background-color: #FFF0F0 } /* Literal.String.Heredoc */
.highlight .si { color: #33B; background-color: #FFF0F0 } /* Literal.String.Interpol */
.highlight .sx { color: #2B2; background-color: #F0FFF0 } /* Literal.String.Other */
.highlight .sr { color: #080; background-color: #FFF0FF } /* Literal.String.Regex */
.highlight .s1 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Single */
.highlight .ss { color: #A60; background-color: #FFF0F0 } /* Literal.String.Symbol */
.highlight .bp { color: #038 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06B; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #369 } /* Name.Variable.Class */
.highlight .vg { color: #D70 } /* Name.Variable.Global */
.highlight .vi { color: #33B } /* Name.Variable.Instance */
.highlight .vm { color: #369 } /* Name.Variable.Magic */
.highlight .il { color: #00D; font-weight: bold } /* Literal.Number.Integer.Long */
}
</style><div class="highlight"><pre><span></span><span class="c1">// SPDX-License-Identifier: GPL-2.0-or-later</span>
<span class="cm">/* NXP PCF50633 RTC Driver</span>
<span class="cm"> *</span>
<span class="cm"> * (C) 2006-2008 by Openmoko, Inc.</span>
<span class="cm"> * Author: Balaji Rao &lt;balajirrao@openmoko.org&gt;</span>
<span class="cm"> * All rights reserved.</span>
<span class="cm"> *</span>
<span class="cm"> * Broken down from monstrous PCF50633 driver mainly by</span>
<span class="cm"> * Harald Welte, Andy Green and Werner Almesberger</span>
<span class="cm"> */</span>

<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/kernel.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/module.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/init.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/device.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/slab.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/platform_device.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/rtc.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/bcd.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/err.h&gt;</span>

<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;linux/mfd/pcf50633/core.h&gt;</span>

<span class="cp">#define PCF50633_REG_RTCSC	0x59 </span><span class="cm">/* Second */</span>
<span class="cp">#define PCF50633_REG_RTCMN	0x5a </span><span class="cm">/* Minute */</span>
<span class="cp">#define PCF50633_REG_RTCHR	0x5b </span><span class="cm">/* Hour */</span>
<span class="cp">#define PCF50633_REG_RTCWD	0x5c </span><span class="cm">/* Weekday */</span>
<span class="cp">#define PCF50633_REG_RTCDT	0x5d </span><span class="cm">/* Day */</span>
<span class="cp">#define PCF50633_REG_RTCMT	0x5e </span><span class="cm">/* Month */</span>
<span class="cp">#define PCF50633_REG_RTCYR	0x5f </span><span class="cm">/* Year */</span>
<span class="cp">#define PCF50633_REG_RTCSCA	0x60 </span><span class="cm">/* Alarm Second */</span>
<span class="cp">#define PCF50633_REG_RTCMNA	0x61 </span><span class="cm">/* Alarm Minute */</span>
<span class="cp">#define PCF50633_REG_RTCHRA	0x62 </span><span class="cm">/* Alarm Hour */</span>
<span class="cp">#define PCF50633_REG_RTCWDA	0x63 </span><span class="cm">/* Alarm Weekday */</span>
<span class="cp">#define PCF50633_REG_RTCDTA	0x64 </span><span class="cm">/* Alarm Day */</span>
<span class="cp">#define PCF50633_REG_RTCMTA	0x65 </span><span class="cm">/* Alarm Month */</span>
<span class="cp">#define PCF50633_REG_RTCYRA	0x66 </span><span class="cm">/* Alarm Year */</span>

<span class="k">enum</span><span class="w"> </span><span class="n">pcf50633_time_indexes</span><span class="w"> </span><span class="p">{</span>
<span class="w">	</span><span class="n">PCF50633_TI_SEC</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_MIN</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_HOUR</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_WKDAY</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_DAY</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_MONTH</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_YEAR</span><span class="p">,</span>
<span class="w">	</span><span class="n">PCF50633_TI_EXTENT</span><span class="w"> </span><span class="cm">/* always last */</span>
<span class="p">};</span>

<span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="p">{</span>
<span class="w">	</span><span class="n">u_int8_t</span><span class="w"> </span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_EXTENT</span><span class="p">];</span>
<span class="p">};</span>

<span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="p">{</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">alarm_enabled</span><span class="p">;</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">alarm_pending</span><span class="p">;</span>

<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633</span><span class="w"> </span><span class="o">*</span><span class="n">pcf</span><span class="p">;</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_device</span><span class="w"> </span><span class="o">*</span><span class="n">rtc_dev</span><span class="p">;</span>
<span class="p">};</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">pcf2rtc_time</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_time</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="o">*</span><span class="n">pcf</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_sec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_SEC</span><span class="p">]);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MIN</span><span class="p">]);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_hour</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_HOUR</span><span class="p">]);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_wday</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_WKDAY</span><span class="p">]);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_mday</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_DAY</span><span class="p">]);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_mon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MONTH</span><span class="p">])</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_year</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bcd2bin</span><span class="p">(</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_YEAR</span><span class="p">])</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">rtc2pcf_time</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="o">*</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_time</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_SEC</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_sec</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MIN</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_min</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_HOUR</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_hour</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_WKDAY</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_wday</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_DAY</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_mday</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MONTH</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_mon</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_YEAR</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bin2bcd</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">tm_year</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span>
<span class="nf">pcf50633_rtc_alarm_irq_enable</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">device</span><span class="w"> </span><span class="o">*</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">enabled</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_get_drvdata</span><span class="p">(</span><span class="n">dev</span><span class="p">);</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">err</span><span class="p">;</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enabled</span><span class="p">)</span>
<span class="w">		</span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_irq_unmask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>
<span class="w">	</span><span class="k">else</span>
<span class="w">		</span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_irq_mask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">err</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">err</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">enabled</span><span class="p">;</span>

<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">pcf50633_rtc_read_time</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">device</span><span class="w"> </span><span class="o">*</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_time</span><span class="w"> </span><span class="o">*</span><span class="n">tm</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="n">pcf_tm</span><span class="p">;</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_get_drvdata</span><span class="p">(</span><span class="n">dev</span><span class="p">);</span>

<span class="w">	</span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_read_block</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_REG_RTCSC</span><span class="p">,</span>
<span class="w">					    </span><span class="n">PCF50633_TI_EXTENT</span><span class="p">,</span>
<span class="w">					    </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PCF50633_TI_EXTENT</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">dev_err</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Failed to read time</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="n">EIO</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="n">dev_dbg</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_DAY</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MONTH</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_YEAR</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_HOUR</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MIN</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_SEC</span><span class="p">]);</span>

<span class="w">	</span><span class="n">pcf2rtc_time</span><span class="p">(</span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">);</span>

<span class="w">	</span><span class="n">dev_dbg</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;RTC_TIME: %ptRr</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">);</span>

<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">pcf50633_rtc_set_time</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">device</span><span class="w"> </span><span class="o">*</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_time</span><span class="w"> </span><span class="o">*</span><span class="n">tm</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="n">pcf_tm</span><span class="p">;</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">alarm_masked</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_get_drvdata</span><span class="p">(</span><span class="n">dev</span><span class="p">);</span>

<span class="w">	</span><span class="n">dev_dbg</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;RTC_TIME: %ptRr</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">);</span>

<span class="w">	</span><span class="n">rtc2pcf_time</span><span class="p">(</span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">);</span>

<span class="w">	</span><span class="n">dev_dbg</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_DAY</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MONTH</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_YEAR</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_HOUR</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_MIN</span><span class="p">],</span>
<span class="w">		</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_SEC</span><span class="p">]);</span>


<span class="w">	</span><span class="n">alarm_masked</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_irq_mask_get</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alarm_masked</span><span class="p">)</span>
<span class="w">		</span><span class="n">pcf50633_irq_mask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="cm">/* Returns 0 on success */</span>
<span class="w">	</span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_write_block</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_REG_RTCSC</span><span class="p">,</span>
<span class="w">					     </span><span class="n">PCF50633_TI_EXTENT</span><span class="p">,</span>
<span class="w">					     </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alarm_masked</span><span class="p">)</span>
<span class="w">		</span><span class="n">pcf50633_irq_unmask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">pcf50633_rtc_read_alarm</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">device</span><span class="w"> </span><span class="o">*</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_wkalrm</span><span class="w"> </span><span class="o">*</span><span class="n">alrm</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="n">pcf_tm</span><span class="p">;</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_get_drvdata</span><span class="p">(</span><span class="n">dev</span><span class="p">);</span>

<span class="w">	</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_enabled</span><span class="p">;</span>
<span class="w">	</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">pending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_pending</span><span class="p">;</span>

<span class="w">	</span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_read_block</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_REG_RTCSCA</span><span class="p">,</span>
<span class="w">				</span><span class="n">PCF50633_TI_EXTENT</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PCF50633_TI_EXTENT</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="n">dev_err</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Failed to read time</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="n">EIO</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span>

<span class="w">	</span><span class="n">pcf2rtc_time</span><span class="p">(</span><span class="o">&amp;</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">);</span>

<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="n">rtc_valid_tm</span><span class="p">(</span><span class="o">&amp;</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">pcf50633_rtc_set_alarm</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">device</span><span class="w"> </span><span class="o">*</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_wkalrm</span><span class="w"> </span><span class="o">*</span><span class="n">alrm</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_time</span><span class="w"> </span><span class="n">pcf_tm</span><span class="p">;</span>
<span class="w">	</span><span class="kt">int</span><span class="w"> </span><span class="n">alarm_masked</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_get_drvdata</span><span class="p">(</span><span class="n">dev</span><span class="p">);</span>

<span class="w">	</span><span class="n">rtc2pcf_time</span><span class="p">(</span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">time</span><span class="p">);</span>

<span class="w">	</span><span class="cm">/* do like mktime does and ignore tm_wday */</span>
<span class="w">	</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="n">PCF50633_TI_WKDAY</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span>

<span class="w">	</span><span class="n">alarm_masked</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_irq_mask_get</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="cm">/* disable alarm interrupt */</span>
<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alarm_masked</span><span class="p">)</span>
<span class="w">		</span><span class="n">pcf50633_irq_mask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>

<span class="w">	</span><span class="cm">/* Returns 0 on success */</span>
<span class="w">	</span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_write_block</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_REG_RTCSCA</span><span class="p">,</span>
<span class="w">				</span><span class="n">PCF50633_TI_EXTENT</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">pcf_tm</span><span class="p">.</span><span class="n">time</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">enabled</span><span class="p">)</span>
<span class="w">		</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_pending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alarm_masked</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">enabled</span><span class="p">)</span>
<span class="w">		</span><span class="n">pcf50633_irq_unmask</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">alrm</span><span class="o">-&gt;</span><span class="n">enabled</span><span class="p">;</span>

<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">rtc_class_ops</span><span class="w"> </span><span class="n">pcf50633_rtc_ops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w">	</span><span class="p">.</span><span class="n">read_time</span><span class="w">		</span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_read_time</span><span class="p">,</span>
<span class="w">	</span><span class="p">.</span><span class="n">set_time</span><span class="w">		</span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_set_time</span><span class="p">,</span>
<span class="w">	</span><span class="p">.</span><span class="n">read_alarm</span><span class="w">		</span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_read_alarm</span><span class="p">,</span>
<span class="w">	</span><span class="p">.</span><span class="n">set_alarm</span><span class="w">		</span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_set_alarm</span><span class="p">,</span>
<span class="w">	</span><span class="p">.</span><span class="n">alarm_irq_enable</span><span class="w">	</span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_alarm_irq_enable</span><span class="p">,</span>
<span class="p">};</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">pcf50633_rtc_irq</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">irq</span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">data</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc_update_irq</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">rtc_dev</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">RTC_AF</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">RTC_IRQF</span><span class="p">);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">alarm_pending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">pcf50633_rtc_probe</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">platform_device</span><span class="w"> </span><span class="o">*</span><span class="n">pdev</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">devm_kzalloc</span><span class="p">(</span><span class="o">&amp;</span><span class="n">pdev</span><span class="o">-&gt;</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="o">*</span><span class="n">rtc</span><span class="p">),</span><span class="w"> </span><span class="n">GFP_KERNEL</span><span class="p">);</span>
<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">rtc</span><span class="p">)</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="n">ENOMEM</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dev_to_pcf50633</span><span class="p">(</span><span class="n">pdev</span><span class="o">-&gt;</span><span class="n">dev</span><span class="p">.</span><span class="n">parent</span><span class="p">);</span>
<span class="w">	</span><span class="n">platform_set_drvdata</span><span class="p">(</span><span class="n">pdev</span><span class="p">,</span><span class="w"> </span><span class="n">rtc</span><span class="p">);</span>
<span class="w">	</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">rtc_dev</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">devm_rtc_device_register</span><span class="p">(</span><span class="o">&amp;</span><span class="n">pdev</span><span class="o">-&gt;</span><span class="n">dev</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;pcf50633-rtc&quot;</span><span class="p">,</span>
<span class="w">				</span><span class="o">&amp;</span><span class="n">pcf50633_rtc_ops</span><span class="p">,</span><span class="w"> </span><span class="n">THIS_MODULE</span><span class="p">);</span>

<span class="w">	</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">IS_ERR</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">rtc_dev</span><span class="p">))</span>
<span class="w">		</span><span class="k">return</span><span class="w"> </span><span class="n">PTR_ERR</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">rtc_dev</span><span class="p">);</span>

<span class="w">	</span><span class="n">pcf50633_register_irq</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">,</span>
<span class="w">					</span><span class="n">pcf50633_rtc_irq</span><span class="p">,</span><span class="w"> </span><span class="n">rtc</span><span class="p">);</span>
<span class="w">	</span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">pcf50633_rtc_remove</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">platform_device</span><span class="w"> </span><span class="o">*</span><span class="n">pdev</span><span class="p">)</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">pcf50633_rtc</span><span class="w"> </span><span class="o">*</span><span class="n">rtc</span><span class="p">;</span>

<span class="w">	</span><span class="n">rtc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">platform_get_drvdata</span><span class="p">(</span><span class="n">pdev</span><span class="p">);</span>
<span class="w">	</span><span class="n">pcf50633_free_irq</span><span class="p">(</span><span class="n">rtc</span><span class="o">-&gt;</span><span class="n">pcf</span><span class="p">,</span><span class="w"> </span><span class="n">PCF50633_IRQ_ALARM</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">static</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">platform_driver</span><span class="w"> </span><span class="n">pcf50633_rtc_driver</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w">	</span><span class="p">.</span><span class="n">driver</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w">		</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;pcf50633-rtc&quot;</span><span class="p">,</span>
<span class="w">	</span><span class="p">},</span>
<span class="w">	</span><span class="p">.</span><span class="n">probe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_probe</span><span class="p">,</span>
<span class="w">	</span><span class="p">.</span><span class="n">remove_new</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pcf50633_rtc_remove</span><span class="p">,</span>
<span class="p">};</span>

<span class="n">module_platform_driver</span><span class="p">(</span><span class="n">pcf50633_rtc_driver</span><span class="p">);</span>

<span class="n">MODULE_DESCRIPTION</span><span class="p">(</span><span class="s">&quot;PCF50633 RTC driver&quot;</span><span class="p">);</span>
<span class="n">MODULE_AUTHOR</span><span class="p">(</span><span class="s">&quot;Balaji Rao &lt;balajirrao@openmoko.org&gt;&quot;</span><span class="p">);</span>
<span class="n">MODULE_LICENSE</span><span class="p">(</span><span class="s">&quot;GPL&quot;</span><span class="p">);</span>
</pre></div>
