[ROM][OFFICIAL][otus] CyanogenMod 12.1 for Moto E 3G

Search This thread

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
1oXkC6z.png


I have ported CyanogenMod to the 2015 Moto E 3G, codenamed otus. Be sure to back up your stock rom before flashing this. Flash it with TWRP. I recommend CM gapps with this ROM.

I must give huge thanks to @scritch007 and @percy_g2 for porting CyanogenMod to the first gen Moto E (condor). I've built my device tree using their condor device tree as a base.

Changelog:
Official nightly changelogs
Code:
December 16, 2015:
- Unofficial security update build

September 12, 2015:
- First official nightly build

September 5, 2015:
- Improved RAM management
- Improved auto brightness calibration
- Cleaned up vendor blobs
- CM updates

September 3, 2015:
- Fixed camera regression in previous build
- CM updates

September 1, 2015:
- Fixed headphone detection at boot time
- Bluetooth fixes
- CM updates

August 28, 2015:
- Kernel security and reliability improvements
- CM updates

August 24, 2015:
- Added LED notification support
- Properly runs sensor hub firmware script at boot

August 22, 2015:
- Uses prebuilt libOmxVdec
- Fully fixed YouTube issues

August 21, 2015 - Build 2:
- Disabled AAC compressed offload playback
- This seems to have mostly fixed the YouTube issues

August 21, 2015:
- Further cleaned up vendor blobs
- Cleaned up device tree
- CM updates

August 9, 2015:
- Cleaned up unused vendor blobs
- Updated power management overlay for more accurate battery stats
- CM updates

August 1, 2015:
- Fixed Indian time zone issues (recents key, gapps crashes)
- Updated driver blobs and kernel
- CM updates

July 29, 2015:
- CM updates

July 16, 2015:
- Added USA XT1511 support
- CM updates

July 14, 2015:
- CM updates

July 3, 2015:
- CM updates
- Additional RIL settings for XT1506

July 1, 2015:
- CM updates
- Updated f2fs drivers

June 27, 2015:
- CM updates

June 19, 2015:
- Updated kernel to Linux 3.4.108
- CM updates

June 18, 2015 (June 17th in Canada):
- Reduced ADSP crash frequency
- CM updates
- You might need to reflash gapps

June 12, 2015:
- CM updates

June 6, 2015:
- CM updates
- Miscellaneous kernel fixes

May 29, 2015:
- CM updates
- Added missing vendor blobs

May 16, 2015 - Build 2:
- Disabled FFMPEG offload to reduce ADSP crash frequency
- You MUST wipe your system partition before installing this build

May 16, 2015:
- Updated to Linux Kernel 3.4.107
- Fixed FM radio
- Updated WiFi drivers
- Faster WiFi network detection and connection
- Various other bugfixes for issues encountered in testing
- Updated vendor apks
- Enforcing SELinux and sepolicy fixes
- Added fiops IO scheduler to kernel

May 10, 2015:
- Slightly faster WiFi network detection

May 9, 2015:
- Fixed audio
- Fixed camera
- Fixed media codecs
- Fixed auto brightness
- RIL fixes for Indian dual SIM model

May 8, 2015:
- New kernel that is appropriate for this device
- Accelerometer is fixed
- All the changes in CyanogenMod

May 2, 2015:
- Initial release

Sources:
Device Tree: https://github.com/CyanogenMod/android_device_motorola_otus
Vendor Tree: https://github.com/sultanqasim/android_vendor_motorola_otus
Kernel Tree: https://github.com/CyanogenMod/android_kernel_motorola_otus

Downloads:
December 16th Unofficial Build
OFFICIAL NIGHTLY BUILDS
Mirror of final (November 30) nightly build

Old Unofficial Builds:
September 5 Release
September 3 Release
September 1 Release
August 28 Release
August 24 Release
August 22 Release
August 21 Build 2
August 21 Release
August 9 Release
August 1 Release
July 29 Release
July 16 Release
July 14 Release
July 3 Release
July 1 Release
June 27 Release
June 19 Release
June 18 Release
June 12 Release
June 6 Release
May 29 Release
May 16 Build 2
May 16 Release
May 10 Release
May 9 Release
May 8 Release
May 2 Release


