489
494
/*----------------------------------------------------------------------*/
497
* twl_read_idcode_register - API to read the IDCODE register.
499
* Unlocks the IDCODE register and read the 32 bit value.
501
static int twl_read_idcode_register(void)
505
err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, TWL_EEPROM_R_UNLOCK,
506
REG_UNLOCK_TEST_REG);
508
pr_err("TWL4030 Unable to unlock IDCODE registers -%d\n", err);
512
err = twl_i2c_read(TWL4030_MODULE_INTBR, (u8 *)(&twl_idcode),
515
pr_err("TWL4030: unable to read IDCODE -%d\n", err);
519
err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, 0x0, REG_UNLOCK_TEST_REG);
521
pr_err("TWL4030 Unable to relock IDCODE registers -%d\n", err);
527
* twl_get_type - API to get TWL Si type.
529
* Api to get the TWL Si type from IDCODE value.
531
int twl_get_type(void)
533
return TWL_SIL_TYPE(twl_idcode);
535
EXPORT_SYMBOL_GPL(twl_get_type);
538
* twl_get_version - API to get TWL Si version.
540
* Api to get the TWL Si version from IDCODE value.
542
int twl_get_version(void)
544
return TWL_SIL_REV(twl_idcode);
546
EXPORT_SYMBOL_GPL(twl_get_version);
491
548
static struct device *
492
549
add_numbered_child(unsigned chip, const char *name, int num,
493
550
void *pdata, unsigned pdata_len,
735
816
return PTR_ERR(child);
738
if (twl_has_codec() && pdata->codec && twl_class_is_4030()) {
819
if (twl_has_codec() && pdata->audio && twl_class_is_4030()) {
739
820
sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
740
821
child = add_child(sub_chip_id, "twl4030-audio",
741
pdata->codec, sizeof(*pdata->codec),
822
pdata->audio, sizeof(*pdata->audio),
743
824
if (IS_ERR(child))
744
825
return PTR_ERR(child);
747
/* Phoenix codec driver is probed directly atm */
748
if (twl_has_codec() && pdata->codec && twl_class_is_6030()) {
828
if (twl_has_codec() && pdata->audio && twl_class_is_6030()) {
749
829
sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
750
child = add_child(sub_chip_id, "twl6040-audio",
751
pdata->codec, sizeof(*pdata->codec),
830
child = add_child(sub_chip_id, "twl6040",
831
pdata->audio, sizeof(*pdata->audio),
753
833
if (IS_ERR(child))
754
834
return PTR_ERR(child);
757
837
/* twl4030 regulators */
758
838
if (twl_has_regulator() && twl_class_is_4030()) {
759
child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1);
761
return PTR_ERR(child);
763
child = add_regulator(TWL4030_REG_VIO, pdata->vio);
765
return PTR_ERR(child);
767
child = add_regulator(TWL4030_REG_VDD1, pdata->vdd1);
769
return PTR_ERR(child);
771
child = add_regulator(TWL4030_REG_VDD2, pdata->vdd2);
773
return PTR_ERR(child);
775
child = add_regulator(TWL4030_REG_VMMC1, pdata->vmmc1);
777
return PTR_ERR(child);
779
child = add_regulator(TWL4030_REG_VDAC, pdata->vdac);
839
child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1,
842
return PTR_ERR(child);
844
child = add_regulator(TWL4030_REG_VIO, pdata->vio,
847
return PTR_ERR(child);
849
child = add_regulator(TWL4030_REG_VDD1, pdata->vdd1,
852
return PTR_ERR(child);
854
child = add_regulator(TWL4030_REG_VDD2, pdata->vdd2,
857
return PTR_ERR(child);
859
child = add_regulator(TWL4030_REG_VMMC1, pdata->vmmc1,
862
return PTR_ERR(child);
864
child = add_regulator(TWL4030_REG_VDAC, pdata->vdac,
780
866
if (IS_ERR(child))
781
867
return PTR_ERR(child);
783
869
child = add_regulator((features & TWL4030_VAUX2)
784
870
? TWL4030_REG_VAUX2_4030
785
871
: TWL4030_REG_VAUX2,
788
return PTR_ERR(child);
790
child = add_regulator(TWL4030_REG_VINTANA1, pdata->vintana1);
792
return PTR_ERR(child);
794
child = add_regulator(TWL4030_REG_VINTANA2, pdata->vintana2);
796
return PTR_ERR(child);
798
child = add_regulator(TWL4030_REG_VINTDIG, pdata->vintdig);
872
pdata->vaux2, features);
874
return PTR_ERR(child);
876
child = add_regulator(TWL4030_REG_VINTANA1, pdata->vintana1,
879
return PTR_ERR(child);
881
child = add_regulator(TWL4030_REG_VINTANA2, pdata->vintana2,
884
return PTR_ERR(child);
886
child = add_regulator(TWL4030_REG_VINTDIG, pdata->vintdig,
799
888
if (IS_ERR(child))
800
889
return PTR_ERR(child);
803
892
/* maybe add LDOs that are omitted on cost-reduced parts */
804
893
if (twl_has_regulator() && !(features & TPS_SUBSET)
805
894
&& twl_class_is_4030()) {
806
child = add_regulator(TWL4030_REG_VPLL2, pdata->vpll2);
808
return PTR_ERR(child);
810
child = add_regulator(TWL4030_REG_VMMC2, pdata->vmmc2);
812
return PTR_ERR(child);
814
child = add_regulator(TWL4030_REG_VSIM, pdata->vsim);
816
return PTR_ERR(child);
818
child = add_regulator(TWL4030_REG_VAUX1, pdata->vaux1);
820
return PTR_ERR(child);
822
child = add_regulator(TWL4030_REG_VAUX3, pdata->vaux3);
824
return PTR_ERR(child);
826
child = add_regulator(TWL4030_REG_VAUX4, pdata->vaux4);
895
child = add_regulator(TWL4030_REG_VPLL2, pdata->vpll2,
898
return PTR_ERR(child);
900
child = add_regulator(TWL4030_REG_VMMC2, pdata->vmmc2,
903
return PTR_ERR(child);
905
child = add_regulator(TWL4030_REG_VSIM, pdata->vsim,
908
return PTR_ERR(child);
910
child = add_regulator(TWL4030_REG_VAUX1, pdata->vaux1,
913
return PTR_ERR(child);
915
child = add_regulator(TWL4030_REG_VAUX3, pdata->vaux3,
918
return PTR_ERR(child);
920
child = add_regulator(TWL4030_REG_VAUX4, pdata->vaux4,
827
922
if (IS_ERR(child))
828
923
return PTR_ERR(child);
831
926
/* twl6030 regulators */
927
if (twl_has_regulator() && twl_class_is_6030() &&
928
!(features & TWL6025_SUBCLASS)) {
929
child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc,
932
return PTR_ERR(child);
934
child = add_regulator(TWL6030_REG_VPP, pdata->vpp,
937
return PTR_ERR(child);
939
child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim,
942
return PTR_ERR(child);
944
child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio,
947
return PTR_ERR(child);
949
child = add_regulator(TWL6030_REG_VDAC, pdata->vdac,
952
return PTR_ERR(child);
954
child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1,
957
return PTR_ERR(child);
959
child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2,
962
return PTR_ERR(child);
964
child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3,
967
return PTR_ERR(child);
969
child = add_regulator(TWL6030_REG_CLK32KG, pdata->clk32kg,
972
return PTR_ERR(child);
975
/* 6030 and 6025 share this regulator */
832
976
if (twl_has_regulator() && twl_class_is_6030()) {
833
child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc);
835
return PTR_ERR(child);
837
child = add_regulator(TWL6030_REG_VPP, pdata->vpp);
839
return PTR_ERR(child);
841
child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim);
843
return PTR_ERR(child);
845
child = add_regulator(TWL6030_REG_VANA, pdata->vana);
847
return PTR_ERR(child);
849
child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio);
851
return PTR_ERR(child);
853
child = add_regulator(TWL6030_REG_VDAC, pdata->vdac);
855
return PTR_ERR(child);
857
child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1);
859
return PTR_ERR(child);
861
child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2);
863
return PTR_ERR(child);
865
child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3);
867
return PTR_ERR(child);
869
child = add_regulator(TWL6030_REG_CLK32KG, pdata->clk32kg);
871
return PTR_ERR(child);
977
child = add_regulator(TWL6030_REG_VANA, pdata->vana,
980
return PTR_ERR(child);
983
/* twl6025 regulators */
984
if (twl_has_regulator() && twl_class_is_6030() &&
985
(features & TWL6025_SUBCLASS)) {
986
child = add_regulator(TWL6025_REG_LDO5, pdata->ldo5,
989
return PTR_ERR(child);
991
child = add_regulator(TWL6025_REG_LDO1, pdata->ldo1,
994
return PTR_ERR(child);
996
child = add_regulator(TWL6025_REG_LDO7, pdata->ldo7,
999
return PTR_ERR(child);
1001
child = add_regulator(TWL6025_REG_LDO6, pdata->ldo6,
1004
return PTR_ERR(child);
1006
child = add_regulator(TWL6025_REG_LDOLN, pdata->ldoln,
1009
return PTR_ERR(child);
1011
child = add_regulator(TWL6025_REG_LDO2, pdata->ldo2,
1014
return PTR_ERR(child);
1016
child = add_regulator(TWL6025_REG_LDO4, pdata->ldo4,
1019
return PTR_ERR(child);
1021
child = add_regulator(TWL6025_REG_LDO3, pdata->ldo3,
1024
return PTR_ERR(child);
1026
child = add_regulator(TWL6025_REG_SMPS3, pdata->smps3,
1029
return PTR_ERR(child);
1031
child = add_regulator(TWL6025_REG_SMPS4, pdata->smps4,
1034
return PTR_ERR(child);
1036
child = add_regulator(TWL6025_REG_VIO, pdata->vio6025,
1039
return PTR_ERR(child);
874
1043
if (twl_has_bci() && pdata->bci &&