Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Mar 2017 18:38:51 -0300
From:      "Dr. Rolf Jansen" <rj@obsigna.com>
To:        freebsd-arm@FreeBSD.org
Subject:   Re: Enabling ADC on a Beaglebone Black running FreeBSD 12.0-CURRENT (BEAGLEBONE)
Message-ID:  <271AFD8F-BD2C-445C-AB95-D7D07593E487@obsigna.com>
In-Reply-To: <0C4DCBB9-2642-4B0F-B15B-4139D5D8B249@obsigna.com>
References:  <0C4DCBB9-2642-4B0F-B15B-4139D5D8B249@obsigna.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Am 12.03.2017 um 10:57 schrieb Dr. Rolf Jansen <rj@obsigna.com>:

> I experience problems to enable the ADC line of my BBB.
>=20
> Apparently, in FreeBSD 10, the ADC lines would have been enabled by a =
sysctl call:
>=20
>   sysctl dev.ti_adc.0.ain.0.enable=3D1
>=20
>=20
> On FreeBSD 12, this gives:
>=20
>   sysctl: unknown oid 'dev.ti_adc.0.ain.0.enable'
>=20
>=20
> I thought, perhaps the driver has not been loaded into the kernel, =
but:
>=20
>   kldload ti_adc
>   ....
>   kldload: can't load ti_adc: module already loaded or in kernel
>=20
>=20
> Question:
>=20
> What do I need to get the ADC working with FreeBSD 12?

I am answering my own question.

The ADC is disabled in the respective device tree file =
am335x-boneblack.dtb. In order to enable the it, I did:

1. decompile the device tree blob (.dtb) into a device tree source file =
(.dts):

   cd /boot/dtb
   dtc -I dtb -O dts am335x-boneblack.dtb > am335x-boneblack.dts


2. edit the .dts file, and change the entry for tscadc to the following:

		tscadc@44e0d000 {
			compatible =3D "ti,am3359-tscadc";
			reg =3D <0x44e0d000 0x1000>;
			interrupt-parent =3D <0x1>;
			interrupts =3D <0x10>;
			ti,hwmods =3D "adc_tsc";
			status =3D "okay";
			dmas =3D <0x29 0x35 0x0 0x29 0x39 0x0>;
			dma-names =3D "fifo0", "fifo1";

			tsc {
				compatible =3D "ti,am3359-tsc";
			};

			adc {
				#io-channel-cells =3D <0x1>;
				compatible =3D "ti,am3359-adc";
				ti,adc-channels =3D <0 1 2 3 4 5 6>;
			};
		};

ActualLy I changed the status from "disabled" to "okay" and I added the =
ti,adc-channels descriptor to the adc section.

3. save the original DTB and compile the DTS:

   mv am335x-boneblack.dtb am335x-boneblack.dtb.orig
   dtc -O dtb -o am335x-boneblack.dtb -b 0 am335x-boneblack.dts

4. restart

5. check it:

   sysctl dev.ti_adc
   ....
   dev.ti_adc.0.ain.6.input: 0
   dev.ti_adc.0.ain.6.samples_avg: 0
   dev.ti_adc.0.ain.6.open_delay: 0
   dev.ti_adc.0.ain.6.enable: 0
   dev.ti_adc.0.ain.5.input: 0
   dev.ti_adc.0.ain.5.samples_avg: 0
   dev.ti_adc.0.ain.5.open_delay: 0
   dev.ti_adc.0.ain.5.enable: 0
   dev.ti_adc.0.ain.4.input: 0
   dev.ti_adc.0.ain.4.samples_avg: 0
   dev.ti_adc.0.ain.4.open_delay: 0
   dev.ti_adc.0.ain.4.enable: 0
   dev.ti_adc.0.ain.3.input: 0
   dev.ti_adc.0.ain.3.samples_avg: 0
   dev.ti_adc.0.ain.3.open_delay: 0
   dev.ti_adc.0.ain.3.enable: 0
   dev.ti_adc.0.ain.2.input: 0
   dev.ti_adc.0.ain.2.samples_avg: 0
   dev.ti_adc.0.ain.2.open_delay: 0
   dev.ti_adc.0.ain.2.enable: 0
   dev.ti_adc.0.ain.1.input: 0
   dev.ti_adc.0.ain.1.samples_avg: 0
   dev.ti_adc.0.ain.1.open_delay: 0
   dev.ti_adc.0.ain.1.enable: 0
   dev.ti_adc.0.ain.0.input: 3071
   dev.ti_adc.0.ain.0.samples_avg: 0
   dev.ti_adc.0.ain.0.open_delay: 0
   dev.ti_adc.0.ain.0.enable: 1
   dev.ti_adc.0.clockdiv: 2400
   dev.ti_adc.0.%parent: simplebus0
   dev.ti_adc.0.%pnpinfo: name=3Dtscadc@44e0d000 compat=3Dti,am3359-tscadc=

   dev.ti_adc.0.%location:=20
   dev.ti_adc.0.%driver: ti_adc
   dev.ti_adc.0.%desc: TI ADC controller
   dev.ti_adc.%parent:=20

I can enable the ADC channels, and when connecting a 1002 mV DC source =
to AIN0 the reading was 2279, which is perfectly in line with =
1002*4095/1800 =3D 2279.55.

Best regards

Rolf=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?271AFD8F-BD2C-445C-AB95-D7D07593E487>