XDA:DevDB Information
CyanogenMod 12.1 for Moto E 3G, ROM for the Moto E 2015

Contributors
squid2, scritch007, percy_g2
ROM OS Version: 5.1.x Lollipop
ROM Kernel: Linux 3.4.x

Version Information
Status: Stable

Created 2015-05-02
Last Updated 2015-12-15
 

Attachments

  • Screenshot_2015-06-19-22-02-26.png
    Screenshot_2015-06-19-22-02-26.png
    59.5 KB · Views: 10,740
Last edited:

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
Installation Instructions

To perform a clean install:
  1. Boot up my TWRP
  2. Go to Wipe->Advanced Wipe, select Dalvik Cache, System, Data, and Cache, then swipe to wipe
  3. Return to the TWRP home screen, go to Install, and add two zips to the queue: first my CM ROM, then the latest CM 12.1 gapps
  4. Swipe to flash the two zips
  5. Reboot once flashing is complete (and be patient for the first boot, it takes a while)

Not wiping everything correctly or installing the wrong gapps may cause issues.

To upgrade between consecutive releases of my CM without any major changes:
  1. Boot up my TWRP
  2. Go to Install, and add two zips to the queue: first my CM ROM, then the latest CM 12.1 gapps
  3. Swipe to flash the two zips
  4. After flashing is complete, wipe cache and dalvik
  5. Reboot (and be patient for the first boot, it takes a while)

If you encounter any issues after an upgrade, try performing a clean install before reporting a bug.

Video Demo
@chintu112 has made a video demo of this ROM that you can watch to see what it is like.
 
Last edited:

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
ClockWorkMod Recovery

Nobody needs this, I don't know why anyone would want this, but I do get a CWM recovery for free when porting CyanogenMod to a device. For anyone who for some strange reason wants a CWM recovery, I've posted one to the downloads tab of this thread. Flash it with fastboot. If you don't know how, don't use it. Use at your own risk. I haven't tested it.

I recommend TWRP to all sane people.
 
Last edited:

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
I've done a bit of fiddling with this ROM, trying to fix what is broken, but I haven't had much luck. Motorola still hasn't released kernel sources for this model, so I've been trying to make do with a hacked up condor kernel that is able to boot on this device. I expect that some of the issues I'm facing are due to the fact that I'm using a kernel that is not really meant for this device. I tried using the prebuilt stock kernel, but it would fail with binder crashes in early bootup. If anyone has any ideas or solutions to fix some of the device support issues, I'd be glad to try them out.

I might post an updated build in a few days, but development of this port may be stalled for a while till Motorola releases kernel sources for otus. I've contacted a senior kernel developer at Moto and asked for the sources, but I haven't heard back from him yet. Hopefully Motorola will release kernel sources for this device, if nothing else at least when they release the 5.1 update for otus. They are required to release kernel sources by law (the GPL compels them to do so).

If you're interested, you can also contact Motorola and ask for the kernel source. If a lot of us pester them, maybe they'll do something about it.
 

raghavarora1997

Senior Member
Jan 13, 2015
58
21
I've done a bit of fiddling with this ROM, trying to fix what is broken, but I haven't had much luck. Motorola still hasn't released kernel sources for this model, so I've been trying to make do with a hacked up condor kernel that is able to boot on this device. I expect that some of the issues I'm facing are due to the fact that I'm using a kernel that is not really meant for this device. I tried using the prebuilt stock kernel, but it would fail with binder crashes in early bootup. If anyone has any ideas or solutions to fix some of the device support issues, I'd be glad to try them out.

I might post an updated build in a few days, but development of this port may be stalled for a while till Motorola releases kernel sources for otus. I've contacted a senior kernel developer at Moto and asked for the sources, but I haven't heard back from him yet. Hopefully Motorola will release kernel sources for this device, if nothing else at least when they release the 5.1 update for otus. They are required to release kernel sources by law (the GPL compels them to do so).

If you're interested, you can also contact Motorola and ask for the kernel source. If a lot of us pester them, maybe they'll do something about it.

Well they posted the release notes of android 5.1 for our device yesterday, so we'll be getting the update in a few days i guess.
Here's the link https://motorola-global-portal.custhelp.com/app/answers/prod_answer_detail/a_id/105252

