| The U-Boot Driver Model Project | 
 | =============================== | 
 | POWER analysis | 
 | ============== | 
 | Viktor Krivak <viktor.krivak@gmail.com> | 
 | 2012-03-09 | 
 |  | 
 | I) Overview | 
 | ----------- | 
 |  | 
 |   1) Actual state | 
 |   --------------- | 
 |  | 
 |   At this moment power doesn't contain API. There are many methods for | 
 |   initialization of some board specific functions but only few does what is | 
 |   expected. Basically only one file contains something meaningful for this | 
 |   driver. | 
 |  | 
 |   2) Current implementation | 
 |   ------------------------- | 
 |  | 
 |   In file twl6030.c are methods twl6030_stop_usb_charging() and | 
 |   twl6030_start_usb_charging() for start and stop charging from USB. There are | 
 |   also methods to get information about battery state and initialization of | 
 |   battery charging. Only these methods are used in converted API. | 
 |  | 
 |  | 
 | II) Approach | 
 | ------------ | 
 |  | 
 |   1) New API | 
 |   ---------- | 
 |  | 
 |   New API implements only functions specific for managing power. All board | 
 |   specific init methods are moved to other files. Name of methods are | 
 |   self-explanatory. | 
 |  | 
 |   struct ops { | 
 |     void (*start_usb_charging)(struct instance *i); | 
 |     void (*stop_usb_charging)(struct instance *i); | 
 |     int  (*get_battery_current)(struct instance *i); | 
 |     int  (*get_battery_voltage)(struct instance *i); | 
 |     void (*init_battery_charging)(struct instance *i); | 
 |   } | 
 |  | 
 |   2) Conversions of other methods | 
 |   ------------------------------- | 
 |  | 
 |   Methods that can't be converted to new API are moved to board file or to | 
 |   special file for board hacks. | 
 |  | 
 | III) Analysis of in-tree drivers | 
 | -------------------------------- | 
 |  | 
 |   1) ftpmu010.c | 
 |   ------------- | 
 |   All methods of this file are moved to another location. | 
 |     void ftpmu010_32768osc_enable(void): Move to boards hacks | 
 |     void ftpmu010_mfpsr_select_dev(unsigned int dev): Move to board file | 
 |                                                       arch/nds32/lib/board.c | 
 |     void ftpmu010_mfpsr_diselect_dev(unsigned int dev): Dead code | 
 |     void ftpmu010_dlldis_disable(void): Dead code | 
 |     void ftpmu010_sdram_clk_disable(unsigned int cr0): Move to board file | 
 |                                                        arch/nds32/lib/board.c | 
 |     void ftpmu010_sdramhtc_set(unsigned int val): Move to board file | 
 |                                                   arch/nds32/lib/board.c | 
 |  | 
 |   2) twl4030.c | 
 |   ------------ | 
 |   All methods of this file are moved to another location. | 
 |     void twl4030_power_reset_init(void): Move to board hacks | 
 |     void twl4030_pmrecv_vsel_cfg(u8 vsel_reg, u8 vsel_val, u8 dev_grp, | 
 |                                  u8 dev_grp_sel): Move to board hacks | 
 |     void twl4030_power_init(void): Move to board hacks | 
 |     void twl4030_power_mmc_init(void): Move to board hacks | 
 |  | 
 |   3) twl6030.c | 
 |   ------------ | 
 |   Some methods are converted to new API and rest are moved to another location. | 
 |     void twl6030_stop_usb_charging(void): Convert to new API | 
 |     void twl6030_start_usb_charging(void): Convert to new API | 
 |     int twl6030_get_battery_current(void): Convert to new API | 
 |     int twl6030_get_battery_voltage(void): Convert to new API | 
 |     void twl6030_init_battery_charging(void): Convert to new API | 
 |     void twl6030_power_mmc_init(): Move to board file | 
 |                                    drivers/mmc/omap_hsmmc.c | 
 |     void twl6030_usb_device_settings(): Move to board file | 
 |                                         drivers/usb/musb/omap3.c |