<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.amar.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lax</id>
	<title>Amar Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.amar.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lax"/>
	<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php/Special:Contributions/Lax"/>
	<updated>2026-10-12T06:46:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=727</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=727"/>
		<updated>2026-08-14T16:43:56Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Amar Micro Inc. Presents */ wed.money link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|wed.money]] Wedding Budget Management App [[Image:Wed.money icon.png]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* [https://wed.money wed.money] Wedding Budget Manager&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Wed.money&amp;diff=726</id>
		<title>Wed.money</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Wed.money&amp;diff=726"/>
		<updated>2026-08-14T16:32:28Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery mode=&amp;quot;packed-hover&amp;quot; widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wed-icon.png|alt=wed.money logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Image:Wed.money icon.png]]&#039;&#039;&#039;wed.money&#039;&#039;&#039;  is a web-based financial planning tool for weddings and similar&lt;br /&gt;
one-off celebrations. Unlike general-purpose wedding planning software, it is&lt;br /&gt;
deliberately narrow in scope: it does not manage guest lists, seating charts,&lt;br /&gt;
tasks, or vendor communication. It exists to answer a single question —&lt;br /&gt;
&#039;&#039;&#039;how much do I owe, to whom, and when?&#039;&#039;&#039; The application is available at&lt;br /&gt;
[https://wed.money wed.money].&lt;br /&gt;
&lt;br /&gt;
The tool treats a wedding as a cash-flow problem rather than a project-management&lt;br /&gt;
problem. Its core model is a three-level hierarchy of &#039;&#039;budget&#039;&#039; (what an item is&lt;br /&gt;
expected to cost), &#039;&#039;payment plan&#039;&#039; (the schedule of deposits and instalments&lt;br /&gt;
agreed with a vendor), and &#039;&#039;payments&#039;&#039; (what has actually been paid, when, and&lt;br /&gt;
from which source). Every view in the application is a different projection of&lt;br /&gt;
that hierarchy.&lt;br /&gt;
&lt;br /&gt;
== Key features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Worksheet&#039;&#039;&#039; — a spreadsheet-style entry grid that serves as the main working surface. One grid per event, with vendor rows and payment cells edited in place, without dialogs interrupting data entry.&lt;br /&gt;
* &#039;&#039;&#039;Budget tracking&#039;&#039;&#039; — budget envelopes per vendor and event, with expandable rows revealing the underlying payment schedule.&lt;br /&gt;
* &#039;&#039;&#039;Payment plans&#039;&#039;&#039; — scheduled instalments with dates, amounts, descriptions, and optional funding source. Zero-amount lines act as &#039;&#039;milestones&#039;&#039; (contract signing, final headcount date) that appear on the timeline without contributing money.&lt;br /&gt;
* &#039;&#039;&#039;Payment recording&#039;&#039;&#039; — actual payments logged against a planned instalment or entered standalone for unbudgeted spending.&lt;br /&gt;
* &#039;&#039;&#039;Variance&#039;&#039;&#039; — planned versus actual is shown wherever both exist, colour-coded, and is always computed rather than stored.&lt;br /&gt;
* &#039;&#039;&#039;Timeline chart&#039;&#039;&#039; — a stacked bar chart of committed spending over time, with a date-range slider and a toggle to overlay actual payments against the plan.&lt;br /&gt;
* &#039;&#039;&#039;Calendar view&#039;&#039;&#039; — payment due dates rendered as a month calendar.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard&#039;&#039;&#039; — a summary view with a vendor breakdown donut (paid versus remaining per vendor) and a &amp;quot;due soon&amp;quot; list of upcoming obligations.&lt;br /&gt;
* &#039;&#039;&#039;Payment sources&#039;&#039;&#039; — optional labelling of where money comes from (a joint account, a parental contribution, savings), so contributions can be tracked separately from vendors.&lt;br /&gt;
* &#039;&#039;&#039;Multi-user collaboration&#039;&#039;&#039; — several people can share one celebration with distinct roles: Owner, Admin, Editor, and Viewer. Viewers have genuine read-only access, enforced at the API level and not merely hidden in the interface.&lt;br /&gt;
* &#039;&#039;&#039;Multilingual interface&#039;&#039;&#039; — the UI is translated into several languages, with per-account and per-celebration language and number/date formatting preferences.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The unit of tenancy is the &#039;&#039;&#039;celebration&#039;&#039;&#039;, not the user account. An account is&lt;br /&gt;
a person; a celebration is the thing being planned; a membership record links the&lt;br /&gt;
two with a role. All data belongs to a celebration, and every read is scoped to&lt;br /&gt;
the currently selected one. A single account can own or be invited to several&lt;br /&gt;
celebrations and switch between them.&lt;br /&gt;
&lt;br /&gt;
Derived financial figures — totals budgeted, totals planned, totals paid, and&lt;br /&gt;
variance — are &#039;&#039;&#039;never stored&#039;&#039;&#039;. They are computed at read time from the&lt;br /&gt;
underlying records, so the numbers cannot drift out of sync with the payments&lt;br /&gt;
they summarise.&lt;br /&gt;
&lt;br /&gt;
The application distinguishes two kinds of time. Calendar dates (a payment due&lt;br /&gt;
date, the event date, a contract date) are &#039;&#039;floating&#039;&#039;: they are stored and&lt;br /&gt;
displayed exactly as entered and are never shifted by a time zone. Machine&lt;br /&gt;
timestamps (account creation, logins) are stored in UTC and rendered in the&lt;br /&gt;
viewer&#039;s local time zone. &amp;quot;Due soon&amp;quot; calculations use the viewer&#039;s own notion of&lt;br /&gt;
today rather than the server&#039;s, so a payment due tomorrow does not appear due&lt;br /&gt;
today for a user in a different time zone.&lt;br /&gt;
&lt;br /&gt;
New accounts are not dropped into an empty screen. A starter worksheet is drawn&lt;br /&gt;
in advance with placeholder structure, and nothing is written to the database&lt;br /&gt;
until the user commits their first real entry. Celebrations can also be created&lt;br /&gt;
from a template, or template contents imported into an existing empty&lt;br /&gt;
celebration.&lt;br /&gt;
&lt;br /&gt;
Editing happens in place. Adding or changing a budget item, editing its whole&lt;br /&gt;
payment schedule, or recording a payment all occur through shared modals that&lt;br /&gt;
open on whichever page the user is currently on — the application does not&lt;br /&gt;
navigate away from a view to perform a create or edit.&lt;br /&gt;
&lt;br /&gt;
Technically, wed.money is a server-rendered PHP application with a browser-native&lt;br /&gt;
front end. It deliberately uses no front-end framework or build step; the only&lt;br /&gt;
third-party JavaScript is a small set of charting and calendar libraries loaded&lt;br /&gt;
from a CDN. All interface text is served from a translation database rather than&lt;br /&gt;
hardcoded, and all data access flows through a scoped API rather than direct&lt;br /&gt;
queries from the page.&lt;br /&gt;
&lt;br /&gt;
== Problem it addresses ==&lt;br /&gt;
&lt;br /&gt;
Wedding costs are not a single number; they are a sequence of obligations spread&lt;br /&gt;
over many months and owed to a dozen or more separate parties, each with its own&lt;br /&gt;
deposit schedule and final-balance date. The common failure mode is not&lt;br /&gt;
overspending in the abstract but a &#039;&#039;&#039;liquidity surprise&#039;&#039;&#039; — three vendors&lt;br /&gt;
happening to require final payment in the same fortnight, or a deposit forgotten&lt;br /&gt;
until it is overdue.&lt;br /&gt;
&lt;br /&gt;
General wedding planning apps typically model money as a flat category list with&lt;br /&gt;
a single &amp;quot;spent so far&amp;quot; figure, which cannot express when money is actually&lt;br /&gt;
required. Spreadsheets can express it, but they degrade quickly once several&lt;br /&gt;
people edit them and offer no view of what is due next week. wed.money targets&lt;br /&gt;
that gap specifically: it keeps the commitment, the schedule, and the actual&lt;br /&gt;
payment as three distinct records, and renders the result as a timeline of&lt;br /&gt;
obligations rather than a running total.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The following are explicit non-goals rather than pending features:&lt;br /&gt;
&lt;br /&gt;
* No vendor portal — vendors do not have accounts and cannot log in.&lt;br /&gt;
* No file or document storage, and no contract attachments.&lt;br /&gt;
* No multi-currency support; a celebration uses one currency.&lt;br /&gt;
* No recurring-payment automation.&lt;br /&gt;
* No guest management, seating, RSVPs, or messaging.&lt;br /&gt;
* No marketing email, digests, or payment reminders — outbound mail is limited to invitations and password resets.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://wed.money wed.money] — official website&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=725</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=725"/>
		<updated>2026-08-14T16:31:00Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|wed.money]] Wedding Budget Management App [[Image:Wed.money icon.png]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=724</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=724"/>
		<updated>2026-08-14T16:30:40Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|wed.money]] [[Image:Wed.money icon.png]] Wedding Budget Management App &lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=723</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=723"/>
		<updated>2026-08-14T16:30:22Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|wed.money]] [[Image:Wed.money icon.png|thumb]] Wedding Budget Management App &lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=722</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=722"/>
		<updated>2026-08-14T16:29:28Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[Image:Wed.money icon.png|thumb]][[wed.money|wed.money]]  Wedding Budget Management App &lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=File:Wed.money_icon.png&amp;diff=721</id>
		<title>File:Wed.money icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=File:Wed.money_icon.png&amp;diff=721"/>
		<updated>2026-08-14T16:28:24Z</updated>

		<summary type="html">&lt;p&gt;Lax: wed.money icon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
wed.money icon&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Wed.money&amp;diff=720</id>
		<title>Wed.money</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Wed.money&amp;diff=720"/>
		<updated>2026-08-14T16:26:48Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery mode=&amp;quot;packed-hover&amp;quot; widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
File:Wed-icon.png|alt=wed.money logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&#039;&#039;&#039;wed.money&#039;&#039;&#039; is a web-based financial planning tool for weddings and similar&lt;br /&gt;
one-off celebrations. Unlike general-purpose wedding planning software, it is&lt;br /&gt;
deliberately narrow in scope: it does not manage guest lists, seating charts,&lt;br /&gt;
tasks, or vendor communication. It exists to answer a single question —&lt;br /&gt;
&#039;&#039;&#039;how much do I owe, to whom, and when?&#039;&#039;&#039; The application is available at&lt;br /&gt;
[https://wed.money wed.money].&lt;br /&gt;
&lt;br /&gt;
The tool treats a wedding as a cash-flow problem rather than a project-management&lt;br /&gt;
problem. Its core model is a three-level hierarchy of &#039;&#039;budget&#039;&#039; (what an item is&lt;br /&gt;
expected to cost), &#039;&#039;payment plan&#039;&#039; (the schedule of deposits and instalments&lt;br /&gt;
agreed with a vendor), and &#039;&#039;payments&#039;&#039; (what has actually been paid, when, and&lt;br /&gt;
from which source). Every view in the application is a different projection of&lt;br /&gt;
that hierarchy.&lt;br /&gt;
&lt;br /&gt;
== Key features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Worksheet&#039;&#039;&#039; — a spreadsheet-style entry grid that serves as the main working surface. One grid per event, with vendor rows and payment cells edited in place, without dialogs interrupting data entry.&lt;br /&gt;
* &#039;&#039;&#039;Budget tracking&#039;&#039;&#039; — budget envelopes per vendor and event, with expandable rows revealing the underlying payment schedule.&lt;br /&gt;
* &#039;&#039;&#039;Payment plans&#039;&#039;&#039; — scheduled instalments with dates, amounts, descriptions, and optional funding source. Zero-amount lines act as &#039;&#039;milestones&#039;&#039; (contract signing, final headcount date) that appear on the timeline without contributing money.&lt;br /&gt;
* &#039;&#039;&#039;Payment recording&#039;&#039;&#039; — actual payments logged against a planned instalment or entered standalone for unbudgeted spending.&lt;br /&gt;
* &#039;&#039;&#039;Variance&#039;&#039;&#039; — planned versus actual is shown wherever both exist, colour-coded, and is always computed rather than stored.&lt;br /&gt;
* &#039;&#039;&#039;Timeline chart&#039;&#039;&#039; — a stacked bar chart of committed spending over time, with a date-range slider and a toggle to overlay actual payments against the plan.&lt;br /&gt;
* &#039;&#039;&#039;Calendar view&#039;&#039;&#039; — payment due dates rendered as a month calendar.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard&#039;&#039;&#039; — a summary view with a vendor breakdown donut (paid versus remaining per vendor) and a &amp;quot;due soon&amp;quot; list of upcoming obligations.&lt;br /&gt;
* &#039;&#039;&#039;Payment sources&#039;&#039;&#039; — optional labelling of where money comes from (a joint account, a parental contribution, savings), so contributions can be tracked separately from vendors.&lt;br /&gt;
* &#039;&#039;&#039;Multi-user collaboration&#039;&#039;&#039; — several people can share one celebration with distinct roles: Owner, Admin, Editor, and Viewer. Viewers have genuine read-only access, enforced at the API level and not merely hidden in the interface.&lt;br /&gt;
* &#039;&#039;&#039;Multilingual interface&#039;&#039;&#039; — the UI is translated into several languages, with per-account and per-celebration language and number/date formatting preferences.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The unit of tenancy is the &#039;&#039;&#039;celebration&#039;&#039;&#039;, not the user account. An account is&lt;br /&gt;
a person; a celebration is the thing being planned; a membership record links the&lt;br /&gt;
two with a role. All data belongs to a celebration, and every read is scoped to&lt;br /&gt;
the currently selected one. A single account can own or be invited to several&lt;br /&gt;
celebrations and switch between them.&lt;br /&gt;
&lt;br /&gt;
Derived financial figures — totals budgeted, totals planned, totals paid, and&lt;br /&gt;
variance — are &#039;&#039;&#039;never stored&#039;&#039;&#039;. They are computed at read time from the&lt;br /&gt;
underlying records, so the numbers cannot drift out of sync with the payments&lt;br /&gt;
they summarise.&lt;br /&gt;
&lt;br /&gt;
The application distinguishes two kinds of time. Calendar dates (a payment due&lt;br /&gt;
date, the event date, a contract date) are &#039;&#039;floating&#039;&#039;: they are stored and&lt;br /&gt;
displayed exactly as entered and are never shifted by a time zone. Machine&lt;br /&gt;
timestamps (account creation, logins) are stored in UTC and rendered in the&lt;br /&gt;
viewer&#039;s local time zone. &amp;quot;Due soon&amp;quot; calculations use the viewer&#039;s own notion of&lt;br /&gt;
today rather than the server&#039;s, so a payment due tomorrow does not appear due&lt;br /&gt;
today for a user in a different time zone.&lt;br /&gt;
&lt;br /&gt;
New accounts are not dropped into an empty screen. A starter worksheet is drawn&lt;br /&gt;
in advance with placeholder structure, and nothing is written to the database&lt;br /&gt;
until the user commits their first real entry. Celebrations can also be created&lt;br /&gt;
from a template, or template contents imported into an existing empty&lt;br /&gt;
celebration.&lt;br /&gt;
&lt;br /&gt;
Editing happens in place. Adding or changing a budget item, editing its whole&lt;br /&gt;
payment schedule, or recording a payment all occur through shared modals that&lt;br /&gt;
open on whichever page the user is currently on — the application does not&lt;br /&gt;
navigate away from a view to perform a create or edit.&lt;br /&gt;
&lt;br /&gt;
Technically, wed.money is a server-rendered PHP application with a browser-native&lt;br /&gt;
front end. It deliberately uses no front-end framework or build step; the only&lt;br /&gt;
third-party JavaScript is a small set of charting and calendar libraries loaded&lt;br /&gt;
from a CDN. All interface text is served from a translation database rather than&lt;br /&gt;
hardcoded, and all data access flows through a scoped API rather than direct&lt;br /&gt;
queries from the page.&lt;br /&gt;
&lt;br /&gt;
== Problem it addresses ==&lt;br /&gt;
&lt;br /&gt;
Wedding costs are not a single number; they are a sequence of obligations spread&lt;br /&gt;
over many months and owed to a dozen or more separate parties, each with its own&lt;br /&gt;
deposit schedule and final-balance date. The common failure mode is not&lt;br /&gt;
overspending in the abstract but a &#039;&#039;&#039;liquidity surprise&#039;&#039;&#039; — three vendors&lt;br /&gt;
happening to require final payment in the same fortnight, or a deposit forgotten&lt;br /&gt;
until it is overdue.&lt;br /&gt;
&lt;br /&gt;
General wedding planning apps typically model money as a flat category list with&lt;br /&gt;
a single &amp;quot;spent so far&amp;quot; figure, which cannot express when money is actually&lt;br /&gt;
required. Spreadsheets can express it, but they degrade quickly once several&lt;br /&gt;
people edit them and offer no view of what is due next week. wed.money targets&lt;br /&gt;
that gap specifically: it keeps the commitment, the schedule, and the actual&lt;br /&gt;
payment as three distinct records, and renders the result as a timeline of&lt;br /&gt;
obligations rather than a running total.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The following are explicit non-goals rather than pending features:&lt;br /&gt;
&lt;br /&gt;
* No vendor portal — vendors do not have accounts and cannot log in.&lt;br /&gt;
* No file or document storage, and no contract attachments.&lt;br /&gt;
* No multi-currency support; a celebration uses one currency.&lt;br /&gt;
* No recurring-payment automation.&lt;br /&gt;
* No guest management, seating, RSVPs, or messaging.&lt;br /&gt;
* No marketing email, digests, or payment reminders — outbound mail is limited to invitations and password resets.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://wed.money wed.money] — official website&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Wed.money&amp;diff=719</id>
		<title>Wed.money</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Wed.money&amp;diff=719"/>
		<updated>2026-08-14T16:26:28Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery mode=&amp;quot;packed-hover&amp;quot; widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot; caption=&amp;quot;wed.money logo&amp;quot;&amp;gt;&lt;br /&gt;