Sent from my MotoE2 using XDA Free mobile app
 

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
New May 8 Release

I've uploaded a new build for today. Beyond the usual CM updates, I've switched to using the suitable kernel that Motorola just released a few hours ago. Unfortunately, the kernel change didn't fix the main issues (audio and camera), but it did fix the accelerometer, which is always a good thing. I'm significantly more optimistic now compared to yesterday, since I have the kernel sources, and @scritch007 has offered to help me debug some of the issues.

I also noticed that while adaptive brightness is not working properly (it goes to full brightness always), it is possible to control the display brightness manually after disabling adaptive brightness in the display section of settings.

Indian, Brazilian, and other non-USA otus users: I need your help to get RIL working on your devices. While running the stock rom, open an ADB shell of your device on your computer, run the "getprop" command, and post the results. If you want to hide the identity of your device, you can redact unique identifiers (your serial number and WiFi MAC address) before posting the output here.
 

Ravx

Senior Member
Jul 10, 2012
313
52
Gwalior
plus.google.com
Indian, Brazilian, and other non-USA otus users: I need your help to get RIL working on your devices. While running the stock rom, open an ADB shell of your device on your computer, run the "getprop" command, and post the results. If you want to hide the identity of your device, you can redact unique identifiers (your serial number and WiFi MAC address) before posting the output here.

HI @squid2
Heres what you asked for. This is the Indian version.
I didnt knew how to export it. So i copied the output and pasted in text file.
Hope this helps.
 

Attachments

  • prop.txt
    11.1 KB · Views: 215

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
HI @squid2
Heres what you asked for. This is the Indian version.
I didnt knew how to export it. So i copied the output and pasted in text file.
Hope this helps.
Thanks for the information. Your phone configuration matches the one posted by @santoshx99

I've added the necessary bits to the initialialization code, so hopefully the RIL will work on Indian devices in the next release.

I have enough Indian phone info for now, but I now need info for Brazilian and other South American devices.
 
Last edited:

Ravx

Senior Member
Jul 10, 2012
313
52
Gwalior
plus.google.com
Thanks for the information. Your phone configuration matches the one posted by @santoshx99

I've added the necessary bits to the initialialization code, so hopefully the RIL will work on Indian devices in the next release.

I have enough Indian phone info for now, but I now need info for Brazilian and other South American devices.
Absence of sim card makes the Rom unusable. I hope next build will contain sim card options. Thanks.
@DC07 I hope you can contribute here.

---------- Post added at 08:30 AM ---------- Previous post was at 08:24 AM ----------

I was thinking I'd downloading the Rom today. But if working RIL is going to be uploaded today then probably I will download it then. Will save me some bits.
 

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
Absence of sim card makes the Rom unusable. I hope next build will contain sim card options. Thanks.
@DC07 I hope you can contribute here.

---------- Post added at 08:30 AM ---------- Previous post was at 08:24 AM ----------

I was thinking I'd downloading the Rom today. But if working RIL is going to be uploaded today then probably I will download it then. Will save me some bits.

I plan to upload something later today, and hopefully Indian dual-sim RIL will be working in the new build. If that works, then at least you will have text messaging and mobile data. Audio is still broken, but I'm working on it as my #1 priority for this ROM. I'm not sure if I'll be able to get it working today, but maybe I'll get lucky. I've narrowed down the problem to a certain part in my dmesg logs.

