PaddleStroke

Members
  • Content Count

    51
  • Joined

  • Last visited

About PaddleStroke

  • Rank
    Advanced Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. If you're using mainline kernel the HDMI audio is not supported on A20.
  2. Hey guys, I see the HDMI audio is not supported in the status matrix. Do you know what is missing exactly? I read it predepends on DRM driver, do you know which part is missing? I read in #linux-sunxi IRC history that there are some patches for HDMI audio for H3 H6 H64. What about A20 ? Is there any patches available?
  3. Regarding the uboot error I discussed before. Actually the kernel driver is doing exactly the same thing : https://github.com/torvalds/linux/blob/master/drivers/mfd/axp20x.c static void axp20x_power_off(void) { if (axp20x_pm_power_off->variant == AXP288_ID) return; regmap_write(axp20x_pm_power_off->regmap, AXP20X_OFF_CTRL, AXP20X_OFF); /* Give capacitors etc. time to drain to avoid kernel panic msg. */ msleep(500); } AXP20X_OFF = bit(7) So it does the same thing. On shutdown it writes bit(7) on reg32. The problem is when you boot after on PEK press, the AXP regs are not reset. So the reg32 is not set back to default value but keep instead bit(7). Which makes that battery detection is disabled. Should be replaced by static void axp20x_power_off(void) { if (axp20x_pm_power_off->variant == AXP288_ID) return; regmap_update_bits(axp20x_pm_power_off->regmap, AXP20X_OFF_CTRL, AXP20X_OFF, AXP20X_OFF); /* Give capacitors etc. time to drain to avoid kernel panic msg. */ msleep(500); } What do you think?
  4. I tried to write to u-boot-patches@bugs.denx.de but got a automatic reply saying address is NOK.
  5. Yes you are right. I'll finish to understand everything before adding anything though. Btw do you know how to make a bug report to u-boot?
  6. Also the uboot driver has a problem I think : int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { pmic_bus_write(AXP209_SHUTDOWN, AXP209_POWEROFF); /* infinite loop during shutdown */ while (1) {} /* not reached */ return 0; } #define AXP209_POWEROFF BIT(7) AXP209_SHUTDOWN = 0x32 So actually on every power off, uboot write BIT(7) to REG 32. Now I understand why at boot the kernel AXP20x driver triggers to set battery detection ON as it's also on REG32. It does not use mask to write only bit 7, so I guess it writes 1000 0000 to the REG... I think it should use "pmic_bus_setbits" instead of "pmic_bus_write" what do you think? If someone can confirm this.
  7. I found the reason why IRQ REG show 00 and why GPIO keep reseting... It's the u-boot driver for AXP209: https://gitlab.denx.de/u-boot/u-boot/blob/master/drivers/power/axp209.c https://gitlab.denx.de/u-boot/u-boot/blob/master/include/axp209.h This files is giving me 2/3 of my troubles : /* Mask all interrupts */ for (i = AXP209_IRQ_ENABLE1; i <= AXP209_IRQ_ENABLE5; i++) { rc = pmic_bus_write(i, 0); if (rc) return rc; } This is why REG 40 is 00... /* * Turn off LDOIO regulators / tri-state GPIO pins, when rebooting * from android these are sometimes on. */ rc = pmic_bus_write(AXP_GPIO0_CTRL, AXP_GPIO_CTRL_INPUT); if (rc) return rc; rc = pmic_bus_write(AXP_GPIO1_CTRL, AXP_GPIO_CTRL_INPUT); if (rc) return rc; rc = pmic_bus_write(AXP_GPIO2_CTRL, AXP_GPIO_CTRL_INPUT); if (rc) return rc; Reset the 3 GPIO status... Only the battery voltage error does not come from this. I think it probably comes from : https://github.com/torvalds/linux/blob/master/drivers/power/supply/axp20x_battery.c However I am not sure how the driver is getting executed. What is the calling sequence of it.
  8. GPIO-AXP209.c Ok there's a page in bindings about this driver : https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/gpio/gpio-axp209.txt There's even a armbian patch about this driver binding text : https://github.com/armbian/build/blob/master/patch/kernel/sunxi-next/0104-dt-bindings-gpio-gpio-axp209-add-AXP803-GPIO-binding.patch but the driver itself cannot be found on github... maybe it's name changed to this one : https://github.com/torvalds/linux/blob/master/drivers/pinctrl/pinctrl-axp209.c if so why is there still a gpio-axp209.txt and a patch for this.
  9. After few more test I can say that reg 33 (the one for max voltage) get reset when you boot on AC connection. Not when you boot on PEK pressed. Why? No ideas yet. Dmesg don't give any hint.
  10. I found a problem with either armbian patch for AXP20X.c driver or with i2Cset too. Running : sudo i2cset -y -f 0 0x34 0x33 0xe9 #0x33 is AXP20X_CHRG_CTRL1. Value read with i2cget before is 0xc9 sudo i2cset -y -f 0 0x34 0x90 0x04 #0x90 is AXP20X_GPIO0_CTRL. Value read with i2cget before is is 0x02 sudo i2cset -y -f 0 0x34 0x92 0x04 #0x92 is AXP20X_GPIO1_CTRL. Value read with i2cget before is is 0x02 Change the register values correctly. Then on reboot we have : sudo i2cget -y -f 0 0x34 0x33 0xe9 sudo i2cget -y -f 0 0x34 0x90 0x02 sudo i2cget -y -f 0 0x34 0x92 0x02 0x90 and 0x92 reseted (0x33 reset only when booting when AC-plugged in power. Not when PEK pressed...). I check Dmesg and find one difference compared to normal boot without modifications: axp20x-i2c 0-0034: Battery detection is disabled, enabling So I check the armbian patch of AXP20X.c and find this error message in this part of the code : + /* Enable battery detection */ + ret = regmap_read(axp->regmap, AXP20X_OFF_CTRL, &res); + if (ret == 0) { + if ((res & 0x40) != 0x40) { + dev_info(axp->dev, "Battery detection is disabled, enabling"); + ret = regmap_update_bits(axp->regmap, AXP20X_OFF_CTRL, 0x40, 0x40); + if (ret) + dev_warn(axp->dev, "Unable to enable battery detection: %d", ret); + } + } else + dev_warn(axp->dev, "Unable to read register AXP20X_OFF_CTRL: %d", ret); interestingly the error is triggered after reading AXP20X_OFF_CTRL ( Reg 0x32)... Which is not one that I have been modifying?? I am not sure to understand what is going on there: - Either the i2Cset/I2Cget tool is not working properly. - Either something is wrong in the patch. But it looks correct as it uses AXP20X_OFF_CTRL which is 0x32 and change only bit 6 to 1. - Either something is wrong with regmap?
  11. What is the difference between TCON, framebuffer, pipeline, front end, display ? I found that it seems that linux framebuffers have been replaced by DRM on mainline. But can't find much information about this. https://www.kernel.org/doc/Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt Anyone familiar with framebuffers/display/... can give me the big picture on how this is organized ?
  12. I found several files about AXP on the torvalds github. Note: Megeous github (torvalds fork which is used for Armbian build if I am not mistaken) files are slightly different... So the main driver seems to be this one: https://github.com/torvalds/linux/blob/master/drivers/mfd/axp20x.c https://github.com/torvalds/linux/blob/master/include/linux/mfd/axp20x.h https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/mfd/axp20x.txt Then there are several complementary-drivers : https://github.com/torvalds/linux/blob/master/drivers/input/misc/axp20x-pek.c https://github.com/torvalds/linux/blob/master/drivers/mfd/axp20x-i2c.c https://github.com/torvalds/linux/blob/master/drivers/regulator/axp20x-regulator.c https://github.com/torvalds/linux/blob/master/drivers/iio/adc/axp20x_adc.c https://github.com/torvalds/linux/blob/master/drivers/power/supply/axp20x_battery.c https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/power/supply/axp20x_battery.txt https://github.com/torvalds/linux/blob/master/drivers/pinctrl/pinctrl-axp209.c https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/gpio/gpio-axp209.txt Not 100% sure if these last c and txt files are related as there is no gpio-axp209.c nor pinctrl-axp209.txt so I think it's just naming issue. Then on top of that you have a armbian patch of the main axp20X.c : https://github.com/armbian/build/blob/master/patch/kernel/sunxi-next/general-axp20x-sysfs-interface.patch Or this one seems related but not sure it's included: https://github.com/QSchulz/linux/commit/aa13f8990a2482e951f72d5c70c2f4cedf2684c6#diff-dfdc0dfa3d0d84a7e9a84c9baa75b869
  13. I have been trying to do my own scrip to read/write directly reg values with i2C. But changing parameters with i2Cset are overwriten after reboot, probably by the current driver... i2cset -y -f 0 0x34 0x33 0xE9 This should change to 4.36V. This setting get reseted to 0xC9 but only when the unit boot on AC connection. Booting on PEK press does not reset it. Very strange. i2cset -y -f 0 0x34 0x83 0x8C This setting does not get reset! i2cset -y -f 0 0x34 0x90 0x04 i2cset -y -f 0 0x34 0x92 0x04 Those two should set the GPIO 0 and 1 functions as ADC. Those don't work they keep reseting to 0x02 after any reboot (AC plugged in boot or PEK press boot)... i2cget -y -f 0 0x34 0x40 This REG 40 should be a list of IRQ enabled. Someone suggested bit 6 to be the boot when AC plugged-in parameter. But very strangely the reg40 reads 0x00 instead of normal default value of 0xD8... Same for other IRQ REGs 41 and 42. So this means the AXP209 driver is messing things up for us..!
  14. Is anyone know how to set HDMI and LCD simultaneously on mainline kernel? We use a 3.5" LCD for which we made a patch (see enclosed). Now I'd like to have both HDMI and LCD showing the same framebuffer. Currently HDMI is only showing the console while signal is OK on LCD. Any hint would be appreciated. u-boot-sunxi-next.patch kernel-sunxi-next.patch
  15. Hey guys, It seems that some graphics card (probably the one integrated in the a20 processor) are able to manage multiple memory buffer and thus several layers for one display. Is it possible to declare two framebuffers for the main display: like fb0 - layer1 / fb1 - layer2 with alpha channel? So it would be easier to implement overlay display for information about the battery or the brightness level of the screen.