esp8266: open drain PWM?
When driving a high-side switching transistor with an external pull-up resistor the Pin.OPEN_DRAIN output works well (with negative logic, so grounding the output turns it on and letting it float turns it off). The PWM module however has a comment that it explicitly disables the open drain, which prevents the transistor from being able to fully turn off: https://github.com/micropython/micropython/blob/master/ports/esp8266/esppwm.c#L387
Is there a reason to do this rather than leaving the pin in the mode configured by the python code?
esp8266: fix GPIO16 open drain mode
This adds a working open drain mode for GPIO16. Looks like the original plan to overcome the lack of (apparently missing) control register for open drain driver was to switch between input and output mode with low state.
In general this solution works well but control logic for GPIO_MODE_OPEN_DRAIN in set_pin() function was missing.
There's also a minor cleanup in mp_hal_pin_open_drain(). Setting output register value won't hurt, but is unnecessary.