In the stock ROM with working audio, I see this:
Code:
<6>[    6.457824,1] msm8x10-wcd-i2c-core msm8x10_wcd_codec: msm8x10_wcd_i2c_probe: irq initialization passed
<3>[    6.477382,0] msm8x10-wcd-i2c-core msm8x10_wcd_codec: Failed to add ADC1 Volume: -16
<6>[    6.509119,0] asoc: snd-soc-dummy-dai <-> MultiMedia1 mapping ok
<6>[    6.509709,0] asoc: snd-soc-dummy-dai <-> MultiMedia2 mapping ok
<6>[    6.510200,0] asoc: snd-soc-dummy-dai <-> CS-VOICE mapping ok
<6>[    6.510760,0] asoc: snd-soc-dummy-dai <-> VoIP mapping ok
<6>[    6.511241,0] asoc: snd-soc-dummy-dai <-> MultiMedia3 mapping ok
<6>[    6.511765,0] asoc: snd-soc-dummy-dai <-> SEC_MI2S_RX_HOSTLESS mapping ok
<6>[    6.512260,0] asoc: snd-soc-dummy-dai <-> INT_FM_HOSTLESS mapping ok
<6>[    6.512762,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.241 mapping ok
<6>[    6.513203,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.240 mapping ok
<6>[    6.513799,0] compress asoc: snd-soc-dummy-dai <-> MultiMedia4 mapping ok
<6>[    6.514355,0] asoc: snd-soc-dummy-dai <-> AUXPCM_HOSTLESS mapping ok
<6>[    6.514815,0] asoc: snd-soc-dummy-dai <-> PRI_MI2S_TX_HOSTLESS mapping ok
<6>[    6.515390,0] asoc: snd-soc-dummy-dai <-> MultiMedia5 mapping ok
<6>[    6.515884,0] asoc: snd-soc-dummy-dai <-> Voice2 mapping ok
<6>[    6.516444,0] asoc: snd-soc-dummy-dai <-> QCHAT mapping ok
<6>[    6.516959,0] asoc: snd-soc-dummy-dai <-> MultiMedia9 mapping ok
<6>[    6.517611,0] asoc: msm8x10_wcd_i2s_rx1 <-> msm-dai-q6-mi2s.1 mapping ok
<6>[    6.518210,0] asoc: msm8x10_wcd_i2s_tx1 <-> msm-dai-q6-mi2s.0 mapping ok
<6>[    6.518677,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.12288 mapping ok
<6>[    6.519088,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.12289 mapping ok
<6>[    6.519561,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.12292 mapping ok
<6>[    6.520026,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.12293 mapping ok
<6>[    6.520432,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.224 mapping ok
<6>[    6.520902,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.225 mapping ok
<6>[    6.521319,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.32772 mapping ok
<6>[    6.521785,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.32771 mapping ok
<6>[    6.522193,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.32773 mapping ok
<6>[    6.522659,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.32770 mapping ok
<6>[    6.524533,0] input: msm8x10-snd-card Headset Jack as /devices/sound.46/sound/card0/input4

While in my CM with broken audio, I see this:
Code:
<6>[   15.110862,0] msm8x10-wcd-i2c-core msm8x10_wcd_codec: msm8x10_wcd_i2c_probe: irq initialization passed
<3>[   15.129928,0] msm8x10-wcd-i2c-core msm8x10_wcd_codec: Failed to add ADC1 Volume: -16
<6>[   15.161438,0] asoc: snd-soc-dummy-dai <-> MultiMedia1 mapping ok
<6>[   15.161964,0] asoc: snd-soc-dummy-dai <-> MultiMedia2 mapping ok
<6>[   15.162525,0] asoc: snd-soc-dummy-dai <-> CS-VOICE mapping ok
<6>[   15.163053,0] asoc: snd-soc-dummy-dai <-> VoIP mapping ok
<6>[   15.163599,0] asoc: snd-soc-dummy-dai <-> MultiMedia3 mapping ok
<6>[   15.164059,0] asoc: snd-soc-dummy-dai <-> SEC_MI2S_RX_HOSTLESS mapping ok
<6>[   15.164624,0] asoc: snd-soc-dummy-dai <-> INT_FM_HOSTLESS mapping ok
<6>[   15.165069,0] asoc: msm-stub-rx <-> msm-dai-q6-dev.241 mapping ok
<6>[   15.165568,0] asoc: msm-stub-tx <-> msm-dai-q6-dev.240 mapping ok
<6>[   15.166082,0] compress asoc: snd-soc-dummy-dai <-> MultiMedia4 mapping ok
<6>[   15.166636,0] asoc: snd-soc-dummy-dai <-> AUXPCM_HOSTLESS mapping ok
<6>[   15.167158,0] asoc: snd-soc-dummy-dai <-> PRI_MI2S_TX_HOSTLESS mapping ok
<6>[   15.167667,0] asoc: snd-soc-dummy-dai <-> MultiMedia5 mapping ok
<6>[   15.168222,0] asoc: snd-soc-dummy-dai <-> Voice2 mapping ok
<6>[   15.168716,0] asoc: snd-soc-dummy-dai <-> QCHAT mapping ok
<6>[   15.169293,0] asoc: snd-soc-dummy-dai <-> MultiMedia9 mapping ok
<3>[   15.169773,0] msm8x10-asoc-wcd sound.46: asoc: failed to init SEC_MI2S_RX: -22
<3>[   15.169910,0] asoc: failed to instantiate card msm8x10-snd-card: -22
<3>[   15.174388,0] msm8x10-asoc-wcd sound.46: snd_soc_register_card failed (-22)
<4>[   15.174590,0] msm8x10-asoc-wcd: probe of sound.46 failed with error -22

I've been debugging this issue in a rather tedious manner (adding debugging print messages to the kernel, recompiling on my build server, scp-ing to my local machine, copying to phone, flashing new kernel, reboot, examine dmesg, repeat). There's probably some configuration file that is missing or needs an entry changed somewhere. Error -22 is EINVAL, indicating that something was called with invalid inputs (such as NULL).

If anyone has every experienced this issue with the audio drivers, please share. Also, If anyone here has experience with a more efficient kernel debug workflow that doesn't require JTAG, I would love to hear it. My current approach is quite frustrating.
 

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
Most of you are probably not interested in this, but I'm posting my progress here for posterity's sake.

I've further narrowed down the audio issue to the tpa6165 driver. For some reason, the tpa6165_probe function (for the TPA6165 audio codec) is not being called. This causes the global tpa6165_client variable in sound/soc/codecs/tpa6165a2.c to remain NULL. Later in the boot process, one of the audio devices whose initialization is attempted is SEC_MI2S_RX. Initializing SEC_MI2S_RX invokes the msm_audrx_init function, which in turn calls tpa6165_hs_detect. In tpa6165_hs_detect, the function checks if tpa6165_client is NULL and returns EINVAL if that is the case. That results in the -22 error codes in the log snippets I posted earlier. The driver expects that probing would have been done, but for some reason it isn't being done.

The probing functions should be automatically called by the kernel for all the devices available in the SoC. These devices are specified in the dtbs. I haven't changed the dtbs, they are straight from the stock kernel. However, to save space, I'm only including production (p2b) otus dtbs. Also, I'm only including a dt.img in the boot image, and not appending the dtbs to the zImage as well. Maybe one of these differences from stock is causing the trouble.
 

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
Aha! I think I might have figured out the cause of the audio problem. Condor uses a TI TPA6165A2 audio headset detection chip, but otus switched to a Fairchild FSA8500. Motorola had a supplemental defconfig for otus that I wasn't using that disabled TPA6165A2 and enabled FSA8500. I'm creating a new build with this change, and if stars are aligned just right, audio will work. Fingers crossed...
 
  • Like
Reactions: magdeoz

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
New May 9 Release

I'm pleased to announce a new, vastly improved release today. This new release fixes audio, camera, auto brightness, media codecs, and it will hopefully make RIL work on dual sim models as well. This is the first "usable" release of this ROM. Please test it and let me know if the cellular radio is working on your device (voice, text, and data). It may or may not work on South American devices. Test it, let me know if it works, and post your stock rom getprop if it doesn't.

Be aware that WiFi is still a bit slow to connect. I will investigate this issue when I have time, but the nearly 10 hours of debugging that went into this release are enough for this weekend.

Downloads are up on the first post.
 
Last edited:

raghavarora1997

Senior Member
Jan 13, 2015
58
21
Everything works fine in this new build.
Camera is working
RIL issue is solved
Audio is working
Brightness control is working (even when adaptive brightness is enabled)
WiFi seems to be a bit slow.
Ambient display is not working
Except that I don't see any bug.
EDIT: trusted face stops working
 
Last edited:
  • Like
Reactions: dulce.ai.angel

squid2

Recognized Developer
Mar 9, 2015
1,722
10,983
Ontario
Everything works fine in this new build.
Camera is working
RIL issue is solved
Audio is working
Brightness control is working (even when adaptive brightness is enabled)
WiFi seems to be a bit slow.
Ambient display is not working
Except that I don't see any bug.

I haven't yet implemented ambient display. I'm glad to hear that RIL is working.
 

santoshvaza

Senior Member
Apr 25, 2014
129
17
Mumbai
I flashed this rom thrice, because every time I flash gapps, Google play service stopped working after boot, then I knew rom is compatible with only eurosank gapps.
.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 43
    1oXkC6z.png


    I have ported CyanogenMod to the 2015 Moto E 3G, codenamed otus. Be sure to back up your stock rom before flashing this. Flash it with TWRP. I recommend CM gapps with this ROM.

    I must give huge thanks to @scritch007 and @percy_g2 for porting CyanogenMod to the first gen Moto E (condor). I've built my device tree using their condor device tree as a base.

    Changelog:
    Official nightly changelogs
    Code:
    December 16, 2015:
    - Unofficial security update build
    
    September 12, 2015:
    - First official nightly build
    
    September 5, 2015:
    - Improved RAM management
    - Improved auto brightness calibration
    - Cleaned up vendor blobs
    - CM updates
    
    September 3, 2015:
    - Fixed camera regression in previous build
    - CM updates
    
    September 1, 2015:
    - Fixed headphone detection at boot time
    - Bluetooth fixes
    - CM updates
    
    August 28, 2015:
    - Kernel security and reliability improvements
    - CM updates
    
    August 24, 2015:
    - Added LED notification support
    - Properly runs sensor hub firmware script at boot
    
    August 22, 2015:
    - Uses prebuilt libOmxVdec
    - Fully fixed YouTube issues
    
    August 21, 2015 - Build 2:
    - Disabled AAC compressed offload playback
    - This seems to have mostly fixed the YouTube issues
    
    August 21, 2015:
    - Further cleaned up vendor blobs
    - Cleaned up device tree
    - CM updates
    
    August 9, 2015:
    - Cleaned up unused vendor blobs
    - Updated power management overlay for more accurate battery stats
    - CM updates
    
    August 1, 2015:
    - Fixed Indian time zone issues (recents key, gapps crashes)
    - Updated driver blobs and kernel
    - CM updates
    
    July 29, 2015:
    - CM updates
    
    July 16, 2015:
    - Added USA XT1511 support
    - CM updates
    
    July 14, 2015:
    - CM updates
    
    July 3, 2015:
    - CM updates
    - Additional RIL settings for XT1506
    
    July 1, 2015:
    - CM updates
    - Updated f2fs drivers
    
    June 27, 2015:
    - CM updates
    
    June 19, 2015:
    - Updated kernel to Linux 3.4.108
    - CM updates
    
    June 18, 2015 (June 17th in Canada):
    - Reduced ADSP crash frequency
    - CM updates
    - You might need to reflash gapps
    
    June 12, 2015:
    - CM updates
    
    June 6, 2015:
    - CM updates
    - Miscellaneous kernel fixes
    
    May 29, 2015:
    - CM updates
    - Added missing vendor blobs
    
    May 16, 2015 - Build 2:
    - Disabled FFMPEG offload to reduce ADSP crash frequency
    - You MUST wipe your system partition before installing this build
    
    May 16, 2015:
    - Updated to Linux Kernel 3.4.107
    - Fixed FM radio
    - Updated WiFi drivers
    - Faster WiFi network detection and connection
    - Various other bugfixes for issues encountered in testing
    - Updated vendor apks
    - Enforcing SELinux and sepolicy fixes
    - Added fiops IO scheduler to kernel
    
    May 10, 2015:
    - Slightly faster WiFi network detection
    
    May 9, 2015:
    - Fixed audio
    - Fixed camera
    - Fixed media codecs
    - Fixed auto brightness
    - RIL fixes for Indian dual SIM model
    
    May 8, 2015:
    - New kernel that is appropriate for this device
    - Accelerometer is fixed
    - All the changes in CyanogenMod
    
    May 2, 2015:
    - Initial release

    Sources:
    Device Tree: https://github.com/CyanogenMod/android_device_motorola_otus
    Vendor Tree: https://github.com/sultanqasim/android_vendor_motorola_otus
    Kernel Tree: https://github.com/CyanogenMod/android_kernel_motorola_otus

    Downloads:
    December 16th Unofficial Build
    OFFICIAL NIGHTLY BUILDS
    Mirror of final (November 30) nightly build

    Old Unofficial Builds:
    September 5 Release
    September 3 Release
    September 1 Release
    August 28 Release
    August 24 Release
    August 22 Release
    August 21 Build 2
    August 21 Release
    August 9 Release
    August 1 Release
    July 29 Release
    July 16 Release
    July 14 Release
    July 3 Release
    July 1 Release
    June 27 Release
    June 19 Release
    June 18 Release
    June 12 Release
    June 6 Release
    May 29 Release
    May 16 Build 2
    May 16 Release
    May 10 Release
    May 9 Release
    May 8 Release
    May 2 Release


    XDA:DevDB Information
    CyanogenMod 12.1 for Moto E 3G, ROM for the Moto E 2015

    Contributors
    squid2, scritch007, percy_g2
    ROM OS Version: 5.1.x Lollipop
    ROM Kernel: Linux 3.4.x

    Version Information
    Status: Stable

    Created 2015-05-02
    Last Updated 2015-12-15
    19
    Installation Instructions

    To perform a clean install:
    1. Boot up my TWRP
    2. Go to Wipe->Advanced Wipe, select Dalvik Cache, System, Data, and Cache, then swipe to wipe
    3. Return to the TWRP home screen, go to Install, and add two zips to the queue: first my CM ROM, then the latest CM 12.1 gapps
    4. Swipe to flash the two zips
    5. Reboot once flashing is complete (and be patient for the first boot, it takes a while)

    Not wiping everything correctly or installing the wrong gapps may cause issues.

    To upgrade between consecutive releases of my CM without any major changes:
    1. Boot up my TWRP
    2. Go to Install, and add two zips to the queue: first my CM ROM, then the latest CM 12.1 gapps
    3. Swipe to flash the two zips
    4. After flashing is complete, wipe cache and dalvik
    5. Reboot (and be patient for the first boot, it takes a while)

    If you encounter any issues after an upgrade, try performing a clean install before reporting a bug.

    Video Demo
    @chintu112 has made a video demo of this ROM that you can watch to see what it is like.
    11
    CM13 Preview Build

    I've had a few people ask for a preview build of CM13, so here you have one: http://www.mediafire.com/download/2ibn5sdzf8bzd76/cm-13-20151017-HACKED-otus.zip

    I've labeled the zip as "HACKED" because it uses a hand-modified boot image (CM12.1/CM13 hybrid) to make it boot. It might take longer than usual to flash using TWRP, and it will take a while to boot up the first time. You won't see the "Android is optimizing apps" screen, it will stay at the boot animation the whole time till it's done odexing everything. Don't worry if it seems to be stuck at the boot animation, give it 10 minutes before you give up (it usually boots up in less time, but be patient).

    This is a premature build, and most things are broken. Don't tell me that things are broken, I'm not looking for testers at this time, this just an early preview for your own disappointment.

    What works: booting, display, wifi
    What's broken: RIL, FM radio, camera, MotoDoze, external SD card, everything else

    Once again, I warn you that this is a very premature build. Don't flash it unless you don't care about having a working device and are only curious about Android 6.

    Also, if you are interested in building yourself, you can take a look at necessary cherry-picks here: https://gist.github.com/sultanqasim/22bca9f7bca4d067b12b
    This list is changing by the hour, and may be out of date by the time you look at it, but it's just there for your reference.
    9
    ClockWorkMod Recovery

    Nobody needs this, I don't know why anyone would want this, but I do get a CWM recovery for free when porting CyanogenMod to a device. For anyone who for some strange reason wants a CWM recovery, I've posted one to the downloads tab of this thread. Flash it with fastboot. If you don't know how, don't use it. Use at your own risk. I haven't tested it.

    I recommend TWRP to all sane people.
    9
    August 9 Release

    I've posted a new build with updated power management overlays (for more accurate battery stats), and cleaned up vendor blobs. As usual, it also includes all the latest updates to CyanogenMod. The download is up on the first post.