What to do to remove the BT4 dongle?

Search This thread

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
@shabbypenguin @mad cat rich, @Mad Catz Nate
Guys, any chance of a work around for getting the inbuild BT4 HW working on android 4.2.2?
Did a google search found:
http://xdaforums.com/showthread.php?t=2492436
Don't worry, "Minumum Android 4.3 version required!"
Two usb ports, but we can only use one is a bit :mad: :laugh:


Info:
http://stackoverflow.com/questions/20332277/bluetooth-low-energy-api-for-jelly-bean-4-2
"Android's SDK doesn't have support for BLE prior to 4.3.
Third party libraries can enable BLE on Android 4.2 and lower where the device's hardware supports BLE,
such as on Samsung's S III, 4 and Note 2 and on the HTC One.

I only have experience using Samsung's SDK on 4.2 (which is now deprecated), so I can't really help you further.
I can't reiterate enough-- there is no standard BLE support on Android 4.2 and lower.
You'll need to use third party solutions on a per-device basis."
 
Last edited:

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
reading up on that link doesnt show promise for 4.2 :(

ive been trying to get a custom recovery going so i could begin work on an aosp based rom, many of the "bugs" with the stock rom could then be fixed and people might start picking this up if it had support. i have kernel source downloaded and have been meaning to try out a custom kernel but i still havent even gotten a custom recovery booting. it doesnt appear they use a DTB file, so i believe my boot.img is packed correctly, yet all i get is a black screen. seeing as there hasnt been an update to the kernel source i dont expect much in terms of support, especially considering ive now asked multiple places and mad catz hasnt replied to any of my questions, it seems if i couldnt figure out how to pair my controller or turn the volume up i could get some answers but not if i have dev related questions :/.
 

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
reading up on that link doesnt show promise for 4.2 :(

ive been trying to get a custom recovery going so i could begin work on an aosp based rom, many of the "bugs" with the stock rom could then be fixed and people might start picking this up if it had support. i have kernel source downloaded and have been meaning to try out a custom kernel but i still havent even gotten a custom recovery booting. it doesnt appear they use a DTB file, so i believe my boot.img is packed correctly, yet all i get is a black screen. seeing as there hasnt been an update to the kernel source i dont expect much in terms of support, especially considering ive now asked multiple places and mad catz hasnt replied to any of my questions, it seems if i couldnt figure out how to pair my controller or turn the volume up i could get some answers but not if i have dev related questions :/.


Yeah, it's not (re link), but it's funny on: http://madcatz.com/mojo/en-ca/
Ready to Root

As any Android power-user knows, the best way to get the most out of your device is to root it. Root access opens up all sorts of options including adding custom keymapping capabilities and installing custom ROMs. Mad Catz provides a short step-by-step guide to rooting, and our tech support team is ready to help.
The best part – rooting won’t void your warranty.

Seems such a waste of a usb port :(

Edit: Oh and the kernel src works fine, shame it isn't any help re the old BT stack
 
Last edited:

Domomojo

Member
Jan 21, 2014
45
1
@shabbypenguin @mad cat rich, @Mad Catz Nate
Guys, any chance of a work around for getting the inbuild BT4 HW working on android 4.2.2?
Did a google search found:
http://xdaforums.com/showthread.php?t=2492436
Don't worry, "Minumum Android 4.3 version required!"
Two usb ports, but we can only use one is a bit :mad: :laugh:


Info:
http://stackoverflow.com/questions/20332277/bluetooth-low-energy-api-for-jelly-bean-4-2
"Android's SDK doesn't have support for BLE prior to 4.3.
Third party libraries can enable BLE on Android 4.2 and lower where the device's hardware supports BLE,
such as on Samsung's S III, 4 and Note 2 and on the HTC One.

I only have experience using Samsung's SDK on 4.2 (which is now deprecated), so I can't really help you further.
I can't reiterate enough-- there is no standard BLE support on Android 4.2 and lower.
You'll need to use third party solutions on a per-device basis."

An article I read recently said that a firmware update is due soon which will make the MOJO controller useable with BT2.2. Not as good as an OS upgrade to 4.4, but at least it will remove the need for the dongle.
 
  • Like
Reactions: gwaldo

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
An article I read recently said that a firmware update is due soon which will make the MOJO controller useable with BT2.2. Not as good as an OS upgrade to 4.4, but at least it will remove the need for the dongle.
I didn't think the mojo's ctrlr had BT2.2 HW.

I thought the update was coming for the retail CTRLR to update it to BT4
http://store.madcatz.com/brands/mad-catz/Mad-Catz-C-T-R-L-R-Mobile-Gamepad.html

A first for gaming peripherals, this version C.T.R.L.R employs a premium dual-mode Bluetooth 4.0 chip to ensure power-efficient compatibility with current Bluetooth Classic devices. Courtesy of a USB to Micro-USB port, future firmware updates will help ensure compatibility with upcoming Bluetooth Smart devices. Future updates will also boost power efficiency and minimize latency.

Hope, I'm wrong though :/
 

Domomojo

Member
Jan 21, 2014
45
1
I didn't think the mojo's ctrlr had BT2.2 HW.

I thought the update was coming for the retail CTRLR to update it to BT4
http://store.madcatz.com/brands/mad-catz/Mad-Catz-C-T-R-L-R-Mobile-Gamepad.html



Hope, I'm wrong though :/

Well...I was under the impression that the retail CTRLr already supported both BT2.2 and BT4.0, but after reading what you posted I'm not so sure. Also, I am unable to find find the review I read that stated that the MOJO CTRLr would soon receive a firmware update making it BT2.2 compatible. Seems rather odd that the first version of the CTRLr shipped (the version that came with MOJO) would support only the new BT4.0 standard, while the retail version, which shipped much later, only supports BT2.2. If that is the case, it would have made more sense to ship MOJO with the BT2.2 CTRLr, upgrade it to BT4.0 when the available firmware AND KitKat were available, and not even bother with a dongle.
 
Last edited:

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
Well...I was under the impression that the retail CTRLr already supported both BT2.2 and BT4.0, but after reading what you posted I'm not so sure. Also, I am unable to find find the review I read that stated that the MOJO CTRLr would soon receive a firmware update making it BT2.2 compatible. Seems rather odd that the first version of the CTRLr shipped (the version that came with MOJO) would support only the new BT4.0 standard, while the retail version, which shipped much later, only supports BT2.2. If that is the case, it would have made more sense to ship MOJO with the BT2.2 CTRLr, upgrade it to BT4.0 when the available firmware AND KitKat were available, and not even bother with a dongle.

I think:
BT4 only on mojo (cheaper not using the 'premium dual-mode Bluetooth 4.0 chip' - besides BT4 comes standard on phones/tablets since 2013 )
BT2 on retail, I guess it's the common denominator, get it working first and ship it out, patch it later.. good reason to have the micro-usb port.

It's a shame android 4.3 wasn't out when they started though :'(
Anyway, I'm still hopeful MC will deliver on kitkat and the CTRLR upgrade, IMO still too far from end of life (not like ouya!! 2010HW lol).
 

Domomojo

Member
Jan 21, 2014
45
1
I think:
BT4 only on mojo (cheaper not using the 'premium dual-mode Bluetooth 4.0 chip' - besides BT4 comes standard on phones/tablets since 2013 )
BT2 on retail, I guess it's the common denominator, get it working first and ship it out, patch it later.. good reason to have the micro-usb port.

It's a shame android 4.3 wasn't out when they started though :'(
Anyway, I'm still hopeful MC will deliver on kitkat and the CTRLR upgrade, IMO still too far from end of life (not like ouya!! 2010HW lol).


From xpcoin.com/2014/05/09/mad-catz-ctrlr-android-bluetooth-gamepad/

"The retail CTRLR versus the MOJO CTRLR

If you have a MOJO CTRLR (mine is model: 32263) there are a few differences to the retail CTRLR (mine is model: 32266).
1. Obviously the retail Madcatz logo on the right grip is red instead of the grey of the MOJO CTRLR.
2. The media, start and select buttons are black instead of silver.
3. The mode switch has a nipple/tab instead of a groove which required nails!
4. The home button on the retail CTRLR has a shorter press, the MOJO CTRLR has a deeper button.
5. The most important difference is that the retail CTRLR also supports Bluetooth 2 (classic) devices, the MOJO CTRLR is Bluetooth 4 only."
 

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
Yeah, that's my blog...
I've been looking more deeply into the MOJO's controller dongle, it's not a BT4 adapter as I initially thought, but specific to the MOJO's CTRLR.
Explains why it can't be removed.
I can also confirm the MOJO's controller doesn't connect to BT2.

I haven't tried the retail or the MOJO's controller on a BT4 device, but I expect the MOJO's controller to work.
The retail CTRLR *should* work on BT4, if not then we wait for the firmware update :/

I wrote in more detail on the same page at the bottom.
 

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
bluedroid

Anyone know anything about bluedroid?

With the BlueZ 5.21 release the support for Android is now fully comparable with Bluedroid. Using BlueZ for Android enables additional features on top of it.

When using Bluedroid, you get support for Bluetooth 4.0 core technology and for HFP 1.5, A2DP 1.2, AVRCP 1.3, PAN, HID, HDP, OPP, MAP, PBAP and GATT profiles.

With BlueZ for Android you get additional support for Bluetooth 4.1 core technology and upgraded profiles including HFP 1.6 + Wideband speech, A2DP 1.3, AVRCP 1.5 and MPS. It also provides full integration for aptX(R) high-quality low-latency codec from CSR (codec license not included).

This is significant upgrade of features that are additionally supported and fully integrated. BlueZ for Android is a real value add proposition.

For the Bluetooth qualification of Android, the full documentation of PICS, PIXIT and PTS instructions is available available. This makes qualification easy.


Looks like it's a BT stack replacement, maybe able to back port it.
https://gitorious.org/android-bluez


also looking at http://wiki.cyanogenmod.org/w/Doc:_porting_intro

:/
 

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
Just tried connecting the mojo controller to my nexus 5 and my nexus 5 wouldnt read it one bit, plugged in an otg cable and the dongle and instant connection. my guess is this will never work without the dongle, almost as if its hard coded to look for it. for it to be using BT 4.0 i must admit it has a pretty terrible range at that too.
 
  • Like
Reactions: gwaldo

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
Just tried connecting the mojo controller to my nexus 5 and my nexus 5 wouldnt read it one bit, plugged in an otg cable and the dongle and instant connection. my guess is this will never work without the dongle, almost as if its hard coded to look for it. for it to be using BT 4.0 i must admit it has a pretty terrible range at that too.

Thanks shabbypenguin, That's what I feared.. maybe a firmware update will fix that tho :/

On their site, called a 'USB Nano Dongle'
BLUETOOTH USB ADAPTER – The included adapter connects the C.T.R.L.R to computers or other systems that lack Bluetooth support.

What's terrible? I get great range.. from the other side of the house.. 15m through walls... i'm running cheap rechargeables.
 

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
odd, i have mine under my desk hooked to my monitor and if i have my controller on more than 3-4 feet away i get terrible lag until i move closer, the batteries could be an issue though...
 

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
it doesnt appear they use a DTB file, so i believe my boot.img is packed correctly, yet all i get is a black screen.

Hey,
I have no idea what a DTB file is, but I googled around and found this:
http://xdaforums.com/showthread.php?t=2428117

I modified the split tool to support dtb, please test it……
Modify permissions before you use it
chmod a+x split_bootimg_dtb.pl
View attachment 2229037
 

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
oh no, they dont use it which is odd because the shield does. you can take stock recovery and unpackl it and repack it and it will boot just fine with no dtb file. yet for some reason the kernel source has a dts/dtb file :/

i just wish i understood why nothing seemed to work, ive managed to port cwm/twrp and build an entirely working cm rom for another device in the time that its taken that i still dont know what is going on with the mojo.
 
  • Like
Reactions: gwaldo

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
yip, I see them all in kernel/arch/arm/boot/dts
But it's it's just a feature of the kernel, how do you know if it's used or not used in a boot.img?
When you boot using your repacked boot.img does it show an error?
I guess because there's no adb there's no logging either :'(
Yeah, wow

normally ive known by taking their boot.img from stock and extracting the dtb and that will tell me if they use it or not. when i repack it boots fine, just doesnt do much :/ and yea without adb this is kind of sucking, im gunna ask around today and see if i can make any headway with it.. :/
 

gwaldo

Senior Member
Dec 30, 2013
511
68
Melb.
xpcoin.com
normally ive known by taking their boot.img from stock and extracting the dtb and that will tell me if they use it or not. when i repack it boots fine, just doesnt do much :/ and yea without adb this is kind of sucking, im gunna ask around today and see if i can make any headway with it.. :/

Not sure if you know about this or for anyone else interested.
The mojo.boot image has ADB capabilities, it has the server: /sbin/adbd

Android got a security feature you can turn on or off. Usually this should be enabled for production environment and disabled for development devices. By turning security off, you can gain root access.

Edit /default.prop in the root file system and set the property "ro.secure=0".

There's also a "ro.debuggable=0" which should be changed to 1

In file init.goldfish.rc has eth0 network settings, so I expect ADB to work via that.
on boot
setsebool in_qemu=1
restorecon /sys/qemu_trace/process_name
restorecon /sys/qemu_trace/state
restorecon /sys/qemu_trace/symbol
setprop ARGH ARGH
setprop net.eth0.gw 10.0.2.2
setprop net.eth0.dns1 10.0.2.3

init.mojo.rc also has ADB set up:

# Enable ADB over TCP
setprop service.adb.tcp.port 5555

init.mojo.rc and init.usb.rc files has USB ADB settings, not sure what it does or how to use ADB via USB.


edit: init.rc , the main boot script

# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0

# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd

But no mention of init.goldfish.rc where the eth0 ADB settings are.
Anyone know what init.goldfish.rc does here or if it's used at all?

Tried pinging 10.0.2.2 and 10.0.2.3 in fastboot mode and recovery mode via ethernet but nothing :(
 
Last edited:

shabbypenguin

Inactive Recognized Developer
May 30, 2010
4,895
5,361
36
Goldfish isnt actually used, its the emulator, its included in every build of android because with a simple build.prop edit you can tuirn any device into an emulator (most of the time it breaks it). the default.prop you can edit every time to those values but thats actually part of the ramdisk from boot.img and is a temporary file, as soon as you reboot it will be rebuilt according to the file in the kernel. ive tried everything i could think of to get adb working via usb and it doesnt even detect the device, its infuriating because while adb over wifi "works" its a half ass attempt. even still now mad catz refuses to answer any of my questions :(, if i had to guess its because none of them actually klnow either.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 1
    @shabbypenguin @mad cat rich, @Mad Catz Nate
    Guys, any chance of a work around for getting the inbuild BT4 HW working on android 4.2.2?
    Did a google search found:
    http://xdaforums.com/showthread.php?t=2492436
    Don't worry, "Minumum Android 4.3 version required!"
    Two usb ports, but we can only use one is a bit :mad: :laugh:


    Info:
    http://stackoverflow.com/questions/20332277/bluetooth-low-energy-api-for-jelly-bean-4-2
    "Android's SDK doesn't have support for BLE prior to 4.3.
    Third party libraries can enable BLE on Android 4.2 and lower where the device's hardware supports BLE,
    such as on Samsung's S III, 4 and Note 2 and on the HTC One.

    I only have experience using Samsung's SDK on 4.2 (which is now deprecated), so I can't really help you further.
    I can't reiterate enough-- there is no standard BLE support on Android 4.2 and lower.
    You'll need to use third party solutions on a per-device basis."

    An article I read recently said that a firmware update is due soon which will make the MOJO controller useable with BT2.2. Not as good as an OS upgrade to 4.4, but at least it will remove the need for the dongle.
    1
    Just tried connecting the mojo controller to my nexus 5 and my nexus 5 wouldnt read it one bit, plugged in an otg cable and the dongle and instant connection. my guess is this will never work without the dongle, almost as if its hard coded to look for it. for it to be using BT 4.0 i must admit it has a pretty terrible range at that too.
    1
    oh no, they dont use it which is odd because the shield does. you can take stock recovery and unpackl it and repack it and it will boot just fine with no dtb file. yet for some reason the kernel source has a dts/dtb file :/

    i just wish i understood why nothing seemed to work, ive managed to port cwm/twrp and build an entirely working cm rom for another device in the time that its taken that i still dont know what is going on with the mojo.
    1
    Hey, I'm looking at modaco root sys image to see if can give us some clues.. I can't stop it from rebooting.
    So it goes from
    /ramdisk/init.rc line 376
    ## Daemon processes to be run by init.
    ##
    service superboot /system/bin/sh /superboot/superboot.sh
    class main
    user root
    group root
    oneshot
    which runs his script

    I comment out the reboot line but it still reboots.
    I added this to the end
    /system/bin/sh

    but it still reboots.

    I added a few things to default.prop file:
    #
    # ADDITIONAL_DEFAULT_PROPERTIES
    #
    ro.secure=0
    ro.allow.mock.location=0
    #gwald set to 1
    ro.debuggable=1
    #gwald added ,adb
    persist.sys.usb.config=mtp,adb

    #gwald allow unsecure adb
    ro.adb.secure=0
    Hoping to test out, but it keeps rebooting :(
    1
    normally ive known by taking their boot.img from stock and extracting the dtb and that will tell me if they use it or not. when i repack it boots fine, just doesnt do much :/ and yea without adb this is kind of sucking, im gunna ask around today and see if i can make any headway with it.. :/


    I was going through some of my notes and found this:

    # ./fastboot-linux -i 0x0738 getvar all

    Code:
    (bootloader) version-bootloader: 1.0
    (bootloader) version-baseband: 2.0
    (bootloader) version: 0.4
    (bootloader) serialno: 15C40C1C30400000012FC8380
    (bootloader) mid: 001
    (bootloader) product: Mojo
    (bootloader) secure: no
    (bootloader) unlocked: yes
    (bootloader) partition-size:bootloader: 0x0000000000600000
    (bootloader) partition-type:bootloader: basic
    (bootloader) partition-size:recovery: 0x0000000000800000
    (bootloader) partition-type:recovery: basic
    (bootloader) partition-size:boot: 0x0000000001400000
    (bootloader) partition-type:boot: basic
    (bootloader) partition-size:dtb: 0x0000000000400000
    (bootloader) partition-type:dtb: basic
    (bootloader) partition-size:system: 0x0000000030000000
    (bootloader) partition-type:system: ext4
    (bootloader) partition-size:cache: 0x0000000030000000
    (bootloader) partition-type:cache: ext4
    (bootloader) partition-size:userdata: 0x0000000345000000
    (bootloader) partition-type:userdata: ext4
    all: 
    finished. total time: 0.094s


    (bootloader) partition-size:dtb: 0x0000000000400000
    (bootloader) partition-type:dtb: basic


    It looks like a partition and was mentioned by

    @gwaldo if you wanted to flash a custom kernel this is what I would do:

    Code:
    root@android:/ # ls -al /dev/block/platform/sdhci-tegra.3/by-name
    ls -al /dev/block/platform/sdhci-tegra.3/by-name
    lrwxrwxrwx root     root              2014-04-13 18:31 APP -> /dev/block/mmcblk0p4
    lrwxrwxrwx root     root              2014-04-13 18:31 CAC -> /dev/block/mmcblk0p5
    lrwxrwxrwx root     root              2014-04-13 18:31 DTB -> /dev/block/mmcblk0p2
    lrwxrwxrwx root     root              2014-04-13 18:31 LNX -> /dev/block/mmcblk0p3
    lrwxrwxrwx root     root              2014-04-13 18:31 MDA -> /dev/block/mmcblk0p8
    lrwxrwxrwx root     root              2014-04-13 18:31 MSC -> /dev/block/mmcblk0p6
    lrwxrwxrwx root     root              2014-04-13 18:31 SOS -> /dev/block/mmcblk0p1
    lrwxrwxrwx root     root              2014-04-13 18:31 TMP -> /dev/block/mmcblk0p9
    lrwxrwxrwx root     root              2014-04-13 18:31 UDA -> /dev/block/mmcblk0p10
    lrwxrwxrwx root     root              2014-04-13 18:31 USP -> /dev/block/mmcblk0p7
    root@android:/ #

    ...
    grab the boot image:
    Code:
    cat /dev/block/mmcblk0p3 > /sdcard/boot.img

    lrwxrwxrwx root root 2014-04-13 18:31 DTB -> /dev/block/mmcblk0p2


    is this the mojo's dtb file?
    Not sure what to do with it or how to use it
    /kernel/arch/arm/boot/dts/tegra114-mojo.dts

    Code:
    /dts-v1/;
    
    /include/ "tegra114.dtsi"
    
    / {
    	model = "NVIDIA Tegra114 mojo evaluation board";
    	compatible = "nvidia,mojo", "nvidia,tegra114";
    
    	pinmux {
    		pinctrl-names = "default";
    		pinctrl-0 = <&state_default>;
    
    		state_default: pinmux {
    			clk1_out_pw4 {
    				nvidia,pins = "clk1_out_pw4";
    				nvidia,function = "extperiph1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			dap1_din_pn1 {
    				nvidia,pins = "dap1_din_pn1";
    				nvidia,function = "i2s0";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			dap1_dout_pn2 {
    				nvidia,pins = "dap1_dout_pn2",
    						"dap1_fs_pn0",
    						"dap1_sclk_pn3";
    				nvidia,function = "i2s0";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			dap2_din_pa4 {
    				nvidia,pins = "dap2_din_pa4";
    				nvidia,function = "i2s1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			dap2_dout_pa5 {
    				nvidia,pins = "dap2_dout_pa5",
    						"dap2_fs_pa2",
    						"dap2_sclk_pa3";
    				nvidia,function = "i2s1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			dap4_din_pp5 {
    				nvidia,pins = "dap4_din_pp5",
    						"dap4_dout_pp6",
    						"dap4_fs_pp4",
    						"dap4_sclk_pp7";
    				nvidia,function = "i2s3";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			dvfs_pwm_px0 {
    				nvidia,pins = "dvfs_pwm_px0",
    						"dvfs_clk_px2";
    				nvidia,function = "cldvfs";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			ulpi_clk_py0 {
    				nvidia,pins = "ulpi_clk_py0",
    						"ulpi_data0_po1",
    						"ulpi_data1_po2",
    						"ulpi_data2_po3",
    						"ulpi_data3_po4",
    						"ulpi_data4_po5",
    						"ulpi_data5_po6",
    						"ulpi_data6_po7",
    						"ulpi_data7_po0";
    				nvidia,function = "ulpi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			ulpi_dir_py1 {
    				nvidia,pins = "ulpi_dir_py1",
    						"ulpi_nxt_py2";
    				nvidia,function = "ulpi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			ulpi_stp_py3 {
    				nvidia,pins = "ulpi_stp_py3";
    				nvidia,function = "ulpi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			cam_i2c_scl_pbb1 {
    				nvidia,pins = "cam_i2c_scl_pbb1",
    						"cam_i2c_sda_pbb2";
    				nvidia,function = "i2c3";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <0>;
    			};
    			cam_mclk_pcc0 {
    				nvidia,pins = "cam_mclk_pcc0",
    						"pbb0";
    				nvidia,function = "vi_alt3";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    				nvidia,lock = <0>;
    			};
    			gen2_i2c_scl_pt5 {
    				nvidia,pins = "gen2_i2c_scl_pt5",
    						"gen2_i2c_sda_pt6";
    				nvidia,function = "i2c2";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <0>;
    			};
    			gmi_a16_pj7 {
    				nvidia,pins = "gmi_a16_pj7";
    				nvidia,function = "uartd";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_a17_pb0 {
    				nvidia,pins = "gmi_a17_pb0",
    						"gmi_a18_pb1";
    				nvidia,function = "uartd";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_a19_pk7 {
    				nvidia,pins = "gmi_a19_pk7";
    				nvidia,function = "uartd";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_ad5_pg5 {
    				nvidia,pins = "gmi_ad5_pg5",
    						"gmi_cs6_n_pi3",
    						"gmi_wr_n_pi0";
    				nvidia,function = "spi4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_ad6_pg6 {
    				nvidia,pins = "gmi_ad6_pg6",
    						"gmi_ad7_pg7";
    				nvidia,function = "spi4";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_ad12_ph4 {
    				nvidia,pins = "gmi_ad12_ph4";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_ad9_ph1 {
    				nvidia,pins = "gmi_ad9_ph1";
    				nvidia,function = "pwm1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_cs1_n_pj2 {
    				nvidia,pins = "gmi_cs1_n_pj2",
    						"gmi_oe_n_pi1";
    				nvidia,function = "soc";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			clk2_out_pw5 {
    				nvidia,pins = "clk2_out_pw5";
    				nvidia,function = "extperiph2";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			sdmmc1_clk_pz0 {
    				nvidia,pins = "sdmmc1_clk_pz0";
    				nvidia,function = "sdmmc1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			sdmmc1_cmd_pz1 {
    				nvidia,pins = "sdmmc1_cmd_pz1",
    						"sdmmc1_dat0_py7",
    						"sdmmc1_dat1_py6",
    						"sdmmc1_dat2_py5",
    						"sdmmc1_dat3_py4";
    				nvidia,function = "sdmmc1";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			sdmmc1_wp_n_pv3 {
    				nvidia,pins = "sdmmc1_wp_n_pv3";
    				nvidia,function = "spi4";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			sdmmc3_clk_pa6 {
    				nvidia,pins = "sdmmc3_clk_pa6";
    				nvidia,function = "sdmmc3";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			sdmmc3_cmd_pa7 {
    				nvidia,pins = "sdmmc3_cmd_pa7",
    						"sdmmc3_dat0_pb7",
    						"sdmmc3_dat1_pb6",
    						"sdmmc3_dat2_pb5",
    						"sdmmc3_dat3_pb4",
    						"kb_col4_pq4",
    						"sdmmc3_clk_lb_out_pee4",
    						"sdmmc3_clk_lb_in_pee5";
    				nvidia,function = "sdmmc3";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			sdmmc4_clk_pcc4 {
    				nvidia,pins = "sdmmc4_clk_pcc4";
    				nvidia,function = "sdmmc4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			sdmmc4_cmd_pt7 {
    				nvidia,pins = "sdmmc4_cmd_pt7",
    						"sdmmc4_dat0_paa0",
    						"sdmmc4_dat1_paa1",
    						"sdmmc4_dat2_paa2",
    						"sdmmc4_dat3_paa3",
    						"sdmmc4_dat4_paa4",
    						"sdmmc4_dat5_paa5",
    						"sdmmc4_dat6_paa6",
    						"sdmmc4_dat7_paa7";
    				nvidia,function = "sdmmc4";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			clk_32k_out_pa0 {
    				nvidia,pins = "clk_32k_out_pa0";
    				nvidia,function = "blink";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			kb_col0_pq0 {
    				nvidia,pins = "kb_col0_pq0",
    						"kb_col1_pq1",
    						"kb_col2_pq2",
    						"kb_row0_pr0",
    						"kb_row1_pr1",
    						"kb_row2_pr2";
    				nvidia,function = "kbc";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			dap3_din_pp1 {
    				nvidia,pins = "dap3_din_pp1",
    						"dap3_sclk_pp3";
    				nvidia,function = "displayb";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <0>;
    			};
    			pv0 {
    				nvidia,pins = "pv0";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <0>;
    			};
    			kb_row7_pr7 {
    				nvidia,pins = "kb_row7_pr7";
    				nvidia,function = "rsvd2";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			kb_row10_ps2 {
    				nvidia,pins = "kb_row10_ps2";
    				nvidia,function = "uarta";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			kb_row9_ps1 {
    				nvidia,pins = "kb_row9_ps1";
    				nvidia,function = "uarta";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pwr_i2c_scl_pz6 {
    				nvidia,pins = "pwr_i2c_scl_pz6",
    						"pwr_i2c_sda_pz7";
    				nvidia,function = "i2cpwr";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <0>;
    			};
    			sys_clk_req_pz5 {
    				nvidia,pins = "sys_clk_req_pz5";
    				nvidia,function = "sysclk";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			core_pwr_req {
    				nvidia,pins = "core_pwr_req";
    				nvidia,function = "pwron";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			cpu_pwr_req {
    				nvidia,pins = "cpu_pwr_req";
    				nvidia,function = "cpu";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pwr_int_n {
    				nvidia,pins = "pwr_int_n";
    				nvidia,function = "pmi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			reset_out_n {
    				nvidia,pins = "reset_out_n";
    				nvidia,function = "reset_out_n";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			clk3_out_pee0 {
    				nvidia,pins = "clk3_out_pee0";
    				nvidia,function = "extperiph3";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gen1_i2c_scl_pc4 {
    				nvidia,pins = "gen1_i2c_scl_pc4",
    						"gen1_i2c_sda_pc5";
    				nvidia,function = "i2c1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <0>;
    			};
    			uart2_cts_n_pj5 {
    				nvidia,pins = "uart2_cts_n_pj5";
    				nvidia,function = "uartb";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			uart2_rts_n_pj6 {
    				nvidia,pins = "uart2_rts_n_pj6";
    				nvidia,function = "uartb";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			uart2_rxd_pc3 {
    				nvidia,pins = "uart2_rxd_pc3";
    				nvidia,function = "irda";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			uart2_txd_pc2 {
    				nvidia,pins = "uart2_txd_pc2";
    				nvidia,function = "irda";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			uart3_cts_n_pa1 {
    				nvidia,pins = "uart3_cts_n_pa1",
    						"uart3_rxd_pw7";
    				nvidia,function = "uartc";
    				nvidia,pull = <0>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			uart3_rts_n_pc0 {
    				nvidia,pins = "uart3_rts_n_pc0",
    						"uart3_txd_pw6";
    				nvidia,function = "uartc";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			owr {
    				nvidia,pins = "owr";
    				nvidia,function = "owr";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			hdmi_cec_pee3 {
    				nvidia,pins = "hdmi_cec_pee3";
    				nvidia,function = "cec";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <0>;
    			};
    			ddc_scl_pv4 {
    				nvidia,pins = "ddc_scl_pv4",
    						"ddc_sda_pv5";
    				nvidia,function = "i2c4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,rcv-sel = <1>;
    			};
    			spdif_in_pk6 {
    				nvidia,pins = "spdif_in_pk6";
    				nvidia,function = "usb";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    			};
    			usb_vbus_en0_pn4 {
    				nvidia,pins = "usb_vbus_en0_pn4";
    				nvidia,function = "usb";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    				nvidia,lock = <0>;
    				nvidia,open-drain = <1>;
    			};
    			gpio_x6_aud_px6 {
    				nvidia,pins = "gpio_x6_aud_px6";
    				nvidia,function = "spi6";
    				nvidia,pull = <2>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <1>;
    			};
    			gpio_x4_aud_px4 {
    				nvidia,pins = "gpio_x4_aud_px4",
    						"gpio_x7_aud_px7";
    				nvidia,function = "rsvd1";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gpio_x5_aud_px5 {
    				nvidia,pins = "gpio_x5_aud_px5";
    				nvidia,function = "rsvd1";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gpio_w2_aud_pw2 {
    				nvidia,pins = "gpio_w2_aud_pw2";
    				nvidia,function = "rsvd2";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gpio_w3_aud_pw3 {
    				nvidia,pins = "gpio_w3_aud_pw3";
    				nvidia,function = "spi6";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gpio_x1_aud_px1 {
    				nvidia,pins = "gpio_x1_aud_px1";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gpio_x3_aud_px3 {
    				nvidia,pins = "gpio_x3_aud_px3";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			dap3_fs_pp0 {
    				nvidia,pins = "dap3_fs_pp0";
    				nvidia,function = "i2s2";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			dap3_dout_pp2 {
    				nvidia,pins = "dap3_dout_pp2";
    				nvidia,function = "i2s2";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pv1 {
    				nvidia,pins = "pv1";
    				nvidia,function = "rsvd1";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			pbb3 {
    				nvidia,pins = "pbb3",
    						"pbb5",
    						"pbb6",
    						"pbb7";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pcc1 {
    				nvidia,pins = "pcc1",
    						"pcc2";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_ad0_pg0 {
    				nvidia,pins = "gmi_ad0_pg0",
    						"gmi_ad1_pg1";
    				nvidia,function = "gmi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_ad10_ph2 {
    				nvidia,pins = "gmi_ad10_ph2",
    						"gmi_ad11_ph3",
    						"gmi_ad13_ph5",
    						"gmi_ad8_ph0",
    						"gmi_clk_pk1";
    				nvidia,function = "gmi";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			gmi_ad2_pg2 {
    				nvidia,pins = "gmi_ad2_pg2",
    						"gmi_ad3_pg3";
    				nvidia,function = "gmi";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_adv_n_pk0 {
    				nvidia,pins = "gmi_adv_n_pk0",
    						"gmi_cs0_n_pj0",
    						"gmi_cs2_n_pk3",
    						"gmi_cs4_n_pk2",
    						"gmi_cs7_n_pi6",
    						"gmi_dqs_p_pj3",
    						"gmi_iordy_pi5",
    						"gmi_wp_n_pc7";
    				nvidia,function = "gmi";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			gmi_cs3_n_pk4 {
    				nvidia,pins = "gmi_cs3_n_pk4";
    				nvidia,function = "gmi";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			clk2_req_pcc5 {
    				nvidia,pins = "clk2_req_pcc5";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			kb_col3_pq3 {
    				nvidia,pins = "kb_col3_pq3",
    						"kb_col6_pq6",
    						"kb_col7_pq7";
    				nvidia,function = "kbc";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			kb_col5_pq5 {
    				nvidia,pins = "kb_col5_pq5";
    				nvidia,function = "kbc";
    				nvidia,pull = <2>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			kb_row3_pr3 {
    				nvidia,pins = "kb_row3_pr3",
    						"kb_row4_pr4",
    						"kb_row6_pr6",
    						"kb_row8_ps0";
    				nvidia,function = "kbc";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			clk3_req_pee1 {
    				nvidia,pins = "clk3_req_pee1";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pu4 {
    				nvidia,pins = "pu4";
    				nvidia,function = "displayb";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <0>;
    			};
    			pu5 {
    				nvidia,pins = "pu5",
    						"pu6";
    				nvidia,function = "displayb";
    				nvidia,pull = <0>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			hdmi_int_pn7 {
    				nvidia,pins = "hdmi_int_pn7";
    				nvidia,function = "rsvd1";
    				nvidia,pull = <1>;
    				nvidia,tristate = <0>;
    				nvidia,enable-input = <1>;
    			};
    			clk1_req_pee2 {
    				nvidia,pins = "clk1_req_pee2",
    						"usb_vbus_en1_pn5";
    				nvidia,function = "rsvd4";
    				nvidia,pull = <1>;
    				nvidia,tristate = <1>;
    				nvidia,enable-input = <0>;
    			};
    
    			drive_sdio1 {
    				nvidia,pins = "drive_sdio1";
    				nvidia,high-speed-mode = <1>;
    				nvidia,schmitt = <0>;
    				nvidia,low-power-mode = <3>;
    				nvidia,pull-down-strength = <36>;
    				nvidia,pull-up-strength = <20>;
    				nvidia,slew-rate-rising = <2>;
    				nvidia,slew-rate-falling = <2>;
    			};
    			drive_sdio3 {
    				nvidia,pins = "drive_sdio3";
    				nvidia,high-speed-mode = <1>;
    				nvidia,schmitt = <0>;
    				nvidia,low-power-mode = <3>;
    				nvidia,pull-down-strength = <22>;
    				nvidia,pull-up-strength = <36>;
    				nvidia,slew-rate-rising = <0>;
    				nvidia,slew-rate-falling = <0>;
    			};
    			drive_gma {
    				nvidia,pins = "drive_gma";
    				nvidia,high-speed-mode = <1>;
    				nvidia,schmitt = <0>;
    				nvidia,low-power-mode = <3>;
    				nvidia,pull-down-strength = <2>;
    				nvidia,pull-up-strength = <1>;
    				nvidia,slew-rate-rising = <0>;
    				nvidia,slew-rate-falling = <0>;
    				nvidia,drive-type = <1>;
    			};
    		};
    	};
    };