File:Wed-icon.png|alt=wed.money logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&#039;&#039;&#039;wed.money&#039;&#039;&#039; is a web-based financial planning tool for weddings and similar&lt;br /&gt;
one-off celebrations. Unlike general-purpose wedding planning software, it is&lt;br /&gt;
deliberately narrow in scope: it does not manage guest lists, seating charts,&lt;br /&gt;
tasks, or vendor communication. It exists to answer a single question —&lt;br /&gt;
&#039;&#039;&#039;how much do I owe, to whom, and when?&#039;&#039;&#039; The application is available at&lt;br /&gt;
[https://wed.money wed.money].&lt;br /&gt;
&lt;br /&gt;
The tool treats a wedding as a cash-flow problem rather than a project-management&lt;br /&gt;
problem. Its core model is a three-level hierarchy of &#039;&#039;budget&#039;&#039; (what an item is&lt;br /&gt;
expected to cost), &#039;&#039;payment plan&#039;&#039; (the schedule of deposits and instalments&lt;br /&gt;
agreed with a vendor), and &#039;&#039;payments&#039;&#039; (what has actually been paid, when, and&lt;br /&gt;
from which source). Every view in the application is a different projection of&lt;br /&gt;
that hierarchy.&lt;br /&gt;
&lt;br /&gt;
== Key features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Worksheet&#039;&#039;&#039; — a spreadsheet-style entry grid that serves as the main working surface. One grid per event, with vendor rows and payment cells edited in place, without dialogs interrupting data entry.&lt;br /&gt;
* &#039;&#039;&#039;Budget tracking&#039;&#039;&#039; — budget envelopes per vendor and event, with expandable rows revealing the underlying payment schedule.&lt;br /&gt;
* &#039;&#039;&#039;Payment plans&#039;&#039;&#039; — scheduled instalments with dates, amounts, descriptions, and optional funding source. Zero-amount lines act as &#039;&#039;milestones&#039;&#039; (contract signing, final headcount date) that appear on the timeline without contributing money.&lt;br /&gt;
* &#039;&#039;&#039;Payment recording&#039;&#039;&#039; — actual payments logged against a planned instalment or entered standalone for unbudgeted spending.&lt;br /&gt;
* &#039;&#039;&#039;Variance&#039;&#039;&#039; — planned versus actual is shown wherever both exist, colour-coded, and is always computed rather than stored.&lt;br /&gt;
* &#039;&#039;&#039;Timeline chart&#039;&#039;&#039; — a stacked bar chart of committed spending over time, with a date-range slider and a toggle to overlay actual payments against the plan.&lt;br /&gt;
* &#039;&#039;&#039;Calendar view&#039;&#039;&#039; — payment due dates rendered as a month calendar.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard&#039;&#039;&#039; — a summary view with a vendor breakdown donut (paid versus remaining per vendor) and a &amp;quot;due soon&amp;quot; list of upcoming obligations.&lt;br /&gt;
* &#039;&#039;&#039;Payment sources&#039;&#039;&#039; — optional labelling of where money comes from (a joint account, a parental contribution, savings), so contributions can be tracked separately from vendors.&lt;br /&gt;
* &#039;&#039;&#039;Multi-user collaboration&#039;&#039;&#039; — several people can share one celebration with distinct roles: Owner, Admin, Editor, and Viewer. Viewers have genuine read-only access, enforced at the API level and not merely hidden in the interface.&lt;br /&gt;
* &#039;&#039;&#039;Multilingual interface&#039;&#039;&#039; — the UI is translated into several languages, with per-account and per-celebration language and number/date formatting preferences.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The unit of tenancy is the &#039;&#039;&#039;celebration&#039;&#039;&#039;, not the user account. An account is&lt;br /&gt;
a person; a celebration is the thing being planned; a membership record links the&lt;br /&gt;
two with a role. All data belongs to a celebration, and every read is scoped to&lt;br /&gt;
the currently selected one. A single account can own or be invited to several&lt;br /&gt;
celebrations and switch between them.&lt;br /&gt;
&lt;br /&gt;
Derived financial figures — totals budgeted, totals planned, totals paid, and&lt;br /&gt;
variance — are &#039;&#039;&#039;never stored&#039;&#039;&#039;. They are computed at read time from the&lt;br /&gt;
underlying records, so the numbers cannot drift out of sync with the payments&lt;br /&gt;
they summarise.&lt;br /&gt;
&lt;br /&gt;
The application distinguishes two kinds of time. Calendar dates (a payment due&lt;br /&gt;
date, the event date, a contract date) are &#039;&#039;floating&#039;&#039;: they are stored and&lt;br /&gt;
displayed exactly as entered and are never shifted by a time zone. Machine&lt;br /&gt;
timestamps (account creation, logins) are stored in UTC and rendered in the&lt;br /&gt;
viewer&#039;s local time zone. &amp;quot;Due soon&amp;quot; calculations use the viewer&#039;s own notion of&lt;br /&gt;
today rather than the server&#039;s, so a payment due tomorrow does not appear due&lt;br /&gt;
today for a user in a different time zone.&lt;br /&gt;
&lt;br /&gt;
New accounts are not dropped into an empty screen. A starter worksheet is drawn&lt;br /&gt;
in advance with placeholder structure, and nothing is written to the database&lt;br /&gt;
until the user commits their first real entry. Celebrations can also be created&lt;br /&gt;
from a template, or template contents imported into an existing empty&lt;br /&gt;
celebration.&lt;br /&gt;
&lt;br /&gt;
Editing happens in place. Adding or changing a budget item, editing its whole&lt;br /&gt;
payment schedule, or recording a payment all occur through shared modals that&lt;br /&gt;
open on whichever page the user is currently on — the application does not&lt;br /&gt;
navigate away from a view to perform a create or edit.&lt;br /&gt;
&lt;br /&gt;
Technically, wed.money is a server-rendered PHP application with a browser-native&lt;br /&gt;
front end. It deliberately uses no front-end framework or build step; the only&lt;br /&gt;
third-party JavaScript is a small set of charting and calendar libraries loaded&lt;br /&gt;
from a CDN. All interface text is served from a translation database rather than&lt;br /&gt;
hardcoded, and all data access flows through a scoped API rather than direct&lt;br /&gt;
queries from the page.&lt;br /&gt;
&lt;br /&gt;
== Problem it addresses ==&lt;br /&gt;
&lt;br /&gt;
Wedding costs are not a single number; they are a sequence of obligations spread&lt;br /&gt;
over many months and owed to a dozen or more separate parties, each with its own&lt;br /&gt;
deposit schedule and final-balance date. The common failure mode is not&lt;br /&gt;
overspending in the abstract but a &#039;&#039;&#039;liquidity surprise&#039;&#039;&#039; — three vendors&lt;br /&gt;
happening to require final payment in the same fortnight, or a deposit forgotten&lt;br /&gt;
until it is overdue.&lt;br /&gt;
&lt;br /&gt;
General wedding planning apps typically model money as a flat category list with&lt;br /&gt;
a single &amp;quot;spent so far&amp;quot; figure, which cannot express when money is actually&lt;br /&gt;
required. Spreadsheets can express it, but they degrade quickly once several&lt;br /&gt;
people edit them and offer no view of what is due next week. wed.money targets&lt;br /&gt;
that gap specifically: it keeps the commitment, the schedule, and the actual&lt;br /&gt;
payment as three distinct records, and renders the result as a timeline of&lt;br /&gt;
obligations rather than a running total.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The following are explicit non-goals rather than pending features:&lt;br /&gt;
&lt;br /&gt;
* No vendor portal — vendors do not have accounts and cannot log in.&lt;br /&gt;
* No file or document storage, and no contract attachments.&lt;br /&gt;
* No multi-currency support; a celebration uses one currency.&lt;br /&gt;
* No recurring-payment automation.&lt;br /&gt;
* No guest management, seating, RSVPs, or messaging.&lt;br /&gt;
* No marketing email, digests, or payment reminders — outbound mail is limited to invitations and password resets.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://wed.money wed.money] — official website&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Wed.money&amp;diff=718</id>
		<title>Wed.money</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Wed.money&amp;diff=718"/>
		<updated>2026-08-14T16:25:52Z</updated>

		<summary type="html">&lt;p&gt;Lax: added logo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;gallery mode=&amp;quot;packed-hover&amp;quot; widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot; caption=&amp;quot;wed.money logo&amp;quot;&amp;gt;&lt;br /&gt;
File:Wed-icon.png|wed.money logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&#039;&#039;&#039;wed.money&#039;&#039;&#039; is a web-based financial planning tool for weddings and similar&lt;br /&gt;
one-off celebrations. Unlike general-purpose wedding planning software, it is&lt;br /&gt;
deliberately narrow in scope: it does not manage guest lists, seating charts,&lt;br /&gt;
tasks, or vendor communication. It exists to answer a single question —&lt;br /&gt;
&#039;&#039;&#039;how much do I owe, to whom, and when?&#039;&#039;&#039; The application is available at&lt;br /&gt;
[https://wed.money wed.money].&lt;br /&gt;
&lt;br /&gt;
The tool treats a wedding as a cash-flow problem rather than a project-management&lt;br /&gt;
problem. Its core model is a three-level hierarchy of &#039;&#039;budget&#039;&#039; (what an item is&lt;br /&gt;
expected to cost), &#039;&#039;payment plan&#039;&#039; (the schedule of deposits and instalments&lt;br /&gt;
agreed with a vendor), and &#039;&#039;payments&#039;&#039; (what has actually been paid, when, and&lt;br /&gt;
from which source). Every view in the application is a different projection of&lt;br /&gt;
that hierarchy.&lt;br /&gt;
&lt;br /&gt;
== Key features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Worksheet&#039;&#039;&#039; — a spreadsheet-style entry grid that serves as the main working surface. One grid per event, with vendor rows and payment cells edited in place, without dialogs interrupting data entry.&lt;br /&gt;
* &#039;&#039;&#039;Budget tracking&#039;&#039;&#039; — budget envelopes per vendor and event, with expandable rows revealing the underlying payment schedule.&lt;br /&gt;
* &#039;&#039;&#039;Payment plans&#039;&#039;&#039; — scheduled instalments with dates, amounts, descriptions, and optional funding source. Zero-amount lines act as &#039;&#039;milestones&#039;&#039; (contract signing, final headcount date) that appear on the timeline without contributing money.&lt;br /&gt;
* &#039;&#039;&#039;Payment recording&#039;&#039;&#039; — actual payments logged against a planned instalment or entered standalone for unbudgeted spending.&lt;br /&gt;
* &#039;&#039;&#039;Variance&#039;&#039;&#039; — planned versus actual is shown wherever both exist, colour-coded, and is always computed rather than stored.&lt;br /&gt;
* &#039;&#039;&#039;Timeline chart&#039;&#039;&#039; — a stacked bar chart of committed spending over time, with a date-range slider and a toggle to overlay actual payments against the plan.&lt;br /&gt;
* &#039;&#039;&#039;Calendar view&#039;&#039;&#039; — payment due dates rendered as a month calendar.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard&#039;&#039;&#039; — a summary view with a vendor breakdown donut (paid versus remaining per vendor) and a &amp;quot;due soon&amp;quot; list of upcoming obligations.&lt;br /&gt;
* &#039;&#039;&#039;Payment sources&#039;&#039;&#039; — optional labelling of where money comes from (a joint account, a parental contribution, savings), so contributions can be tracked separately from vendors.&lt;br /&gt;
* &#039;&#039;&#039;Multi-user collaboration&#039;&#039;&#039; — several people can share one celebration with distinct roles: Owner, Admin, Editor, and Viewer. Viewers have genuine read-only access, enforced at the API level and not merely hidden in the interface.&lt;br /&gt;
* &#039;&#039;&#039;Multilingual interface&#039;&#039;&#039; — the UI is translated into several languages, with per-account and per-celebration language and number/date formatting preferences.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The unit of tenancy is the &#039;&#039;&#039;celebration&#039;&#039;&#039;, not the user account. An account is&lt;br /&gt;
a person; a celebration is the thing being planned; a membership record links the&lt;br /&gt;
two with a role. All data belongs to a celebration, and every read is scoped to&lt;br /&gt;
the currently selected one. A single account can own or be invited to several&lt;br /&gt;
celebrations and switch between them.&lt;br /&gt;
&lt;br /&gt;
Derived financial figures — totals budgeted, totals planned, totals paid, and&lt;br /&gt;
variance — are &#039;&#039;&#039;never stored&#039;&#039;&#039;. They are computed at read time from the&lt;br /&gt;
underlying records, so the numbers cannot drift out of sync with the payments&lt;br /&gt;
they summarise.&lt;br /&gt;
&lt;br /&gt;
The application distinguishes two kinds of time. Calendar dates (a payment due&lt;br /&gt;
date, the event date, a contract date) are &#039;&#039;floating&#039;&#039;: they are stored and&lt;br /&gt;
displayed exactly as entered and are never shifted by a time zone. Machine&lt;br /&gt;
timestamps (account creation, logins) are stored in UTC and rendered in the&lt;br /&gt;
viewer&#039;s local time zone. &amp;quot;Due soon&amp;quot; calculations use the viewer&#039;s own notion of&lt;br /&gt;
today rather than the server&#039;s, so a payment due tomorrow does not appear due&lt;br /&gt;
today for a user in a different time zone.&lt;br /&gt;
&lt;br /&gt;
New accounts are not dropped into an empty screen. A starter worksheet is drawn&lt;br /&gt;
in advance with placeholder structure, and nothing is written to the database&lt;br /&gt;
until the user commits their first real entry. Celebrations can also be created&lt;br /&gt;
from a template, or template contents imported into an existing empty&lt;br /&gt;
celebration.&lt;br /&gt;
&lt;br /&gt;
Editing happens in place. Adding or changing a budget item, editing its whole&lt;br /&gt;
payment schedule, or recording a payment all occur through shared modals that&lt;br /&gt;
open on whichever page the user is currently on — the application does not&lt;br /&gt;
navigate away from a view to perform a create or edit.&lt;br /&gt;
&lt;br /&gt;
Technically, wed.money is a server-rendered PHP application with a browser-native&lt;br /&gt;
front end. It deliberately uses no front-end framework or build step; the only&lt;br /&gt;
third-party JavaScript is a small set of charting and calendar libraries loaded&lt;br /&gt;
from a CDN. All interface text is served from a translation database rather than&lt;br /&gt;
hardcoded, and all data access flows through a scoped API rather than direct&lt;br /&gt;
queries from the page.&lt;br /&gt;
&lt;br /&gt;
== Problem it addresses ==&lt;br /&gt;
&lt;br /&gt;
Wedding costs are not a single number; they are a sequence of obligations spread&lt;br /&gt;
over many months and owed to a dozen or more separate parties, each with its own&lt;br /&gt;
deposit schedule and final-balance date. The common failure mode is not&lt;br /&gt;
overspending in the abstract but a &#039;&#039;&#039;liquidity surprise&#039;&#039;&#039; — three vendors&lt;br /&gt;
happening to require final payment in the same fortnight, or a deposit forgotten&lt;br /&gt;
until it is overdue.&lt;br /&gt;
&lt;br /&gt;
General wedding planning apps typically model money as a flat category list with&lt;br /&gt;
a single &amp;quot;spent so far&amp;quot; figure, which cannot express when money is actually&lt;br /&gt;
required. Spreadsheets can express it, but they degrade quickly once several&lt;br /&gt;
people edit them and offer no view of what is due next week. wed.money targets&lt;br /&gt;
that gap specifically: it keeps the commitment, the schedule, and the actual&lt;br /&gt;
payment as three distinct records, and renders the result as a timeline of&lt;br /&gt;
obligations rather than a running total.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The following are explicit non-goals rather than pending features:&lt;br /&gt;
&lt;br /&gt;
* No vendor portal — vendors do not have accounts and cannot log in.&lt;br /&gt;
* No file or document storage, and no contract attachments.&lt;br /&gt;
* No multi-currency support; a celebration uses one currency.&lt;br /&gt;
* No recurring-payment automation.&lt;br /&gt;
* No guest management, seating, RSVPs, or messaging.&lt;br /&gt;
* No marketing email, digests, or payment reminders — outbound mail is limited to invitations and password resets.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://wed.money wed.money] — official website&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=717</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=717"/>
		<updated>2026-08-13T17:43:16Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|wed.money]]  Wedding Budget Management App&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=716</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=716"/>
		<updated>2026-08-13T17:41:56Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|Wedding Budget Management]] &lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=File:Wed-icon.png&amp;diff=715</id>
		<title>File:Wed-icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=File:Wed-icon.png&amp;diff=715"/>
		<updated>2026-08-13T17:40:37Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;logo&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Wed.money&amp;diff=714</id>
		<title>Wed.money</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Wed.money&amp;diff=714"/>
		<updated>2026-08-13T17:39:16Z</updated>

		<summary type="html">&lt;p&gt;Lax: Adding wed.money&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;wed.money&#039;&#039;&#039; is a web-based financial planning tool for weddings and similar&lt;br /&gt;
