[Samsung Galaxy S 5 Unified Development] O_oaa:
Now that I'm fairly confident I understand how the NextRadio app is able to utilize the FM capabilities on stock for the G900P, I wanted to document my findings. For brevity, I have to keep most of these steps/information at a high-level, so getting through them is an exercise for the reverse engineer.

1) The NextRadio app utilizes classes in the /system/framework/nextradio.jar, namely org.nablabs.libFmRadioImpl.FmRadio (NextRadio probaby used the PILOT SDK and gave the JAR to Samsung/Sprint to put in the stock images or Samsung/Sprint did the work).

2) This code invokes another class, com.samsungframeworks.media.fmradio.FMRadioImpl in the same JAR which interfaces with the FMPlayer service.

3) The FMPlayer service is implemented in /system/framework/framework.jar:classes3.dex as com.samsung.media.fmradio.FMPlayer.

4) The service is started by a custom android.app.SystemServiceRegistry in /system/framework/framework.jar.

5) When the FMPlayer service is started, it gets a handle on the com.samsung.media.fmradio.internal.IFMPlayer remote interface using IFMPlayer.Stub.asInterface(ServiceManager.getService("FMPlayer")).

6) The remote interface is implemented in /system/framework/framework.jar:classes2.dex as com.android.server.FMRadioService (it extends the Stub) and performs multiple tasks such as working with the AudioManager to set audio/volume states, registering various intents, wakelocks, power manager, and creating/utilizing FMPlayerNative (same package).

7) FMPlayerNative translates all of the previous FM-related stack/method calls into calls to the actual FM functions on the Broadcomm chip through another remote interface com.broadcom.fm.fmreceiver.IFmReceiverService in the same JAR.

8) From here, I don't know where the remote interface is implemented. I've searched all throughout /system without much success using the current set of skills I've learned in this endeavor, however...

9) The adb logs show FmServiceJni logs directly after FMPlayerNative logs which appears to be implemented in /system/lib/libbluetooth_jni.so. Now we're getting into kernel-land, and I don't know much about kernel development - yet.

I'd like to know how the remote interface is implemented/instantiated, but I'm sure in the end it'll lead to the FmServiceJni implemented in the libbluetooth_jni.so library.

Now that I think I've documented everything, at least from a platform perspective up to the kernel shared library, it seems there's a lot of work that would be necessary to get this working in Lineage. Maintainers with more experience please correct me if I'm wrong, but simply reverse engineering the kernel library isn't enough but also need to work in the platform changes necessary to get the power management, audio controls, etc. working with the kernel calls. I'm willing to try working on these things, but those types of changes are outside of my current level of Android development.

EDIT: So, I decided to go back and take a closer look at some of mikereidis's work, and digging through the Spirit1/2 general thread, I find this post about "bplus". [MENTION=3275672]shantur[/MENTION] linked to a github query which appears to contain repos with source code all the way down to an adapter that appears to call native methods in libbluetooth_jni.so (not 100% sure, still new at this)! This is certainly a welcome find. Now I find new information like repo named android_hardware_broadcom_fmradio and V4L2 functionality... lots of new information. Just wanted to share.

EDIT2: Checking out the current code available in the Lineage baseline to see if all the components are already there and just need to be configured.