one-off celebrations. Unlike general-purpose wedding planning software, it is&lt;br /&gt;
deliberately narrow in scope: it does not manage guest lists, seating charts,&lt;br /&gt;
tasks, or vendor communication. It exists to answer a single question —&lt;br /&gt;
&#039;&#039;&#039;how much do I owe, to whom, and when?&#039;&#039;&#039; The application is available at&lt;br /&gt;
[https://wed.money wed.money].&lt;br /&gt;
&lt;br /&gt;
The tool treats a wedding as a cash-flow problem rather than a project-management&lt;br /&gt;
problem. Its core model is a three-level hierarchy of &#039;&#039;budget&#039;&#039; (what an item is&lt;br /&gt;
expected to cost), &#039;&#039;payment plan&#039;&#039; (the schedule of deposits and instalments&lt;br /&gt;
agreed with a vendor), and &#039;&#039;payments&#039;&#039; (what has actually been paid, when, and&lt;br /&gt;
from which source). Every view in the application is a different projection of&lt;br /&gt;
that hierarchy.&lt;br /&gt;
&lt;br /&gt;
== Key features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Worksheet&#039;&#039;&#039; — a spreadsheet-style entry grid that serves as the main working surface. One grid per event, with vendor rows and payment cells edited in place, without dialogs interrupting data entry.&lt;br /&gt;
* &#039;&#039;&#039;Budget tracking&#039;&#039;&#039; — budget envelopes per vendor and event, with expandable rows revealing the underlying payment schedule.&lt;br /&gt;
* &#039;&#039;&#039;Payment plans&#039;&#039;&#039; — scheduled instalments with dates, amounts, descriptions, and optional funding source. Zero-amount lines act as &#039;&#039;milestones&#039;&#039; (contract signing, final headcount date) that appear on the timeline without contributing money.&lt;br /&gt;
* &#039;&#039;&#039;Payment recording&#039;&#039;&#039; — actual payments logged against a planned instalment or entered standalone for unbudgeted spending.&lt;br /&gt;
* &#039;&#039;&#039;Variance&#039;&#039;&#039; — planned versus actual is shown wherever both exist, colour-coded, and is always computed rather than stored.&lt;br /&gt;
* &#039;&#039;&#039;Timeline chart&#039;&#039;&#039; — a stacked bar chart of committed spending over time, with a date-range slider and a toggle to overlay actual payments against the plan.&lt;br /&gt;
* &#039;&#039;&#039;Calendar view&#039;&#039;&#039; — payment due dates rendered as a month calendar.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard&#039;&#039;&#039; — a summary view with a vendor breakdown donut (paid versus remaining per vendor) and a &amp;quot;due soon&amp;quot; list of upcoming obligations.&lt;br /&gt;
* &#039;&#039;&#039;Payment sources&#039;&#039;&#039; — optional labelling of where money comes from (a joint account, a parental contribution, savings), so contributions can be tracked separately from vendors.&lt;br /&gt;
* &#039;&#039;&#039;Multi-user collaboration&#039;&#039;&#039; — several people can share one celebration with distinct roles: Owner, Admin, Editor, and Viewer. Viewers have genuine read-only access, enforced at the API level and not merely hidden in the interface.&lt;br /&gt;
* &#039;&#039;&#039;Multilingual interface&#039;&#039;&#039; — the UI is translated into several languages, with per-account and per-celebration language and number/date formatting preferences.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
The unit of tenancy is the &#039;&#039;&#039;celebration&#039;&#039;&#039;, not the user account. An account is&lt;br /&gt;
a person; a celebration is the thing being planned; a membership record links the&lt;br /&gt;
two with a role. All data belongs to a celebration, and every read is scoped to&lt;br /&gt;
the currently selected one. A single account can own or be invited to several&lt;br /&gt;
celebrations and switch between them.&lt;br /&gt;
&lt;br /&gt;
Derived financial figures — totals budgeted, totals planned, totals paid, and&lt;br /&gt;
variance — are &#039;&#039;&#039;never stored&#039;&#039;&#039;. They are computed at read time from the&lt;br /&gt;
underlying records, so the numbers cannot drift out of sync with the payments&lt;br /&gt;
they summarise.&lt;br /&gt;
&lt;br /&gt;
The application distinguishes two kinds of time. Calendar dates (a payment due&lt;br /&gt;
date, the event date, a contract date) are &#039;&#039;floating&#039;&#039;: they are stored and&lt;br /&gt;
displayed exactly as entered and are never shifted by a time zone. Machine&lt;br /&gt;
timestamps (account creation, logins) are stored in UTC and rendered in the&lt;br /&gt;
viewer&#039;s local time zone. &amp;quot;Due soon&amp;quot; calculations use the viewer&#039;s own notion of&lt;br /&gt;
today rather than the server&#039;s, so a payment due tomorrow does not appear due&lt;br /&gt;
today for a user in a different time zone.&lt;br /&gt;
&lt;br /&gt;
New accounts are not dropped into an empty screen. A starter worksheet is drawn&lt;br /&gt;
in advance with placeholder structure, and nothing is written to the database&lt;br /&gt;
until the user commits their first real entry. Celebrations can also be created&lt;br /&gt;
from a template, or template contents imported into an existing empty&lt;br /&gt;
celebration.&lt;br /&gt;
&lt;br /&gt;
Editing happens in place. Adding or changing a budget item, editing its whole&lt;br /&gt;
payment schedule, or recording a payment all occur through shared modals that&lt;br /&gt;
open on whichever page the user is currently on — the application does not&lt;br /&gt;
navigate away from a view to perform a create or edit.&lt;br /&gt;
&lt;br /&gt;
Technically, wed.money is a server-rendered PHP application with a browser-native&lt;br /&gt;
front end. It deliberately uses no front-end framework or build step; the only&lt;br /&gt;
third-party JavaScript is a small set of charting and calendar libraries loaded&lt;br /&gt;
from a CDN. All interface text is served from a translation database rather than&lt;br /&gt;
hardcoded, and all data access flows through a scoped API rather than direct&lt;br /&gt;
queries from the page.&lt;br /&gt;
&lt;br /&gt;
== Problem it addresses ==&lt;br /&gt;
&lt;br /&gt;
Wedding costs are not a single number; they are a sequence of obligations spread&lt;br /&gt;
over many months and owed to a dozen or more separate parties, each with its own&lt;br /&gt;
deposit schedule and final-balance date. The common failure mode is not&lt;br /&gt;
overspending in the abstract but a &#039;&#039;&#039;liquidity surprise&#039;&#039;&#039; — three vendors&lt;br /&gt;
happening to require final payment in the same fortnight, or a deposit forgotten&lt;br /&gt;
until it is overdue.&lt;br /&gt;
&lt;br /&gt;
General wedding planning apps typically model money as a flat category list with&lt;br /&gt;
a single &amp;quot;spent so far&amp;quot; figure, which cannot express when money is actually&lt;br /&gt;
required. Spreadsheets can express it, but they degrade quickly once several&lt;br /&gt;
people edit them and offer no view of what is due next week. wed.money targets&lt;br /&gt;
that gap specifically: it keeps the commitment, the schedule, and the actual&lt;br /&gt;
payment as three distinct records, and renders the result as a timeline of&lt;br /&gt;
obligations rather than a running total.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The following are explicit non-goals rather than pending features:&lt;br /&gt;
&lt;br /&gt;
* No vendor portal — vendors do not have accounts and cannot log in.&lt;br /&gt;
* No file or document storage, and no contract attachments.&lt;br /&gt;
* No multi-currency support; a celebration uses one currency.&lt;br /&gt;
* No recurring-payment automation.&lt;br /&gt;
* No guest management, seating, RSVPs, or messaging.&lt;br /&gt;
* No marketing email, digests, or payment reminders — outbound mail is limited to invitations and password resets.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://wed.money wed.money] — official website&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=713</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=713"/>
		<updated>2026-08-13T17:36:43Z</updated>

		<summary type="html">&lt;p&gt;Lax: wedding budget page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* [[wed.money|Wedding Budget Management]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=712</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=712"/>
		<updated>2026-08-13T17:35:57Z</updated>

		<summary type="html">&lt;p&gt;Lax: Adding a page for wedding budget&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
* Wedding Budget Management&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=711</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=711"/>
		<updated>2026-07-05T19:28:28Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Amar Micro Inc. Presents */ Added wed.money&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
* wed.money [https://wed.money wed.money] &lt;br /&gt;
* [https://wed.money Wedding Budget Manager]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=710</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=710"/>
		<updated>2025-10-07T03:38:58Z</updated>

		<summary type="html">&lt;p&gt;Lax: Amar Micro default page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2025-10-07T02:02:04Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed and can be updated.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Zimbra_Zimbra_Let%27s_encrypt&amp;diff=498</id>
		<title>Notepad:Zimbra Zimbra Let&#039;s encrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Zimbra_Zimbra_Let%27s_encrypt&amp;diff=498"/>
		<updated>2025-03-08T21:38:34Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* *=*=* NEW *=*=* */ Getting correct ROOT X1 pem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Zimbra renew let&#039;sencrypt =&lt;br /&gt;
&lt;br /&gt;
From : [https://gist.github.com/ugurerkan/6e9e3addf9a574ad0c57039164570e6f Zimbra Letsencrypt SSL Renew]&lt;br /&gt;
&lt;br /&gt;
 su zimbra&lt;br /&gt;
 zmproxyctl stop&lt;br /&gt;
 zmmailboxdctl stop&lt;br /&gt;
&lt;br /&gt;
Then return root user and renew Letsencrypt certificate&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 certbot renew&lt;br /&gt;
&lt;br /&gt;
Change directory to Zimbra Letsecnrpyt SSL folder&lt;br /&gt;
&lt;br /&gt;
 cd /opt/zimbra/ssl/letsencrypt/&lt;br /&gt;
&lt;br /&gt;
Copy new SSL files to Zimbra Letsencrypt folder then change owner to Zimbra.&lt;br /&gt;
&lt;br /&gt;
At this point change {YourSSLDomain} to your domain which is we are working on.&lt;br /&gt;
&lt;br /&gt;
 cp /etc/letsencrypt/live/{YourSSLDomain}/* .&lt;br /&gt;
 chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*&lt;br /&gt;
&lt;br /&gt;
=*=*=* NEW *=*=*=&lt;br /&gt;
&#039;&#039;&#039;2025&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You have to add the isrgrootx1.pem to chain.&lt;br /&gt;
&lt;br /&gt;
https://letsencrypt.org/certs/isrgrootx1.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Have a copy called ```chain.pem.working``` that should be used (copy to ```chain.pem```)&lt;br /&gt;
&lt;br /&gt;
Add X3 root certificate to our chain.pem&lt;br /&gt;
&lt;br /&gt;
 nano /opt/zimbra/ssl/letsencrypt/chain.pem&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&lt;br /&gt;
 MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&lt;br /&gt;
 DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&lt;br /&gt;
 PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&lt;br /&gt;
 Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&lt;br /&gt;
 AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&lt;br /&gt;
 rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&lt;br /&gt;
 OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&lt;br /&gt;
 xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&lt;br /&gt;
 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&lt;br /&gt;
 aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&lt;br /&gt;
 HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&lt;br /&gt;
 SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&lt;br /&gt;
 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&lt;br /&gt;
 AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&lt;br /&gt;
 R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&lt;br /&gt;
 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&lt;br /&gt;
 Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
Newer One&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw&lt;br /&gt;
 WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg&lt;br /&gt;
 RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK&lt;br /&gt;
 AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP&lt;br /&gt;
 R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx&lt;br /&gt;
 sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm&lt;br /&gt;
 NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg&lt;br /&gt;
 Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG&lt;br /&gt;
 /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC&lt;br /&gt;
 AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB&lt;br /&gt;
 Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA&lt;br /&gt;
 FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw&lt;br /&gt;
 AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw&lt;br /&gt;
 Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB&lt;br /&gt;
 gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W&lt;br /&gt;
 PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl&lt;br /&gt;
 ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz&lt;br /&gt;
 CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm&lt;br /&gt;
 lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4&lt;br /&gt;
 avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2&lt;br /&gt;
 yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O&lt;br /&gt;
 yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids&lt;br /&gt;
 hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+&lt;br /&gt;
 HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv&lt;br /&gt;
 MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX&lt;br /&gt;
 nLRbwHOoq7hHwg==&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4&lt;br /&gt;
 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu&lt;br /&gt;
 ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY&lt;br /&gt;
 MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc&lt;br /&gt;
 h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+&lt;br /&gt;
 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U&lt;br /&gt;
 A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW&lt;br /&gt;
 T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH&lt;br /&gt;
 B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC&lt;br /&gt;
 B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv&lt;br /&gt;
 KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn&lt;br /&gt;
 OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn&lt;br /&gt;
 jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw&lt;br /&gt;
 qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI&lt;br /&gt;
 rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV&lt;br /&gt;
 HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq&lt;br /&gt;
 hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL&lt;br /&gt;
 ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ&lt;br /&gt;
 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK&lt;br /&gt;
 NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5&lt;br /&gt;
 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur&lt;br /&gt;
 TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC&lt;br /&gt;
 jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc&lt;br /&gt;
 oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq&lt;br /&gt;
 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA&lt;br /&gt;
 mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d&lt;br /&gt;
 emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s check our certificates are verified via Zimbra certificate manager&lt;br /&gt;
&lt;br /&gt;
 /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem &lt;br /&gt;
&lt;br /&gt;
If you see done message in your console, first make a backup of course...&lt;br /&gt;
&lt;br /&gt;
 cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date &amp;quot;+%Y%m%d&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key&lt;br /&gt;
&lt;br /&gt;
Soooo, we are ready to deploy new certificates, run deploycrt command via zmcertmgr.&lt;br /&gt;
&lt;br /&gt;
 /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem &lt;br /&gt;
&lt;br /&gt;
at last, here is a happy restart.&lt;br /&gt;
&lt;br /&gt;
 su zimbra&lt;br /&gt;
 zmcontrol restart&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Zimbra_Zimbra_Let%27s_encrypt&amp;diff=497</id>
		<title>Notepad:Zimbra Zimbra Let&#039;s encrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Zimbra_Zimbra_Let%27s_encrypt&amp;diff=497"/>
		<updated>2025-03-08T21:36:30Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* *=*=* NEW *=*=* */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Zimbra renew let&#039;sencrypt =&lt;br /&gt;
&lt;br /&gt;
From : [https://gist.github.com/ugurerkan/6e9e3addf9a574ad0c57039164570e6f Zimbra Letsencrypt SSL Renew]&lt;br /&gt;
&lt;br /&gt;
 su zimbra&lt;br /&gt;
 zmproxyctl stop&lt;br /&gt;
 zmmailboxdctl stop&lt;br /&gt;
&lt;br /&gt;
Then return root user and renew Letsencrypt certificate&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 certbot renew&lt;br /&gt;
&lt;br /&gt;
Change directory to Zimbra Letsecnrpyt SSL folder&lt;br /&gt;
&lt;br /&gt;
 cd /opt/zimbra/ssl/letsencrypt/&lt;br /&gt;
&lt;br /&gt;
Copy new SSL files to Zimbra Letsencrypt folder then change owner to Zimbra.&lt;br /&gt;
&lt;br /&gt;
At this point change {YourSSLDomain} to your domain which is we are working on.&lt;br /&gt;
&lt;br /&gt;
 cp /etc/letsencrypt/live/{YourSSLDomain}/* .&lt;br /&gt;
 chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*&lt;br /&gt;
&lt;br /&gt;
=*=*=* NEW *=*=*=&lt;br /&gt;
&#039;&#039;&#039;2025&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You have to add the isrgrootx1.pem to chain.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Have a copy called ```chain.pem.working``` that should be used (copy to ```chain.pem```)&lt;br /&gt;
&lt;br /&gt;
Add X3 root certificate to our chain.pem&lt;br /&gt;
&lt;br /&gt;
 nano /opt/zimbra/ssl/letsencrypt/chain.pem&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&lt;br /&gt;
 MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&lt;br /&gt;
 DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&lt;br /&gt;
 PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&lt;br /&gt;
 Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&lt;br /&gt;
 AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&lt;br /&gt;
 rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&lt;br /&gt;
 OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&lt;br /&gt;
 xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&lt;br /&gt;
 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&lt;br /&gt;
 aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&lt;br /&gt;
 HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&lt;br /&gt;
 SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&lt;br /&gt;
 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&lt;br /&gt;
 AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&lt;br /&gt;
 R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&lt;br /&gt;
 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&lt;br /&gt;
 Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
Newer One&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw&lt;br /&gt;
 WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg&lt;br /&gt;
 RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK&lt;br /&gt;
 AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP&lt;br /&gt;
 R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx&lt;br /&gt;
 sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm&lt;br /&gt;
 NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg&lt;br /&gt;
 Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG&lt;br /&gt;
 /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC&lt;br /&gt;
 AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB&lt;br /&gt;
 Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA&lt;br /&gt;
 FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw&lt;br /&gt;
 AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw&lt;br /&gt;
 Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB&lt;br /&gt;
 gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W&lt;br /&gt;
 PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl&lt;br /&gt;
 ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz&lt;br /&gt;
 CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm&lt;br /&gt;
 lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4&lt;br /&gt;
 avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2&lt;br /&gt;
 yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O&lt;br /&gt;
 yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids&lt;br /&gt;
 hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+&lt;br /&gt;
 HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv&lt;br /&gt;
 MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX&lt;br /&gt;
 nLRbwHOoq7hHwg==&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4&lt;br /&gt;
 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu&lt;br /&gt;
 ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY&lt;br /&gt;
 MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc&lt;br /&gt;
 h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+&lt;br /&gt;
 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U&lt;br /&gt;
 A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW&lt;br /&gt;
 T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH&lt;br /&gt;
 B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC&lt;br /&gt;
 B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv&lt;br /&gt;
 KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn&lt;br /&gt;
 OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn&lt;br /&gt;
 jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw&lt;br /&gt;
 qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI&lt;br /&gt;
 rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV&lt;br /&gt;
 HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq&lt;br /&gt;
 hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL&lt;br /&gt;
 ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ&lt;br /&gt;
 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK&lt;br /&gt;
 NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5&lt;br /&gt;
 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur&lt;br /&gt;
 TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC&lt;br /&gt;
 jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc&lt;br /&gt;
 oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq&lt;br /&gt;
 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA&lt;br /&gt;
 mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d&lt;br /&gt;
 emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s check our certificates are verified via Zimbra certificate manager&lt;br /&gt;
&lt;br /&gt;
 /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem &lt;br /&gt;
&lt;br /&gt;
If you see done message in your console, first make a backup of course...&lt;br /&gt;
&lt;br /&gt;
 cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date &amp;quot;+%Y%m%d&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key&lt;br /&gt;
&lt;br /&gt;
Soooo, we are ready to deploy new certificates, run deploycrt command via zmcertmgr.&lt;br /&gt;
&lt;br /&gt;
 /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem &lt;br /&gt;
&lt;br /&gt;
at last, here is a happy restart.&lt;br /&gt;
&lt;br /&gt;
 su zimbra&lt;br /&gt;
 zmcontrol restart&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=631</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=631"/>
		<updated>2025-01-30T21:18:04Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* TLV320AIC3110 */ add wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
  &lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
    // compatible = &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;1&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@1 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-always-on;&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti-pg,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 1&amp;gt;; // GPIO 13 as active low reset&lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties (must precede subnodes)&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
 &lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            i2s-controller = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            simple-audio-card,convert-rate = &amp;lt;48000&amp;gt;;&lt;br /&gt;
            simple-audio-card,mclk-fs = &amp;lt;256&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,bitclock-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
            simple-audio-card,frame-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;External Speaker&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-num = &amp;lt;2&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-width = &amp;lt;32&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            snd_codec: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-direction-out = &amp;quot;out&amp;quot;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@4 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explanation ==&lt;br /&gt;
After carefully reading the source code, I finally found the culprit of my issues. Even if the datasheet suggest I can bypass the PLL if use a proper frequency for MCLK (I chose 12.288Mhz and 11.2896Mhz which divided by 256 gives 48Khz and 41.1Khz), the device driver does not support any arbitrary frequency! They have a bunch of lookup tables for clock rates and playback and if your choice is not present, the driver will fail.&lt;br /&gt;
&lt;br /&gt;
I modified the source code and added the proper lookups for my custom frequencies&lt;br /&gt;
&lt;br /&gt;
Code: Select all&lt;br /&gt;
&lt;br /&gt;
 /* ADC dividers can be disabled by configuring them to 0 */&lt;br /&gt;
 static const struct aic31xx_rate_divs aic31xx_divs[] = {&lt;br /&gt;
 ...&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 44100, 1, 7, 6800, 128, 8, 2, 128, 8, 2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 44100,  1, 7, 5264, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 48000,  1, 7, 6800, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 48000,  1, 8, 1920, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
&lt;br /&gt;
After a fun fight with Ubuntu to compile this, lo and behold, everything plays!&lt;br /&gt;
&lt;br /&gt;
Now for my project which involves an Iot device, I don&#039;t want to have to include an unsigned device driver that will need DKMS to install with every kernel update, I will redo my PCB hardware oscillator to use a natively supported frequency. I leave as an exercise to the people at TI to write a function that dynamically creates a lookup entry for a random frequency MCLK and playback combo!&lt;br /&gt;
&lt;br /&gt;
{{Wiki}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Template:Wiki&amp;diff=325</id>
		<title>Template:Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Template:Wiki&amp;diff=325"/>
		<updated>2025-01-30T21:16:59Z</updated>

		<summary type="html">&lt;p&gt;Lax: Changed to copyright&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&#039;80%&#039;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;© 2000-2025 Jacques Amar&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Amar Micro Inc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=630</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=630"/>
		<updated>2025-01-20T20:45:59Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
  &lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
    // compatible = &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;1&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@1 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-always-on;&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti-pg,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 1&amp;gt;; // GPIO 13 as active low reset&lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties (must precede subnodes)&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
 &lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            i2s-controller = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            simple-audio-card,convert-rate = &amp;lt;48000&amp;gt;;&lt;br /&gt;
            simple-audio-card,mclk-fs = &amp;lt;256&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,bitclock-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
            simple-audio-card,frame-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;External Speaker&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-num = &amp;lt;2&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-width = &amp;lt;32&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            snd_codec: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-direction-out = &amp;quot;out&amp;quot;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@4 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explanation ==&lt;br /&gt;
After carefully reading the source code, I finally found the culprit of my issues. Even if the datasheet suggest I can bypass the PLL if use a proper frequency for MCLK (I chose 12.288Mhz and 11.2896Mhz which divided by 256 gives 48Khz and 41.1Khz), the device driver does not support any arbitrary frequency! They have a bunch of lookup tables for clock rates and playback and if your choice is not present, the driver will fail.&lt;br /&gt;
&lt;br /&gt;
I modified the source code and added the proper lookups for my custom frequencies&lt;br /&gt;
&lt;br /&gt;
Code: Select all&lt;br /&gt;
&lt;br /&gt;
 /* ADC dividers can be disabled by configuring them to 0 */&lt;br /&gt;
 static const struct aic31xx_rate_divs aic31xx_divs[] = {&lt;br /&gt;
 ...&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 44100, 1, 7, 6800, 128, 8, 2, 128, 8, 2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 44100,  1, 7, 5264, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 48000,  1, 7, 6800, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 48000,  1, 8, 1920, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
&lt;br /&gt;
After a fun fight with Ubuntu to compile this, lo and behold, everything plays!&lt;br /&gt;
&lt;br /&gt;
Now for my project which involves an Iot device, I don&#039;t want to have to include an unsigned device driver that will need DKMS to install with every kernel update, I will redo my PCB hardware oscillator to use a natively supported frequency. I leave as an exercise to the people at TI to write a function that dynamically creates a lookup entry for a random frequency MCLK and playback combo!&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=629</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=629"/>
		<updated>2025-01-20T20:45:28Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */ Spacing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
 &lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
    // compatible = &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;1&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@1 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-always-on;&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti-pg,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 1&amp;gt;; // GPIO 13 as active low reset&lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties (must precede subnodes)&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
 &lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            i2s-controller = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            simple-audio-card,convert-rate = &amp;lt;48000&amp;gt;;&lt;br /&gt;
            simple-audio-card,mclk-fs = &amp;lt;256&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,bitclock-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
            simple-audio-card,frame-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;External Speaker&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-num = &amp;lt;2&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-width = &amp;lt;32&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            snd_codec: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-direction-out = &amp;quot;out&amp;quot;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@4 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explanation ==&lt;br /&gt;
After carefully reading the source code, I finally found the culprit of my issues. Even if the datasheet suggest I can bypass the PLL if use a proper frequency for MCLK (I chose 12.288Mhz and 11.2896Mhz which divided by 256 gives 48Khz and 41.1Khz), the device driver does not support any arbitrary frequency! They have a bunch of lookup tables for clock rates and playback and if your choice is not present, the driver will fail.&lt;br /&gt;
&lt;br /&gt;
I modified the source code and added the proper lookups for my custom frequencies&lt;br /&gt;
&lt;br /&gt;
Code: Select all&lt;br /&gt;
&lt;br /&gt;
 /* ADC dividers can be disabled by configuring them to 0 */&lt;br /&gt;
 static const struct aic31xx_rate_divs aic31xx_divs[] = {&lt;br /&gt;
 ...&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 44100, 1, 7, 6800, 128, 8, 2, 128, 8, 2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 44100,  1, 7, 5264, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 48000,  1, 7, 6800, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 48000,  1, 8, 1920, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
&lt;br /&gt;
After a fun fight with Ubuntu to compile this, lo and behold, everything plays!&lt;br /&gt;
&lt;br /&gt;
Now for my project which involves an Iot device, I don&#039;t want to have to include an unsigned device driver that will need DKMS to install with every kernel update, I will redo my PCB hardware oscillator to use a natively supported frequency. I leave as an exercise to the people at TI to write a function that dynamically creates a lookup entry for a random frequency MCLK and playback combo!&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=628</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=628"/>
		<updated>2025-01-20T20:43:47Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* TLV320AIC3110 */ Explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
    // compatible = &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;1&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@1 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-always-on;&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti-pg,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
&lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 1&amp;gt;; // GPIO 13 as active low reset&lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
&lt;br /&gt;
                // Debug properties (must precede subnodes)&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            i2s-controller = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            simple-audio-card,convert-rate = &amp;lt;48000&amp;gt;;&lt;br /&gt;
            simple-audio-card,mclk-fs = &amp;lt;256&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,bitclock-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
            simple-audio-card,frame-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;External Speaker&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            dailink0_master: simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-num = &amp;lt;2&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-width = &amp;lt;32&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            snd_codec: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-direction-out = &amp;quot;out&amp;quot;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@4 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explanation ==&lt;br /&gt;
After carefully reading the source code, I finally found the culprit of my issues. Even if the datasheet suggest I can bypass the PLL if use a proper frequency for MCLK (I chose 12.288Mhz and 11.2896Mhz which divided by 256 gives 48Khz and 41.1Khz), the device driver does not support any arbitrary frequency! They have a bunch of lookup tables for clock rates and playback and if your choice is not present, the driver will fail.&lt;br /&gt;
&lt;br /&gt;
I modified the source code and added the proper lookups for my custom frequencies&lt;br /&gt;
&lt;br /&gt;
Code: Select all&lt;br /&gt;
&lt;br /&gt;
 /* ADC dividers can be disabled by configuring them to 0 */&lt;br /&gt;
 static const struct aic31xx_rate_divs aic31xx_divs[] = {&lt;br /&gt;
 ...&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 44100, 1, 7, 6800, 128, 8, 2, 128, 8, 2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 44100,  1, 7, 5264, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 11.2896 MHz (11289600 Hz) */&lt;br /&gt;
    { 11289600, 48000,  1, 7, 6800, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
    /* 12.288 MHz (12288000 Hz) */&lt;br /&gt;
    { 12288000, 48000,  1, 8, 1920, 128,   8,  2,   128,   8,  2},&lt;br /&gt;
&lt;br /&gt;
After a fun fight with Ubuntu to compile this, lo and behold, everything plays!&lt;br /&gt;
&lt;br /&gt;
Now for my project which involves an Iot device, I don&#039;t want to have to include an unsigned device driver that will need DKMS to install with every kernel update, I will redo my PCB hardware oscillator to use a natively supported frequency. I leave as an exercise to the people at TI to write a function that dynamically creates a lookup entry for a random frequency MCLK and playback combo!&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=627</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=627"/>
		<updated>2025-01-20T20:38:09Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */ Correct device tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
    // compatible = &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;1&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@1 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                regulator-always-on;&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti-pg,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
&lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 1&amp;gt;; // GPIO 13 as active low reset&lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
&lt;br /&gt;
                // Debug properties (must precede subnodes)&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            i2s-controller = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            simple-audio-card,convert-rate = &amp;lt;48000&amp;gt;;&lt;br /&gt;
            simple-audio-card,mclk-fs = &amp;lt;256&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,bitclock-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
            simple-audio-card,frame-master = &amp;lt;&amp;amp;snd_codec&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;External Speaker&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;External Speaker&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            dailink0_master: simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s_clk_consumer&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-num = &amp;lt;2&amp;gt;;&lt;br /&gt;
                dai-tdm-slot-width = &amp;lt;32&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            snd_codec: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-direction-out = &amp;quot;out&amp;quot;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@4 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=626</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=626"/>
		<updated>2025-01-08T23:02:18Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Schematics */ File with copyright&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics-copyright.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/; &lt;br /&gt;
 &lt;br /&gt;
/ { &lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=File:Tlv320aic3110-schematics-copyright.png&amp;diff=632</id>
		<title>File:Tlv320aic3110-schematics-copyright.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=File:Tlv320aic3110-schematics-copyright.png&amp;diff=632"/>
		<updated>2025-01-08T23:00:18Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pillgram TLV320AIC3110 Audio Codec Schematics - © 2021-2025 Jacques Amar&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=625</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=625"/>
		<updated>2025-01-08T22:39:04Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */ Syntax Highlight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/; &lt;br /&gt;
 &lt;br /&gt;
/ { &lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=624</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=624"/>
		<updated>2025-01-08T22:38:10Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;code&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/; &lt;br /&gt;
/ { &lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=623</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=623"/>
		<updated>2025-01-08T22:35:18Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;code&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
 &lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
  &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
 &lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
 &lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
 &lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=622</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=622"/>
		<updated>2025-01-08T22:33:45Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Device Tree */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;code&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
&lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
&lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=621</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=621"/>
		<updated>2025-01-08T22:32:40Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* TLV320AIC3110 */ device tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;br /&gt;
== Device Tree ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dts-v1/;&lt;br /&gt;
/plugin/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    compatible = &amp;quot;brcm,bcm2712&amp;quot;, &amp;quot;brcm,bcm2711&amp;quot;, &amp;quot;brcm,bcm2835&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    fragment@0 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2s&amp;gt;;  // For RPi4&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
            brcm,tx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
            brcm,rx-channels = &amp;lt;2&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@2 {&lt;br /&gt;
            target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
            __overlay__ {&lt;br /&gt;
                    codec_1v8_reg: codec-1v8-reg {&lt;br /&gt;
                        compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
                        regulator-name = &amp;quot;tlv320aic3104_1v8&amp;quot;;&lt;br /&gt;
                        regulator-min-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-max-microvolt = &amp;lt;1800000&amp;gt;;&lt;br /&gt;
                        regulator-always-on;&lt;br /&gt;
                    };&lt;br /&gt;
            };&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    fragment@3 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;i2c1&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            #address-cells = &amp;lt;1&amp;gt;; /* Single cell for I2C address */&lt;br /&gt;
            #size-cells = &amp;lt;0&amp;gt;;    /* No size cells for I2C devices */&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            tlv320aic3110: tlv320aic3110@18 {&lt;br /&gt;
                compatible = &amp;quot;ti,tlv320aic3110&amp;quot;, &amp;quot;ti,tlv320aic311x&amp;quot;; &lt;br /&gt;
                reg = &amp;lt;0x18&amp;gt;;&lt;br /&gt;
                #sound-dai-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                // system-clock-frequency = &amp;lt;12288000&amp;gt;;  // Codec clock config&lt;br /&gt;
                // system-clock-direction-out;           // Codec as master&lt;br /&gt;
                status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                HPVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                SPRVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                SPLVDD-supply = &amp;lt;&amp;amp;vdd_5v0_reg&amp;gt;;&lt;br /&gt;
                AVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                IOVDD-supply = &amp;lt;&amp;amp;vdd_3v3_reg&amp;gt;;&lt;br /&gt;
                DVDD-supply = &amp;lt;&amp;amp;codec_1v8_reg&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                clock-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
                // system-clk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                mclk-frequency = &amp;lt;12288000&amp;gt;;&lt;br /&gt;
                // gpio-controller;&lt;br /&gt;
&lt;br /&gt;
                /* PLL configuration for 48kHz with 12.288MHz MCLK */&lt;br /&gt;
                pll-p = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-r = &amp;lt;1&amp;gt;;&lt;br /&gt;
                pll-j = &amp;lt;7&amp;gt;;&lt;br /&gt;
                pll-d = &amp;lt;1680&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
                reset-gpios = &amp;lt;&amp;amp;gpio 13 0&amp;gt;; // GPIO 13 as active high &lt;br /&gt;
                reset-delay-us = &amp;lt;10000&amp;gt;;     /* 10ms delay */&lt;br /&gt;
&lt;br /&gt;
                // Debug properties&lt;br /&gt;
                debug;&lt;br /&gt;
                linux,debug;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@5 {&lt;br /&gt;
        target = &amp;lt;&amp;amp;sound&amp;gt;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            compatible = &amp;quot;simple-audio-card&amp;quot;;&lt;br /&gt;
            simple-audio-card,name = &amp;quot;TLV320AIC3110&amp;quot;;&lt;br /&gt;
            simple-audio-card,format = &amp;quot;i2s&amp;quot;;&lt;br /&gt;
            // simple-audio-card,bitclock-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
            // simple-audio-card,frame-master = &amp;lt;&amp;amp;dailink0_master&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,widgets =&lt;br /&gt;
                &amp;quot;Microphone&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Left&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker&amp;quot;, &amp;quot;Speaker Right&amp;quot;;&lt;br /&gt;
            simple-audio-card,routing =&lt;br /&gt;
                &amp;quot;Speaker Left&amp;quot;, &amp;quot;SPL&amp;quot;,&lt;br /&gt;
                &amp;quot;Speaker Right&amp;quot;, &amp;quot;SPR&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LP&amp;quot;, &amp;quot;Mic Jack&amp;quot;,&lt;br /&gt;
                &amp;quot;MIC1LM&amp;quot;, &amp;quot;Mic Jack&amp;quot;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            simple-audio-card,cpu {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;i2s&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            dailink0_master: simple-audio-card,codec {&lt;br /&gt;
                sound-dai = &amp;lt;&amp;amp;tlv320aic3110&amp;gt;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;mclk_external&amp;gt;;&lt;br /&gt;
                system-clock-frequency = &amp;lt;12288000&amp;gt;; //*** added LAX&lt;br /&gt;
                mclk-fs = &amp;lt;256&amp;gt;; //*** added LAX&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    fragment@6 {&lt;br /&gt;
        target-path = &amp;quot;/&amp;quot;;&lt;br /&gt;
        __overlay__ {&lt;br /&gt;
            mclk_external: mclk_external {&lt;br /&gt;
                compatible = &amp;quot;fixed-clock&amp;quot;;&lt;br /&gt;
                #clock-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
                clock-frequency = &amp;lt;12288000&amp;gt;; // 12.288 MHz&lt;br /&gt;
                clock-output-names = &amp;quot;mclk&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=620</id>
		<title>Pillgram::Audio</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Pillgram::Audio&amp;diff=620"/>
		<updated>2025-01-08T22:22:22Z</updated>

		<summary type="html">&lt;p&gt;Lax: Pillgram TLV320AIC3110 Audio Schematics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TLV320AIC3110 =&lt;br /&gt;
== Schematics ==&lt;br /&gt;
[[File:Tlv320aic3110-schematics.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=File:Tlv320aic3110-schematics.png&amp;diff=619</id>
		<title>File:Tlv320aic3110-schematics.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=File:Tlv320aic3110-schematics.png&amp;diff=619"/>
		<updated>2025-01-08T22:21:35Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scematics for tlv320aic3110 Audio Codec dor pillgram&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Main_Page&amp;diff=43</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Main_Page&amp;diff=43"/>
		<updated>2025-01-08T22:18:50Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Amar Micro Inc. Presents */ Pillgram Audio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Amar:Amar Micro Inc|Amar Micro Inc]]. Presents ==&lt;br /&gt;
&lt;br /&gt;
* [[Notepad:Notepad|Notepad]][[Image:New.gif]]&lt;br /&gt;
&lt;br /&gt;
* [[Pillgram::Audio|Audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:GPIO|GPIO]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Snippets|Snippets]]&lt;br /&gt;
&lt;br /&gt;
* [[Programming:Javascript|Javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[3DPrinter:Resins|3D Printer Resins]]&lt;br /&gt;
&lt;br /&gt;
All the &amp;lt;big&amp;gt;big&amp;lt;/big&amp;gt; projects that I am working on.&lt;br /&gt;
* [[Solar:Main Page|Solar Project]]&lt;br /&gt;
&lt;br /&gt;
* [[FamileMan:Main Page|FamileMan.com Social Networking Site]]&lt;br /&gt;
&lt;br /&gt;
* [[AmarCommerce:Main Page|Commerce Shopping Site]]&lt;br /&gt;
&lt;br /&gt;
* [[EmailServer:Mail Page|Email Server Page]]&lt;br /&gt;
&lt;br /&gt;
* [[Misc:Main Page|Misc. Other projects]]&lt;br /&gt;
&lt;br /&gt;
* [[CAMG:Leads|CAMG Leads Documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[Nurse:Install|Nurse Install Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:New Server|Caltex New Server Packages]]&lt;br /&gt;
&lt;br /&gt;
* [[Caltex:Navahang|Caltex Old App]]&lt;br /&gt;
&lt;br /&gt;
== Mediawiki standard messages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;MediaWiki has been successfully installed.&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
      ROFL:LOL:ROFL&lt;br /&gt;
            |&lt;br /&gt;
 L   /------^-----&lt;br /&gt;
 O ===         [] \&lt;br /&gt;
 L    \            \&lt;br /&gt;
       \____________\&lt;br /&gt;
            |    |&lt;br /&gt;
         ----------/&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Wiki}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=507</id>
		<title>CAMG:Leads</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=507"/>
		<updated>2024-12-08T20:18:38Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Token Debugger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CAMG Leads Documentation =&lt;br /&gt;
== Steps for a new campaign ==&lt;br /&gt;
# Make me an &#039;&#039;&#039;Ad admin&#039;&#039;&#039; and &amp;quot;&#039;&#039;&#039;Business Manager&#039;&#039;&#039;&amp;quot; of the pages&lt;br /&gt;
# I have to go to the &amp;quot;platform&amp;quot; page and link the page to the app: [https://leads.rminterface.com/platform.php Leads Platform Page]&lt;br /&gt;
# I have to go to the &amp;quot;Business&amp;quot; page and create custom administration. Then choose the page and choose CRMs and &amp;quot;Assign Access&amp;quot; to the App&lt;br /&gt;
# I (or anybody) can then do a test lead, this will create an entry in [https://leads.rminterface.com/leads/map Leads Data Mapping Page]&lt;br /&gt;
# Sabrena (or anybody) can then go and customize the emails in that pages. Notice that each form will have a different entry, even for the same campaign, so each has to be customized. Once a real (non test) lead comes in, then a master record is created.&lt;br /&gt;
&lt;br /&gt;
== Business Manager ==&lt;br /&gt;
# Choose Company&lt;br /&gt;
# Go to *BUSINESS SETTINGS*&lt;br /&gt;
# Choose Apps&lt;br /&gt;
# choose connected assets&lt;br /&gt;
# add any new asset (ad)&lt;br /&gt;
# Select All ads&lt;br /&gt;
&lt;br /&gt;
== Token Debugger ==&lt;br /&gt;
Who knows, but we get more info:&lt;br /&gt;
&lt;br /&gt;
[https://developers.facebook.com/tools/debug/accesstoken Facebook Token Debugger]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=506</id>
		<title>CAMG:Leads</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=506"/>
		<updated>2024-12-08T20:13:57Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Token Debugger */ Case issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CAMG Leads Documentation =&lt;br /&gt;
== Steps for a new campaign ==&lt;br /&gt;
# Make me an &#039;&#039;&#039;Ad admin&#039;&#039;&#039; and &amp;quot;&#039;&#039;&#039;Business Manager&#039;&#039;&#039;&amp;quot; of the pages&lt;br /&gt;
# I have to go to the &amp;quot;platform&amp;quot; page and link the page to the app: [https://leads.rminterface.com/platform.php Leads Platform Page]&lt;br /&gt;
# I have to go to the &amp;quot;Business&amp;quot; page and create custom administration. Then choose the page and choose CRMs and &amp;quot;Assign Access&amp;quot; to the App&lt;br /&gt;
# I (or anybody) can then do a test lead, this will create an entry in [https://leads.rminterface.com/leads/map Leads Data Mapping Page]&lt;br /&gt;
# Sabrena (or anybody) can then go and customize the emails in that pages. Notice that each form will have a different entry, even for the same campaign, so each has to be customized. Once a real (non test) lead comes in, then a master record is created.&lt;br /&gt;
&lt;br /&gt;
== Business Manager ==&lt;br /&gt;
# Choose Company&lt;br /&gt;
# Go to *BUSINESS SETTINGS*&lt;br /&gt;
# Choose Apps&lt;br /&gt;
# choose connected assets&lt;br /&gt;
# add any new asset (ad)&lt;br /&gt;
# Select All ads&lt;br /&gt;
&lt;br /&gt;
== Token Debugger ==&lt;br /&gt;
Who know, but we get more info:&lt;br /&gt;
&lt;br /&gt;
[https://developers.facebook.com/tools/debug/accesstoken Facebook Token Debugger]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=505</id>
		<title>CAMG:Leads</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=CAMG:Leads&amp;diff=505"/>
		<updated>2024-12-08T20:11:21Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Token Debugger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CAMG Leads Documentation =&lt;br /&gt;
== Steps for a new campaign ==&lt;br /&gt;
# Make me an &#039;&#039;&#039;Ad admin&#039;&#039;&#039; and &amp;quot;&#039;&#039;&#039;Business Manager&#039;&#039;&#039;&amp;quot; of the pages&lt;br /&gt;
# I have to go to the &amp;quot;platform&amp;quot; page and link the page to the app: [https://leads.rminterface.com/platform.php Leads Platform Page]&lt;br /&gt;
# I have to go to the &amp;quot;Business&amp;quot; page and create custom administration. Then choose the page and choose CRMs and &amp;quot;Assign Access&amp;quot; to the App&lt;br /&gt;
# I (or anybody) can then do a test lead, this will create an entry in [https://leads.rminterface.com/leads/map Leads Data Mapping Page]&lt;br /&gt;
# Sabrena (or anybody) can then go and customize the emails in that pages. Notice that each form will have a different entry, even for the same campaign, so each has to be customized. Once a real (non test) lead comes in, then a master record is created.&lt;br /&gt;
&lt;br /&gt;
== Business Manager ==&lt;br /&gt;
# Choose Company&lt;br /&gt;
# Go to *BUSINESS SETTINGS*&lt;br /&gt;
# Choose Apps&lt;br /&gt;
# choose connected assets&lt;br /&gt;
# add any new asset (ad)&lt;br /&gt;
# Select All ads&lt;br /&gt;
&lt;br /&gt;
== Token Debugger ==&lt;br /&gt;
WHo know, but we get more info:&lt;br /&gt;
&lt;br /&gt;
[https://developers.facebook.com/tools/debug/accesstoken Facebook Token Debugger]&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:KVM&amp;diff=481</id>
		<title>Notepad:KVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:KVM&amp;diff=481"/>
		<updated>2024-05-14T22:59:10Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* KVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: [https://wiki.centos.org/HowTos/KVM HowTos | KVM ]&lt;br /&gt;
&lt;br /&gt;
= KVM =&lt;br /&gt;
== Networking - brctl ==&lt;br /&gt;
[https://wiki.archlinux.org/index.php/Systemd-networkd#Bridge_interface systemd-networkd]&lt;br /&gt;
&lt;br /&gt;
== Start/Start libvirtd ==&lt;br /&gt;
== Virtual Shell virsh ==&lt;br /&gt;
[https://libvirt.org/sources/virshcmdref/html-single/ virsh man]&lt;br /&gt;
&lt;br /&gt;
== Transfer Running Machines ==&lt;br /&gt;
* Windows [http://www.johnwillis.com/2014/05/p2v-windows-2008r2-to-kvm.html Transfer a running Windows]&lt;br /&gt;
* Linux [http://manuel.kiessling.net/2013/03/19/converting-a-running-physical-machine-to-a-kvm-virtual-machine/ Transfer a running Linux]&lt;br /&gt;
&lt;br /&gt;
== Expand the size of QCOW2 disk ==&lt;br /&gt;
[http://www.naturalborncoder.com/virtualization/2014/12/05/increasing-the-size-of-a-qcow2-image-under-kvm/ Expand the size of a QCOW2 disk image ]&lt;br /&gt;
&lt;br /&gt;
== Shrink a QCOW2 disk ==&lt;br /&gt;
Clear the empty space&lt;br /&gt;
 sudo dd if=/dev/zero of=/zerofile bs=1M&lt;br /&gt;
 sudo rm -f /zerofile&lt;br /&gt;
or&lt;br /&gt;
 sdelete.exe -z C:&lt;br /&gt;
&lt;br /&gt;
Then change the size&lt;br /&gt;
 qemu-img convert -O qcow2 -c input.qcow2 output.qcow2&lt;br /&gt;
&lt;br /&gt;
=== Copy a Sparse File ===&lt;br /&gt;
&lt;br /&gt;
From [https://serverfault.com/questions/665335/what-is-fastest-way-to-copy-a-sparse-file-what-method-results-in-the-smallest-f Fastest way to copy a sprse file] the end result was :&lt;br /&gt;
&lt;br /&gt;
* cp --sparse=always srcFile dstFile&lt;br /&gt;
* dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse&lt;br /&gt;
* rsync --ignore-existing -aS srcFile dstFile&lt;br /&gt;
* virt-sparsify srcFile dstFile&lt;br /&gt;
&lt;br /&gt;
{{notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:KVM&amp;diff=480</id>
		<title>Notepad:KVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:KVM&amp;diff=480"/>
		<updated>2024-05-10T18:24:07Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* KVM */  Shrink QCOW2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: [https://wiki.centos.org/HowTos/KVM HowTos | KVM ]&lt;br /&gt;
&lt;br /&gt;
= KVM =&lt;br /&gt;
== Networking - brctl ==&lt;br /&gt;
[https://wiki.archlinux.org/index.php/Systemd-networkd#Bridge_interface systemd-networkd]&lt;br /&gt;
&lt;br /&gt;
== Start/Start libvirtd ==&lt;br /&gt;
== Virtual Shell virsh ==&lt;br /&gt;
[https://libvirt.org/sources/virshcmdref/html-single/ virsh man]&lt;br /&gt;
&lt;br /&gt;
== Transfer Running Machines ==&lt;br /&gt;
* Windows [http://www.johnwillis.com/2014/05/p2v-windows-2008r2-to-kvm.html Transfer a running Windows]&lt;br /&gt;
* Linux [http://manuel.kiessling.net/2013/03/19/converting-a-running-physical-machine-to-a-kvm-virtual-machine/ Transfer a running Linux]&lt;br /&gt;
&lt;br /&gt;
== Expand the size of QCOW2 disk ==&lt;br /&gt;
[http://www.naturalborncoder.com/virtualization/2014/12/05/increasing-the-size-of-a-qcow2-image-under-kvm/ Expand the size of a QCOW2 disk image ]&lt;br /&gt;
&lt;br /&gt;
== Shrink a QCOW2 disk ==&lt;br /&gt;
Clear the empty space&lt;br /&gt;
 sudo dd if=/dev/zero of=/zerofile bs=1M&lt;br /&gt;
 sudo rm -f /zerofile&lt;br /&gt;
or&lt;br /&gt;
 sdelete.exe -z C:&lt;br /&gt;
&lt;br /&gt;
Then change the size&lt;br /&gt;
 qemu-img convert -O qcow2 -c input.qcow2 output.qcow2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=426</id>
		<title>Notepad:Samba</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=426"/>
		<updated>2024-02-27T21:09:10Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Samba Set up Active Directory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Samba Set up Single Computer =&lt;br /&gt;
&lt;br /&gt;
== Set up synchronized time ==&lt;br /&gt;
 /etc/ntpd.conf&lt;br /&gt;
&lt;br /&gt;
 service ntpd stop&lt;br /&gt;
 ntpdate time.nist.gov&lt;br /&gt;
 service ntpd.start&lt;br /&gt;
&lt;br /&gt;
== Hostname must contain the proper domain ==&lt;br /&gt;
 /etc/sysconfig/network&lt;br /&gt;
&lt;br /&gt;
 HOSTNAME=xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
You can dynamically change it with&lt;br /&gt;
 hostname xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
=== CentOS 7 ===&lt;br /&gt;
 /etc/hostname contains name&lt;br /&gt;
&lt;br /&gt;
== hosts file MUST list the name different from localhost 127.0.0.1 ==&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1               localhost.localdomain localhost&lt;br /&gt;
 192.168.10.xxx          xxxxxxxx.domain.tld&lt;br /&gt;
 192.168.10.yyy           ad1.domain.tld&lt;br /&gt;
&lt;br /&gt;
== krb5 set up right ==&lt;br /&gt;
 /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
 [logging]&lt;br /&gt;
  default = FILE:/var/log/krb5libs.log&lt;br /&gt;
  kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
  admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
 &lt;br /&gt;
 [libdefaults]&lt;br /&gt;
  default_realm = DOMAIN.TLD&lt;br /&gt;
  dns_lookup_realm = false&lt;br /&gt;
  dns_lookup_kdc = false&lt;br /&gt;
 &lt;br /&gt;
 [realms]&lt;br /&gt;
  DOMAIN.TLD = {&lt;br /&gt;
  kdc = ad1.domain.tld:88&lt;br /&gt;
  admin_server = ad1.domain.tld:749&lt;br /&gt;
  default_domain = domain.tld&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 [domain_realm]&lt;br /&gt;
  .domain.tld = DOMAIN.TLD&lt;br /&gt;
  domain.tld = DOMAIN.TLD&lt;br /&gt;
&lt;br /&gt;
 [kdc]&lt;br /&gt;
  profile = /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
 &lt;br /&gt;
 [appdefaults]&lt;br /&gt;
  pam = {&lt;br /&gt;
    debug = false&lt;br /&gt;
    ticket_lifetime = 36000&lt;br /&gt;
    renew_lifetime = 36000&lt;br /&gt;
    forwardable = true&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Run kinit ==&lt;br /&gt;
  kinit Administrator&lt;br /&gt;
&lt;br /&gt;
== Configure Samba ==&lt;br /&gt;
 /etc/smb.conf&lt;br /&gt;
&lt;br /&gt;
 [global]&lt;br /&gt;
 &lt;br /&gt;
        workgroup = DOMAIN&lt;br /&gt;
        server string = dev01.domain.tld&lt;br /&gt;
        netbios name = dev01&lt;br /&gt;
        hosts allow = 192.168.10.&lt;br /&gt;
 &lt;br /&gt;
        encrypt passwords = yes&lt;br /&gt;
        guest ok = yes&lt;br /&gt;
        winbind enum users = yes&lt;br /&gt;
        winbind enum groups = yes&lt;br /&gt;
        winbind cache time = 10&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        # logs split per machine&lt;br /&gt;
        log file = /var/log/samba/%m.log&lt;br /&gt;
        # max 50KB per log file, then rotate&lt;br /&gt;
        max log size = 50&lt;br /&gt;
 &lt;br /&gt;
        security = ads&lt;br /&gt;
        realm = DOMAIN.TLD&lt;br /&gt;
        client use spnego = yes&lt;br /&gt;
        password server = ad1.domain.tld&lt;br /&gt;
 &lt;br /&gt;
        local master = no&lt;br /&gt;
 ;       os level = 33&lt;br /&gt;
 ;       preferred master = yes&lt;br /&gt;
 &lt;br /&gt;
        wins server = ad1.domain.tld&lt;br /&gt;
 ;       wins proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 ;       dns proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 #============================ Share Definitions ==============================&lt;br /&gt;
 &lt;br /&gt;
   idmap uid = 16777216-33554431&lt;br /&gt;
   idmap gid = 16777216-33554431&lt;br /&gt;
   template shell = /bin/false&lt;br /&gt;
   winbind use default domain = no&lt;br /&gt;
   winbind separator = +&lt;br /&gt;
&lt;br /&gt;
== Join Domain ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
 &lt;br /&gt;
 net ads join -U Administrator&lt;br /&gt;
&lt;br /&gt;
== Modify nsswitch ==&lt;br /&gt;
 /etc/nsswitch.conf &lt;br /&gt;
&lt;br /&gt;
 passwd:     files winbind&lt;br /&gt;
 shadow:     files&lt;br /&gt;
 group:      files winbind&lt;br /&gt;
 protocols:  files winbind&lt;br /&gt;
 rpc:        files winbind&lt;br /&gt;
 services:   files winbind&lt;br /&gt;
&lt;br /&gt;
== Run Services ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
 wbinfo -u&lt;br /&gt;
 wbinfo -g&lt;br /&gt;
 getent passwd&lt;br /&gt;
 getent group&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Jacques Approved !!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Samba Set up Active Directory =&lt;br /&gt;
 apt install samba bind9 winbind bind9utils krb5-user&lt;br /&gt;
&lt;br /&gt;
 /etc/samba/smb.conf&lt;br /&gt;
 # Global parameters&lt;br /&gt;
 [global]&lt;br /&gt;
    netbios name = DNSAD&lt;br /&gt;
    realm = HQ.AMAR.COM&lt;br /&gt;
    server role = active directory domain controller&lt;br /&gt;
    workgroup = AMARHQ&lt;br /&gt;
 &lt;br /&gt;
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate&lt;br /&gt;
    idmap_ldb:use rfc2307 = yes&lt;br /&gt;
    domain master = Yes&lt;br /&gt;
    wins support = Yes&lt;br /&gt;
    # wins server = 192.168.50.112&lt;br /&gt;
  &lt;br /&gt;
  [sysvol]&lt;br /&gt;
    path = /var/lib/samba/sysvol&lt;br /&gt;
    read only = No&lt;br /&gt;
  &lt;br /&gt;
 [netlogon]&lt;br /&gt;
    path = /var/lib/samba/sysvol/hq.amar.com/scripts&lt;br /&gt;
    read only = No&lt;br /&gt;
&lt;br /&gt;
Disable Regular Samba and Enable samba-ad-dc&lt;br /&gt;
 systemctl unmask samba-ad-dc&lt;br /&gt;
 systemctl mask smd&lt;br /&gt;
 systemctl mask smbd&lt;br /&gt;
 systemctl mask nmbdd&lt;br /&gt;
 systemctl mask winbind&lt;br /&gt;
 systemctl mask systemd-resolved&lt;br /&gt;
&lt;br /&gt;
Configure /etc/krb5.com&lt;br /&gt;
 [realms]&lt;br /&gt;
    HQ.AMAR.COM = {&lt;br /&gt;
        kdc = kdc.hq.amar.com&lt;br /&gt;
        kdc = &amp;lt;ip&amp;gt;&lt;br /&gt;
        kdc = 192.168.50.143&lt;br /&gt;
        kdc = 192.168.50.133&lt;br /&gt;
        admin_server = &amp;lt;ip&amp;gt;&lt;br /&gt;
        # kdc.hq.amar.com&lt;br /&gt;
        default_domain = hq.amar.com&lt;br /&gt;
     }&lt;br /&gt;
    &lt;br /&gt;
    [domain_realm]&lt;br /&gt;
        .hq.amar.com = HQ.AMAR.COM&lt;br /&gt;
        hq.amar.com = HQ.AMAR.COM&lt;br /&gt;
&lt;br /&gt;
Extra Directories in /var/cache/bind&lt;br /&gt;
  dynamic&lt;br /&gt;
  stats&lt;br /&gt;
&lt;br /&gt;
{{Notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=425</id>
		<title>Notepad:Samba</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=425"/>
		<updated>2024-02-26T23:09:53Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Samba Set up Active Directory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Samba Set up Single Computer =&lt;br /&gt;
&lt;br /&gt;
== Set up synchronized time ==&lt;br /&gt;
 /etc/ntpd.conf&lt;br /&gt;
&lt;br /&gt;
 service ntpd stop&lt;br /&gt;
 ntpdate time.nist.gov&lt;br /&gt;
 service ntpd.start&lt;br /&gt;
&lt;br /&gt;
== Hostname must contain the proper domain ==&lt;br /&gt;
 /etc/sysconfig/network&lt;br /&gt;
&lt;br /&gt;
 HOSTNAME=xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
You can dynamically change it with&lt;br /&gt;
 hostname xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
=== CentOS 7 ===&lt;br /&gt;
 /etc/hostname contains name&lt;br /&gt;
&lt;br /&gt;
== hosts file MUST list the name different from localhost 127.0.0.1 ==&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1               localhost.localdomain localhost&lt;br /&gt;
 192.168.10.xxx          xxxxxxxx.domain.tld&lt;br /&gt;
 192.168.10.yyy           ad1.domain.tld&lt;br /&gt;
&lt;br /&gt;
== krb5 set up right ==&lt;br /&gt;
 /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
 [logging]&lt;br /&gt;
  default = FILE:/var/log/krb5libs.log&lt;br /&gt;
  kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
  admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
 &lt;br /&gt;
 [libdefaults]&lt;br /&gt;
  default_realm = DOMAIN.TLD&lt;br /&gt;
  dns_lookup_realm = false&lt;br /&gt;
  dns_lookup_kdc = false&lt;br /&gt;
 &lt;br /&gt;
 [realms]&lt;br /&gt;
  DOMAIN.TLD = {&lt;br /&gt;
  kdc = ad1.domain.tld:88&lt;br /&gt;
  admin_server = ad1.domain.tld:749&lt;br /&gt;
  default_domain = domain.tld&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 [domain_realm]&lt;br /&gt;
  .domain.tld = DOMAIN.TLD&lt;br /&gt;
  domain.tld = DOMAIN.TLD&lt;br /&gt;
&lt;br /&gt;
 [kdc]&lt;br /&gt;
  profile = /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
 &lt;br /&gt;
 [appdefaults]&lt;br /&gt;
  pam = {&lt;br /&gt;
    debug = false&lt;br /&gt;
    ticket_lifetime = 36000&lt;br /&gt;
    renew_lifetime = 36000&lt;br /&gt;
    forwardable = true&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Run kinit ==&lt;br /&gt;
  kinit Administrator&lt;br /&gt;
&lt;br /&gt;
== Configure Samba ==&lt;br /&gt;
 /etc/smb.conf&lt;br /&gt;
&lt;br /&gt;
 [global]&lt;br /&gt;
 &lt;br /&gt;
        workgroup = DOMAIN&lt;br /&gt;
        server string = dev01.domain.tld&lt;br /&gt;
        netbios name = dev01&lt;br /&gt;
        hosts allow = 192.168.10.&lt;br /&gt;
 &lt;br /&gt;
        encrypt passwords = yes&lt;br /&gt;
        guest ok = yes&lt;br /&gt;
        winbind enum users = yes&lt;br /&gt;
        winbind enum groups = yes&lt;br /&gt;
        winbind cache time = 10&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        # logs split per machine&lt;br /&gt;
        log file = /var/log/samba/%m.log&lt;br /&gt;
        # max 50KB per log file, then rotate&lt;br /&gt;
        max log size = 50&lt;br /&gt;
 &lt;br /&gt;
        security = ads&lt;br /&gt;
        realm = DOMAIN.TLD&lt;br /&gt;
        client use spnego = yes&lt;br /&gt;
        password server = ad1.domain.tld&lt;br /&gt;
 &lt;br /&gt;
        local master = no&lt;br /&gt;
 ;       os level = 33&lt;br /&gt;
 ;       preferred master = yes&lt;br /&gt;
 &lt;br /&gt;
        wins server = ad1.domain.tld&lt;br /&gt;
 ;       wins proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 ;       dns proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 #============================ Share Definitions ==============================&lt;br /&gt;
 &lt;br /&gt;
   idmap uid = 16777216-33554431&lt;br /&gt;
   idmap gid = 16777216-33554431&lt;br /&gt;
   template shell = /bin/false&lt;br /&gt;
   winbind use default domain = no&lt;br /&gt;
   winbind separator = +&lt;br /&gt;
&lt;br /&gt;
== Join Domain ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
 &lt;br /&gt;
 net ads join -U Administrator&lt;br /&gt;
&lt;br /&gt;
== Modify nsswitch ==&lt;br /&gt;
 /etc/nsswitch.conf &lt;br /&gt;
&lt;br /&gt;
 passwd:     files winbind&lt;br /&gt;
 shadow:     files&lt;br /&gt;
 group:      files winbind&lt;br /&gt;
 protocols:  files winbind&lt;br /&gt;
 rpc:        files winbind&lt;br /&gt;
 services:   files winbind&lt;br /&gt;
&lt;br /&gt;
== Run Services ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
 wbinfo -u&lt;br /&gt;
 wbinfo -g&lt;br /&gt;
 getent passwd&lt;br /&gt;
 getent group&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Jacques Approved !!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Samba Set up Active Directory =&lt;br /&gt;
 apt install samba bind9 winbind bind9utils krb5-user&lt;br /&gt;
&lt;br /&gt;
 /etc/samba/smb.conf&lt;br /&gt;
 # Global parameters&lt;br /&gt;
 [global]&lt;br /&gt;
    netbios name = DNSAD&lt;br /&gt;
    realm = HQ.AMAR.COM&lt;br /&gt;
    server role = active directory domain controller&lt;br /&gt;
    workgroup = AMARHQ&lt;br /&gt;
 &lt;br /&gt;
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate&lt;br /&gt;
    idmap_ldb:use rfc2307 = yes&lt;br /&gt;
    domain master = Yes&lt;br /&gt;
    wins support = Yes&lt;br /&gt;
    # wins server = 192.168.50.112&lt;br /&gt;
  &lt;br /&gt;
  [sysvol]&lt;br /&gt;
    path = /var/lib/samba/sysvol&lt;br /&gt;
    read only = No&lt;br /&gt;
  &lt;br /&gt;
 [netlogon]&lt;br /&gt;
    path = /var/lib/samba/sysvol/hq.amar.com/scripts&lt;br /&gt;
    read only = No&lt;br /&gt;
&lt;br /&gt;
Disable Regular Samba and Enable samba-ad-dc&lt;br /&gt;
 systemctl unmask samba-ad-dc&lt;br /&gt;
 systemctl mask smd&lt;br /&gt;
 systemctl mask smbd&lt;br /&gt;
 systemctl mask nmbdd&lt;br /&gt;
 systemctl mask winbind&lt;br /&gt;
&lt;br /&gt;
Configure /etc/krb5.com&lt;br /&gt;
 [realms]&lt;br /&gt;
    HQ.AMAR.COM = {&lt;br /&gt;
        kdc = kdc.hq.amar.com&lt;br /&gt;
        kdc = &amp;lt;ip&amp;gt;&lt;br /&gt;
        kdc = 192.168.50.143&lt;br /&gt;
        kdc = 192.168.50.133&lt;br /&gt;
        admin_server = &amp;lt;ip&amp;gt;&lt;br /&gt;
        # kdc.hq.amar.com&lt;br /&gt;
        default_domain = hq.amar.com&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
    [domain_realm]&lt;br /&gt;
        .hq.amar.com = HQ.AMAR.COM&lt;br /&gt;
        hq.amar.com = HQ.AMAR.COM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=424</id>
		<title>Notepad:Samba</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=424"/>
		<updated>2024-02-26T22:58:48Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* Samba Set up Active Directory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Samba Set up Single Computer =&lt;br /&gt;
&lt;br /&gt;
== Set up synchronized time ==&lt;br /&gt;
 /etc/ntpd.conf&lt;br /&gt;
&lt;br /&gt;
 service ntpd stop&lt;br /&gt;
 ntpdate time.nist.gov&lt;br /&gt;
 service ntpd.start&lt;br /&gt;
&lt;br /&gt;
== Hostname must contain the proper domain ==&lt;br /&gt;
 /etc/sysconfig/network&lt;br /&gt;
&lt;br /&gt;
 HOSTNAME=xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
You can dynamically change it with&lt;br /&gt;
 hostname xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
=== CentOS 7 ===&lt;br /&gt;
 /etc/hostname contains name&lt;br /&gt;
&lt;br /&gt;
== hosts file MUST list the name different from localhost 127.0.0.1 ==&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1               localhost.localdomain localhost&lt;br /&gt;
 192.168.10.xxx          xxxxxxxx.domain.tld&lt;br /&gt;
 192.168.10.yyy           ad1.domain.tld&lt;br /&gt;
&lt;br /&gt;
== krb5 set up right ==&lt;br /&gt;
 /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
 [logging]&lt;br /&gt;
  default = FILE:/var/log/krb5libs.log&lt;br /&gt;
  kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
  admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
 &lt;br /&gt;
 [libdefaults]&lt;br /&gt;
  default_realm = DOMAIN.TLD&lt;br /&gt;
  dns_lookup_realm = false&lt;br /&gt;
  dns_lookup_kdc = false&lt;br /&gt;
 &lt;br /&gt;
 [realms]&lt;br /&gt;
  DOMAIN.TLD = {&lt;br /&gt;
  kdc = ad1.domain.tld:88&lt;br /&gt;
  admin_server = ad1.domain.tld:749&lt;br /&gt;
  default_domain = domain.tld&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 [domain_realm]&lt;br /&gt;
  .domain.tld = DOMAIN.TLD&lt;br /&gt;
  domain.tld = DOMAIN.TLD&lt;br /&gt;
&lt;br /&gt;
 [kdc]&lt;br /&gt;
  profile = /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
 &lt;br /&gt;
 [appdefaults]&lt;br /&gt;
  pam = {&lt;br /&gt;
    debug = false&lt;br /&gt;
    ticket_lifetime = 36000&lt;br /&gt;
    renew_lifetime = 36000&lt;br /&gt;
    forwardable = true&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Run kinit ==&lt;br /&gt;
  kinit Administrator&lt;br /&gt;
&lt;br /&gt;
== Configure Samba ==&lt;br /&gt;
 /etc/smb.conf&lt;br /&gt;
&lt;br /&gt;
 [global]&lt;br /&gt;
 &lt;br /&gt;
        workgroup = DOMAIN&lt;br /&gt;
        server string = dev01.domain.tld&lt;br /&gt;
        netbios name = dev01&lt;br /&gt;
        hosts allow = 192.168.10.&lt;br /&gt;
 &lt;br /&gt;
        encrypt passwords = yes&lt;br /&gt;
        guest ok = yes&lt;br /&gt;
        winbind enum users = yes&lt;br /&gt;
        winbind enum groups = yes&lt;br /&gt;
        winbind cache time = 10&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        # logs split per machine&lt;br /&gt;
        log file = /var/log/samba/%m.log&lt;br /&gt;
        # max 50KB per log file, then rotate&lt;br /&gt;
        max log size = 50&lt;br /&gt;
 &lt;br /&gt;
        security = ads&lt;br /&gt;
        realm = DOMAIN.TLD&lt;br /&gt;
        client use spnego = yes&lt;br /&gt;
        password server = ad1.domain.tld&lt;br /&gt;
 &lt;br /&gt;
        local master = no&lt;br /&gt;
 ;       os level = 33&lt;br /&gt;
 ;       preferred master = yes&lt;br /&gt;
 &lt;br /&gt;
        wins server = ad1.domain.tld&lt;br /&gt;
 ;       wins proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 ;       dns proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 #============================ Share Definitions ==============================&lt;br /&gt;
 &lt;br /&gt;
   idmap uid = 16777216-33554431&lt;br /&gt;
   idmap gid = 16777216-33554431&lt;br /&gt;
   template shell = /bin/false&lt;br /&gt;
   winbind use default domain = no&lt;br /&gt;
   winbind separator = +&lt;br /&gt;
&lt;br /&gt;
== Join Domain ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
 &lt;br /&gt;
 net ads join -U Administrator&lt;br /&gt;
&lt;br /&gt;
== Modify nsswitch ==&lt;br /&gt;
 /etc/nsswitch.conf &lt;br /&gt;
&lt;br /&gt;
 passwd:     files winbind&lt;br /&gt;
 shadow:     files&lt;br /&gt;
 group:      files winbind&lt;br /&gt;
 protocols:  files winbind&lt;br /&gt;
 rpc:        files winbind&lt;br /&gt;
 services:   files winbind&lt;br /&gt;
&lt;br /&gt;
== Run Services ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
 wbinfo -u&lt;br /&gt;
 wbinfo -g&lt;br /&gt;
 getent passwd&lt;br /&gt;
 getent group&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Jacques Approved !!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Samba Set up Active Directory =&lt;br /&gt;
 apt install samba bind9 winbind bind9utils&lt;br /&gt;
&lt;br /&gt;
 /etc/samba/smb.conf&lt;br /&gt;
 # Global parameters&lt;br /&gt;
 [global]&lt;br /&gt;
    netbios name = DNSAD&lt;br /&gt;
    realm = HQ.AMAR.COM&lt;br /&gt;
    server role = active directory domain controller&lt;br /&gt;
    workgroup = AMARHQ&lt;br /&gt;
 &lt;br /&gt;
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate&lt;br /&gt;
    idmap_ldb:use rfc2307 = yes&lt;br /&gt;
    domain master = Yes&lt;br /&gt;
    wins support = Yes&lt;br /&gt;
    # wins server = 192.168.50.112&lt;br /&gt;
  &lt;br /&gt;
  [sysvol]&lt;br /&gt;
    path = /var/lib/samba/sysvol&lt;br /&gt;
    read only = No&lt;br /&gt;
  &lt;br /&gt;
 [netlogon]&lt;br /&gt;
    path = /var/lib/samba/sysvol/hq.amar.com/scripts&lt;br /&gt;
    read only = No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=423</id>
		<title>Notepad:Samba</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Samba&amp;diff=423"/>
		<updated>2024-02-26T22:57:27Z</updated>

		<summary type="html">&lt;p&gt;Lax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Samba Set up Single Computer =&lt;br /&gt;
&lt;br /&gt;
== Set up synchronized time ==&lt;br /&gt;
 /etc/ntpd.conf&lt;br /&gt;
&lt;br /&gt;
 service ntpd stop&lt;br /&gt;
 ntpdate time.nist.gov&lt;br /&gt;
 service ntpd.start&lt;br /&gt;
&lt;br /&gt;
== Hostname must contain the proper domain ==&lt;br /&gt;
 /etc/sysconfig/network&lt;br /&gt;
&lt;br /&gt;
 HOSTNAME=xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
You can dynamically change it with&lt;br /&gt;
 hostname xxxxxxx.domain.tld&lt;br /&gt;
&lt;br /&gt;
=== CentOS 7 ===&lt;br /&gt;
 /etc/hostname contains name&lt;br /&gt;
&lt;br /&gt;
== hosts file MUST list the name different from localhost 127.0.0.1 ==&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1               localhost.localdomain localhost&lt;br /&gt;
 192.168.10.xxx          xxxxxxxx.domain.tld&lt;br /&gt;
 192.168.10.yyy           ad1.domain.tld&lt;br /&gt;
&lt;br /&gt;
== krb5 set up right ==&lt;br /&gt;
 /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
 [logging]&lt;br /&gt;
  default = FILE:/var/log/krb5libs.log&lt;br /&gt;
  kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
  admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
 &lt;br /&gt;
 [libdefaults]&lt;br /&gt;
  default_realm = DOMAIN.TLD&lt;br /&gt;
  dns_lookup_realm = false&lt;br /&gt;
  dns_lookup_kdc = false&lt;br /&gt;
 &lt;br /&gt;
 [realms]&lt;br /&gt;
  DOMAIN.TLD = {&lt;br /&gt;
  kdc = ad1.domain.tld:88&lt;br /&gt;
  admin_server = ad1.domain.tld:749&lt;br /&gt;
  default_domain = domain.tld&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 [domain_realm]&lt;br /&gt;
  .domain.tld = DOMAIN.TLD&lt;br /&gt;
  domain.tld = DOMAIN.TLD&lt;br /&gt;
&lt;br /&gt;
 [kdc]&lt;br /&gt;
  profile = /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
 &lt;br /&gt;
 [appdefaults]&lt;br /&gt;
  pam = {&lt;br /&gt;
    debug = false&lt;br /&gt;
    ticket_lifetime = 36000&lt;br /&gt;
    renew_lifetime = 36000&lt;br /&gt;
    forwardable = true&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Run kinit ==&lt;br /&gt;
  kinit Administrator&lt;br /&gt;
&lt;br /&gt;
== Configure Samba ==&lt;br /&gt;
 /etc/smb.conf&lt;br /&gt;
&lt;br /&gt;
 [global]&lt;br /&gt;
 &lt;br /&gt;
        workgroup = DOMAIN&lt;br /&gt;
        server string = dev01.domain.tld&lt;br /&gt;
        netbios name = dev01&lt;br /&gt;
        hosts allow = 192.168.10.&lt;br /&gt;
 &lt;br /&gt;
        encrypt passwords = yes&lt;br /&gt;
        guest ok = yes&lt;br /&gt;
        winbind enum users = yes&lt;br /&gt;
        winbind enum groups = yes&lt;br /&gt;
        winbind cache time = 10&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        # logs split per machine&lt;br /&gt;
        log file = /var/log/samba/%m.log&lt;br /&gt;
        # max 50KB per log file, then rotate&lt;br /&gt;
        max log size = 50&lt;br /&gt;
 &lt;br /&gt;
        security = ads&lt;br /&gt;
        realm = DOMAIN.TLD&lt;br /&gt;
        client use spnego = yes&lt;br /&gt;
        password server = ad1.domain.tld&lt;br /&gt;
 &lt;br /&gt;
        local master = no&lt;br /&gt;
 ;       os level = 33&lt;br /&gt;
 ;       preferred master = yes&lt;br /&gt;
 &lt;br /&gt;
        wins server = ad1.domain.tld&lt;br /&gt;
 ;       wins proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 ;       dns proxy = yes&lt;br /&gt;
 &lt;br /&gt;
 #============================ Share Definitions ==============================&lt;br /&gt;
 &lt;br /&gt;
   idmap uid = 16777216-33554431&lt;br /&gt;
   idmap gid = 16777216-33554431&lt;br /&gt;
   template shell = /bin/false&lt;br /&gt;
   winbind use default domain = no&lt;br /&gt;
   winbind separator = +&lt;br /&gt;
&lt;br /&gt;
== Join Domain ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
 &lt;br /&gt;
 net ads join -U Administrator&lt;br /&gt;
&lt;br /&gt;
== Modify nsswitch ==&lt;br /&gt;
 /etc/nsswitch.conf &lt;br /&gt;
&lt;br /&gt;
 passwd:     files winbind&lt;br /&gt;
 shadow:     files&lt;br /&gt;
 group:      files winbind&lt;br /&gt;
 protocols:  files winbind&lt;br /&gt;
 rpc:        files winbind&lt;br /&gt;
 services:   files winbind&lt;br /&gt;
&lt;br /&gt;
== Run Services ==&lt;br /&gt;
restart services to be sure&lt;br /&gt;
 service winbind restart&lt;br /&gt;
 service smb restart&lt;br /&gt;
 service nmb restart&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
 wbinfo -u&lt;br /&gt;
 wbinfo -g&lt;br /&gt;
 getent passwd&lt;br /&gt;
 getent group&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Jacques Approved !!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Samba Set up Active Directory =&lt;br /&gt;
 apt install samba bind9 winbind bind9utils&lt;br /&gt;
&lt;br /&gt;
 /etc/samba/smb.conf&lt;br /&gt;
 # Global parameters&lt;br /&gt;
 [global]&lt;br /&gt;
	netbios name = DNSAD&lt;br /&gt;
	realm = HQ.AMAR.COM&lt;br /&gt;
	server role = active directory domain controller&lt;br /&gt;
	workgroup = AMARHQ&lt;br /&gt;
 &lt;br /&gt;
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate&lt;br /&gt;
    idmap_ldb:use rfc2307 = yes&lt;br /&gt;
	domain master = Yes&lt;br /&gt;
        wins support = Yes&lt;br /&gt;
	# wins server = 192.168.50.112&lt;br /&gt;
  &lt;br /&gt;
  [sysvol]&lt;br /&gt;
	path = /var/lib/samba/sysvol&lt;br /&gt;
	read only = No&lt;br /&gt;
  &lt;br /&gt;
 [netlogon]&lt;br /&gt;
	path = /var/lib/samba/sysvol/hq.amar.com/scripts&lt;br /&gt;
	read only = No&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Notepad&amp;diff=243</id>
		<title>Notepad:Notepad</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Notepad&amp;diff=243"/>
		<updated>2024-02-26T22:52:44Z</updated>

		<summary type="html">&lt;p&gt;Lax: Added samba page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unfiled ==&lt;br /&gt;
* See the whole drive bash tool &lt;br /&gt;
   ncdu&lt;br /&gt;
* [[Notepad:Mac| Mac Tricks]]&lt;br /&gt;
* [[Notepad:Benchmark|Benchmark]]&lt;br /&gt;
* [[Notepad:PIX Capture| PIX Capture]]&lt;br /&gt;
* [http://lythgoes.net/genealogy/software.php genealogy site building]&lt;br /&gt;
* [http://www.ietf.org/rfc/rfc2445.txt iCalendar RFC]&lt;br /&gt;
* [http://resources.hewitt.com/benefits/experian/ Exeprian Benefits]&lt;br /&gt;
* [http://www.getafreelancer.com/ get a freelancer]&lt;br /&gt;
* [http://travel.state.gov/visa/immigrants/types/types_1322.html Visa Lottery]&lt;br /&gt;
* [[Notepad:PHP Test | PHP Test]]&lt;br /&gt;
* [[Notepad:PHP Result | PHP Result]]&lt;br /&gt;
* [[Notepad:favicon | How to set up favicon]]&lt;br /&gt;
* Quicken Payroll : ViewMyPaycheck  Employees Menu &amp;gt; Manage Payroll Cloud Services &amp;gt; CHECK the ViewMyPaycheck box &amp;gt; Enter the PIN &amp;gt; click Save Changes. That&#039;s it!&lt;br /&gt;
* Thunderbird User CSS in userChrome.css (roaming profile)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;css&#039; line&amp;gt;&lt;br /&gt;
 #threadTree treechildren::-moz-tree-row(odd) {&lt;br /&gt;
  -moz-appearance: none !important;&lt;br /&gt;
  background-color: #your_color_here !important; }&lt;br /&gt;
 &lt;br /&gt;
 #threadTree treechildren::-moz-tree-row(odd, selected) {&lt;br /&gt;
  background-color: Highlight !important;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
* [[Notepad:Prevent Reboots|Prevent Reboots]]&lt;br /&gt;
* [http://softwarepatch.com/windows/ The Windows Update Patch]&lt;br /&gt;
* [[Notepad:Wrap up background Tasks|Wrap up background Tasks]]&lt;br /&gt;
* [[Notepad:WindowsTime Windows Time Service and Internet Communications]]&lt;br /&gt;
* [http://www.enterprisenetworkingplanet.com/netos/article.php/3487081 Join Samba 3 to your Active Directory Domain]&lt;br /&gt;
* [http://kb.mozillazine.org/Windows_Media_Player#Missing_plugin Missing Media Player in Vista/Firefox]&lt;br /&gt;
* [http://blogs.zdnet.com/Bott/?p=224 rearm Vista] &amp;lt;code&amp;gt;slmgr.vbs -rearm&amp;lt;/code&amp;gt;&lt;br /&gt;
* [http://www.microsoft.com/technet/security/advisory/935964.mspx Windows DNS security hack]&lt;br /&gt;
* [http://support.microsoft.com/kb/932818 Media Center patch for Vista]&lt;br /&gt;
* [http://www.microsoft.com/technet/sysinternals/default.mspx Sysinternals for windows]&lt;br /&gt;
* [http://www.microsoft.com/whdc/devtools/debugging/default.mspx Debugging Tools for Windows]&lt;br /&gt;
* [http://www.nobodix.org/seb/win2003_adminpass.html How to reset the Domain Admin Password under Windows 2003 Server]&lt;br /&gt;
* [http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/ Install Windows 7 on USB]&lt;br /&gt;
* [[Notepad:Rejoin Domain]]&lt;br /&gt;
* [[Notepad:Enable Num Lock]]&lt;br /&gt;
* [https://superuser.com/questions/1060567/cpu-constantly-at-100-in-task-manager-but-not-in-process-explorer/1061436#1061436 Task Manager at 100% ]&lt;br /&gt;
 C:\WINDOWS\system32&amp;gt;PowerCfg /SETACVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR IDLEDISABLE 000&lt;br /&gt;
 C:\WINDOWS\system32&amp;gt;PowerCfg /SETACTIVE SCHEME_CURRENT&lt;br /&gt;
* [https://www.tenforums.com/tutorials/80520-enable-disable-domain-users-sign-pin-windows-10-a.html Disable PIN and enable fingerprint for domain]&lt;br /&gt;
* [[Notepad::Prepare AD for windows 2012]]&lt;br /&gt;
* DISM Cleanup&lt;br /&gt;
  DISM /Online /Cleanup-Image /RestoreHealth /source:WIM:F:\Sources\Install.wim:1 /LimitAccess &lt;br /&gt;
  DISM /Online /Cleanup-Image /RestoreHealth /source:F:\sources /LimitAccess&lt;br /&gt;
* [https://www.nartac.com/Products/IISCrypto/Download SSL Security Best Practices Nartac IISCrypto]&lt;br /&gt;
* [https://www.windowscentral.com/how-fix-mapped-network-drive-problem-windows-10-october-2018-update Fix Mapped Network Drive Disconnect]&lt;br /&gt;
* [[Notepad:Fix Windows Directory Permissions]]&lt;br /&gt;
&lt;br /&gt;
== URLs ==&lt;br /&gt;
* [[Notepad:Ajax|Ajax Howto]]&lt;br /&gt;
* [http://everything2.com/index.pl?node=Special%20Alt%20key%20characters%20%26%20accents Special Alt Keys &amp;amp; Accents]&lt;br /&gt;
* [http://scoreboard.keynote.com/scoreboard/Main.aspx?Login=Y&amp;amp;Username=public&amp;amp;Password=public Keynote Internet Health Report]&lt;br /&gt;
* [http://www.globalwholesalers.biz/ Global Wholesalers Sattelite]&lt;br /&gt;
* [http://f2atv.com F2 ATV Sat code]&lt;br /&gt;
* [http://www.simonshepherd.supanet.com/tea.htm The Tiny Encryption Algorithm (TEA)]&lt;br /&gt;
* [[Notepad:Water Cooling|Water Cooling]]&lt;br /&gt;
* [https://developer.motorola.com/docstools/USB_Drivers/Handset_USB_Driver/ Motorola USB drivers]&lt;br /&gt;
* [https://www.ssllabs.com/ssltest/index.html SSL Labs SSL cert check]&lt;br /&gt;
* [https://dnssec-analyzer.verisignlabs.com/ DNSSEC Analyzer]&lt;br /&gt;
* [https://dns.google.com/query?type=A&amp;amp;dnssec=true Google DNS test]&lt;br /&gt;
&lt;br /&gt;
== Linux Tricks ==&lt;br /&gt;
Linux stuff I often have to lookup. Just my personal list of things.&lt;br /&gt;
&lt;br /&gt;
*[[Notepad:Linux | Linux Tips and Tricks]]&lt;br /&gt;
&lt;br /&gt;
== MySQL ==&lt;br /&gt;
* [[Notepad:UTF8|UTF8 ]]&lt;br /&gt;
* Get a list of processes to kill&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&#039;SQL&#039; line&amp;gt;&lt;br /&gt;
 SELECT GROUP_CONCAT(CONCAT(&#039;KILL &#039;,id,&#039;;&#039;) SEPARATOR &#039; &#039;) &lt;br /&gt;
 &#039;Paste the following query to kill all processes&#039; &lt;br /&gt;
 FROM information_schema.processlist &lt;br /&gt;
 WHERE user&amp;lt;&amp;gt;&#039;system user&#039;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install latest MariaDB&lt;br /&gt;
 curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash&lt;br /&gt;
&lt;br /&gt;
* Move/Rename a DB to another&lt;br /&gt;
 mysql -u username -ppassword old_db -sNe &#039;show tables&#039; | while read table; \ &lt;br /&gt;
    do mysql -u username -ppassword -sNe &amp;quot;rename table old_db.$table to new_db.$table&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
* database dump without charset&lt;br /&gt;
   mysqldump -u &amp;lt;user&amp;gt; -p --skip-add-locks --skip-set-charset &amp;lt;DB&amp;gt; &amp;lt;tables ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Disable foreign key checks in a session&lt;br /&gt;
 SET FOREIGN_KEY_CHECKS=0;&lt;br /&gt;
&lt;br /&gt;
== SSL Certificates ==&lt;br /&gt;
* [[Notepad:SSL|SSL Certificates]]&lt;br /&gt;
&lt;br /&gt;
== Version Control ==&lt;br /&gt;
* [http://www.sbf5.com/~cduan/technical/git/ Understanding git conceptually]&lt;br /&gt;
* [[Notepad:SVN Create| SVN Create New Repository with branches]]&lt;br /&gt;
* make a file executable in git (+x)&lt;br /&gt;
   git update-index --chmod=+x filename.sh&lt;br /&gt;
&lt;br /&gt;
== Oracle ==&lt;br /&gt;
* [[Notepad:Oracle Build Custom Aggregate Function|Oracle Build Custom Aggregate Function]]&lt;br /&gt;
* [[Notepad:Oracle Timer|Oracle Timer]]&lt;br /&gt;
* [http://www.jlcomp.demon.co.uk/faq/pin_table.html Oracle Pin in memory]&lt;br /&gt;
* [http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:1353453813863 Oracle View Performance]&lt;br /&gt;
* [[Notepad:Oracle Pagination|Oracle Pagination]]&lt;br /&gt;
&lt;br /&gt;
== SC Backup ==&lt;br /&gt;
*[[Notepad:Dell OpenManage | Dell Openmanage Install]]&lt;br /&gt;
&lt;br /&gt;
== KVM ==&lt;br /&gt;
*[[Notepad:KVM | KVM]]&lt;br /&gt;
* [https://computingforgeeks.com/how-to-convert-virtualbox-disk-image-vdi-and-img-to-qcow2-format/ How to convert virtualbox disk image vdi and img to qcow2 format]&lt;br /&gt;
&lt;br /&gt;
== QNAP ==&lt;br /&gt;
*[[Notepad:QNAP | QNAP]]&lt;br /&gt;
&lt;br /&gt;
== Zend Framework ==&lt;br /&gt;
* [[Notepad:Zend Setup]]&lt;br /&gt;
&lt;br /&gt;
== Video ffmpeg ==&lt;br /&gt;
Convert wmv to mp4&lt;br /&gt;
 &#039;&#039;&#039;ffmpeg&#039;&#039;&#039; -i &#039;&#039;&amp;lt;input&amp;gt;&#039;&#039; -c:v libx264 -c:a aac -strict -2 -q:a 100 -crf 23 &#039;&#039;&amp;lt;output&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zimbra ==&lt;br /&gt;
* [https://lorenzo.mile.si/letsencrypt-zimbra-the-easy-way/242/ Automatic Zimbra certbot]&lt;br /&gt;
* [https://wiki.zimbra.com/wiki/Installing_a_LetsEncrypt_SSL_Certificate Zimbra letsencrypt]&lt;br /&gt;
* [https://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing Zimbra DKIM]&lt;br /&gt;
* [https://gist.github.com/ugurerkan/6e9e3addf9a574ad0c57039164570e6f Zimbra Letsencrypt SSL Renew]&lt;br /&gt;
* [[Notepad:Zimbra Zimbra Let&#039;s encrypt | Zimbra Let&#039;s encrypt ]]&lt;br /&gt;
* [https://community.letsencrypt.org/t/zimbra-renewal-problems-with-r3/160842/38 Zombra renewal - Problems with R3]&lt;br /&gt;
Working with the following for chain.pem:&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw&lt;br /&gt;
 WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg&lt;br /&gt;
 RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK&lt;br /&gt;
 AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP&lt;br /&gt;
 R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx&lt;br /&gt;
 sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm&lt;br /&gt;
 NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg&lt;br /&gt;
 Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG&lt;br /&gt;
 /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC&lt;br /&gt;
 AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB&lt;br /&gt;
 Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA&lt;br /&gt;
 FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw&lt;br /&gt;
 AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw&lt;br /&gt;
 Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB&lt;br /&gt;
 gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W&lt;br /&gt;
 PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl&lt;br /&gt;
 ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz&lt;br /&gt;
 CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm&lt;br /&gt;
 lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4&lt;br /&gt;
 avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2&lt;br /&gt;
 yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O&lt;br /&gt;
 yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids&lt;br /&gt;
 hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+&lt;br /&gt;
 HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv&lt;br /&gt;
 MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX&lt;br /&gt;
 nLRbwHOoq7hHwg==&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 &lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw&lt;br /&gt;
 TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh&lt;br /&gt;
 cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4&lt;br /&gt;
 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu&lt;br /&gt;
 ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY&lt;br /&gt;
 MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc&lt;br /&gt;
 h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+&lt;br /&gt;
 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U&lt;br /&gt;
 A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW&lt;br /&gt;
 T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH&lt;br /&gt;
 B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC&lt;br /&gt;
 B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv&lt;br /&gt;
 KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn&lt;br /&gt;
 OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn&lt;br /&gt;
 jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw&lt;br /&gt;
 qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI&lt;br /&gt;
 rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV&lt;br /&gt;
 HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq&lt;br /&gt;
 hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL&lt;br /&gt;
 ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ&lt;br /&gt;
 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK&lt;br /&gt;
 NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5&lt;br /&gt;
 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur&lt;br /&gt;
 TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC&lt;br /&gt;
 jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc&lt;br /&gt;
 oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq&lt;br /&gt;
 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA&lt;br /&gt;
 mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d&lt;br /&gt;
 emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
== AWS ==&lt;br /&gt;
* [https://blog.alejandrocelaya.com/2016/08/16/setup-a-lets-encrypt-certificate-in-a-aws-elastic-load-balancer/ AWS Letsencrypt Manual Setup]&lt;br /&gt;
** Load balance instances to 1&lt;br /&gt;
** Generate new cert&lt;br /&gt;
 letsencrypt certonly --webroot -w /var/www/mydomain -d mydomain.com -d www.mydomain.com -w /var/www/cool-site -d cool-site.com -d www.cool-site.com&lt;br /&gt;
** deploy new cert to all&lt;br /&gt;
** upload into AWS *Load Balance* *Listeners* *SSL Certificate* (We get a weird error but it works)&lt;br /&gt;
** Load balance instances back to all&lt;br /&gt;
&lt;br /&gt;
== [[Notepad:Hackintosh | Hackintosh Tricks]] ==&lt;br /&gt;
&lt;br /&gt;
== [[Notepad:Samba | Samba/Active Directory/Bind]] ==&lt;br /&gt;
&lt;br /&gt;
== Firefox ==&lt;br /&gt;
=== [http://about:config about:config] ===&lt;br /&gt;
 layout.css.devPixelsPerPx&lt;br /&gt;
to set the textsize on high res displays&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://blog.scottlowe.org/2021/06/28/using-wireguard-on-mac-via-cli/ Using WireGuard on macOS via the CLI]&lt;br /&gt;
* [https://blog.scottlowe.org/2021/08/04/starting-wireguard-interfaces-automatically-launchd-macos/ Starting Wiguard Automatically on a Mac]&lt;br /&gt;
&lt;br /&gt;
=== [https://serverfault.com/questions/1013535/unable-to-configure-wireguard-to-use-secondary-ip-address-instead-of-main-ip-add Wireguard using a secondary interface with iptables help] ===&lt;br /&gt;
&lt;br /&gt;
=== IP link example ===&lt;br /&gt;
 ip link add wgpillgram type wireguard&lt;br /&gt;
 wg setconf wgpillgram /dev/fd/63&lt;br /&gt;
 ip -4 address add 172.26.27.1/24 dev wgpillgram&lt;br /&gt;
 ip link set mtu 1420 up dev wgpillgram&lt;br /&gt;
 ip -4 route add 10.26.27.5/32 dev wgpillgram&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
{{wiki}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=618</id>
		<title>Notepad:Hackintosh</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=618"/>
		<updated>2023-12-11T19:46:52Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* General */ Force Sleep&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* Fix UFI Partition Error&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fsck_msdos disk0s1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://github.com/CloverHackyColor/CloverBootloader/releases Clover Releases]&lt;br /&gt;
* [https://github.com/jerw84/Z87-D3H Switch from Clover to OpenCore]&lt;br /&gt;
* [https://www.howtogeek.com/302942/how-to-figure-out-whats-preventing-your-mac-from-sleeping/ How to tell what&#039;s preventing sleep]&lt;br /&gt;
 pmset -g assertions&lt;br /&gt;
* [https://www.google.com/search?client=firefox-b-1-d&amp;amp;q=clover+5122+to+5126 Clover 5122 to 5126]&lt;br /&gt;
These are the steps&lt;br /&gt;
# replacing the drivers &amp;gt; UEFI &amp;gt; AptioMemoryFix.efi with OpenRuntime.efi&lt;br /&gt;
# Also, add OcQuirk.efi (More Info: https://github.com/ReddestDream/OcQuirks)&lt;br /&gt;
# select: config.plist/Quirks &amp;gt; DisableIoMapper&lt;br /&gt;
= XQuartz Menu Change = &lt;br /&gt;
  defaults write org.xquartz.X11 apps_menu     &#039;( &lt;br /&gt;
                ( &lt;br /&gt;
            Terminal, &lt;br /&gt;
            xterm, &lt;br /&gt;
            n &lt;br /&gt;
        ), &lt;br /&gt;
                ( &lt;br /&gt;
            xman, &lt;br /&gt;
            xman, &lt;br /&gt;
            &amp;quot;&amp;quot; &lt;br /&gt;
        ), &lt;br /&gt;
                ( &lt;br /&gt;
            xlogo, &lt;br /&gt;
            xlogo, &lt;br /&gt;
            &amp;quot;&amp;quot; &lt;br /&gt;
        ) &lt;br /&gt;
    )&#039;&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
List all network hardware&lt;br /&gt;
   networksetup -listallhardwareports&lt;br /&gt;
= 10Gbe Aquantia Fixes =&lt;br /&gt;
* [https://github.com/CaseySJ/Aquantia-macOS-Patches CaseyJ 10Gbe pacthes -&amp;gt; working!]&lt;br /&gt;
* 10GbE Support [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/ Marvel Aquantia 10GBE patch ]&lt;br /&gt;
 Kext to patch&lt;br /&gt;
 com.apple.driver.AppleEthernetAquantiaAqtion&lt;br /&gt;
 &lt;br /&gt;
 Find&lt;br /&gt;
 41C70424 00000000 E9&lt;br /&gt;
 &lt;br /&gt;
 Replace&lt;br /&gt;
 41C70424 01000000 E9&lt;br /&gt;
 &lt;br /&gt;
 comment&lt;br /&gt;
 Marvell AQC107 10GBE Patch&lt;br /&gt;
&lt;br /&gt;
* Monterey 10GBE Patch by Mieze [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/page/15/?tab=comments#comment-2760408 Monterey Patch by Mieze]&lt;br /&gt;
We&#039;ve got to modify the patch. &lt;br /&gt;
 You need to find&lt;br /&gt;
 41 c7 45 00 00 00 00 00 e9&lt;br /&gt;
 &lt;br /&gt;
 and replace it with&lt;br /&gt;
 41 c7 45 00 01 00 00 00 e9&lt;br /&gt;
&lt;br /&gt;
== Sleep ==&lt;br /&gt;
From : [https://www.tonymacx86.com/threads/asus-z690-proart-creator-wifi-thunderbolt-4-i7-12700k-amd-rx-6800-xt.318311/ z690 OC]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pmset -a hibernatemode 0 standby 0 autopoweroff 0&amp;lt;/code&amp;gt;{{notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=617</id>
		<title>Notepad:Hackintosh</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=617"/>
		<updated>2023-12-06T20:27:25Z</updated>

		<summary type="html">&lt;p&gt;Lax: /* General */ XQUartz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* Fix UFI Partition Error&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fsck_msdos disk0s1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://github.com/CloverHackyColor/CloverBootloader/releases Clover Releases]&lt;br /&gt;
* [https://github.com/jerw84/Z87-D3H Switch from Clover to OpenCore]&lt;br /&gt;
* [https://www.howtogeek.com/302942/how-to-figure-out-whats-preventing-your-mac-from-sleeping/ How to tell what&#039;s preventing sleep]&lt;br /&gt;
 pmset -g assertions&lt;br /&gt;
* [https://www.google.com/search?client=firefox-b-1-d&amp;amp;q=clover+5122+to+5126 Clover 5122 to 5126]&lt;br /&gt;
These are the steps&lt;br /&gt;
# replacing the drivers &amp;gt; UEFI &amp;gt; AptioMemoryFix.efi with OpenRuntime.efi&lt;br /&gt;
# Also, add OcQuirk.efi (More Info: https://github.com/ReddestDream/OcQuirks)&lt;br /&gt;
# select: config.plist/Quirks &amp;gt; DisableIoMapper&lt;br /&gt;
= XQuartz Menu Change = &lt;br /&gt;
  defaults write org.xquartz.X11 apps_menu     &#039;( &lt;br /&gt;
                ( &lt;br /&gt;
            Terminal, &lt;br /&gt;
            xterm, &lt;br /&gt;
            n &lt;br /&gt;
        ), &lt;br /&gt;
                ( &lt;br /&gt;
            xman, &lt;br /&gt;
            xman, &lt;br /&gt;
            &amp;quot;&amp;quot; &lt;br /&gt;
        ), &lt;br /&gt;
                ( &lt;br /&gt;
            xlogo, &lt;br /&gt;
            xlogo, &lt;br /&gt;
            &amp;quot;&amp;quot; &lt;br /&gt;
        ) &lt;br /&gt;
    )&#039;&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
List all network hardware&lt;br /&gt;
   networksetup -listallhardwareports&lt;br /&gt;
= 10Gbe Aquantia Fixes =&lt;br /&gt;
* [https://github.com/CaseySJ/Aquantia-macOS-Patches CaseyJ 10Gbe pacthes -&amp;gt; working!]&lt;br /&gt;
* 10GbE Support [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/ Marvel Aquantia 10GBE patch ]&lt;br /&gt;
 Kext to patch&lt;br /&gt;
 com.apple.driver.AppleEthernetAquantiaAqtion&lt;br /&gt;
 &lt;br /&gt;
 Find&lt;br /&gt;
 41C70424 00000000 E9&lt;br /&gt;
 &lt;br /&gt;
 Replace&lt;br /&gt;
 41C70424 01000000 E9&lt;br /&gt;
 &lt;br /&gt;
 comment&lt;br /&gt;
 Marvell AQC107 10GBE Patch&lt;br /&gt;
&lt;br /&gt;
* Monterey 10GBE Patch by Mieze [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/page/15/?tab=comments#comment-2760408 Monterey Patch by Mieze]&lt;br /&gt;
We&#039;ve got to modify the patch. &lt;br /&gt;
 You need to find&lt;br /&gt;
 41 c7 45 00 00 00 00 00 e9&lt;br /&gt;
 &lt;br /&gt;
 and replace it with&lt;br /&gt;
 41 c7 45 00 01 00 00 00 e9&lt;br /&gt;
&lt;br /&gt;
{{notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
	<entry>
		<id>https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=616</id>
		<title>Notepad:Hackintosh</title>
		<link rel="alternate" type="text/html" href="https://wiki.amar.com/index.php?title=Notepad:Hackintosh&amp;diff=616"/>
		<updated>2023-12-02T22:07:19Z</updated>

		<summary type="html">&lt;p&gt;Lax: Network&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* Fix UFI Partition Error&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fsck_msdos disk0s1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* [https://github.com/CloverHackyColor/CloverBootloader/releases Clover Releases]&lt;br /&gt;
* [https://github.com/jerw84/Z87-D3H Switch from Clover to OpenCore]&lt;br /&gt;
* [https://www.howtogeek.com/302942/how-to-figure-out-whats-preventing-your-mac-from-sleeping/ How to tell what&#039;s preventing sleep]&lt;br /&gt;
 pmset -g assertions&lt;br /&gt;
* [https://www.google.com/search?client=firefox-b-1-d&amp;amp;q=clover+5122+to+5126 Clover 5122 to 5126]&lt;br /&gt;
These are the steps&lt;br /&gt;
# replacing the drivers &amp;gt; UEFI &amp;gt; AptioMemoryFix.efi with OpenRuntime.efi&lt;br /&gt;
# Also, add OcQuirk.efi (More Info: https://github.com/ReddestDream/OcQuirks)&lt;br /&gt;
# select: config.plist/Quirks &amp;gt; DisableIoMapper&lt;br /&gt;
= Networking =&lt;br /&gt;
List all network hardware&lt;br /&gt;
   networksetup -listallhardwareports&lt;br /&gt;
= 10Gbe Aquantia Fixes =&lt;br /&gt;
* [https://github.com/CaseySJ/Aquantia-macOS-Patches CaseyJ 10Gbe pacthes -&amp;gt; working!]&lt;br /&gt;
* 10GbE Support [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/ Marvel Aquantia 10GBE patch ]&lt;br /&gt;
 Kext to patch&lt;br /&gt;
 com.apple.driver.AppleEthernetAquantiaAqtion&lt;br /&gt;
 &lt;br /&gt;
 Find&lt;br /&gt;
 41C70424 00000000 E9&lt;br /&gt;
 &lt;br /&gt;
 Replace&lt;br /&gt;
 41C70424 01000000 E9&lt;br /&gt;
 &lt;br /&gt;
 comment&lt;br /&gt;
 Marvell AQC107 10GBE Patch&lt;br /&gt;
&lt;br /&gt;
* Monterey 10GBE Patch by Mieze [https://www.insanelymac.com/forum/topic/330614-marvell-aquantia-10-gb-ethernet-support-thread/page/15/?tab=comments#comment-2760408 Monterey Patch by Mieze]&lt;br /&gt;
We&#039;ve got to modify the patch. &lt;br /&gt;
 You need to find&lt;br /&gt;
 41 c7 45 00 00 00 00 00 e9&lt;br /&gt;
 &lt;br /&gt;
 and replace it with&lt;br /&gt;
 41 c7 45 00 01 00 00 00 e9&lt;br /&gt;
&lt;br /&gt;
{{notepad}}&lt;/div&gt;</summary>
		<author><name>Lax</name></author>
	</entry>
</feed>