Lines Matching defs:nvsw_sn2201
119 /* nvsw_sn2201 - device private data
136 struct nvsw_sn2201 {
892 nvsw_sn2201_create_static_devices(struct nvsw_sn2201 *nvsw_sn2201,
904 dev_err(nvsw_sn2201->dev, "Failed to create client %s at bus %d at addr 0x%02x\n",
926 static void nvsw_sn2201_destroy_static_devices(struct nvsw_sn2201 *nvsw_sn2201,
943 static int nvsw_sn2201_config_post_init(struct nvsw_sn2201 *nvsw_sn2201)
950 dev = nvsw_sn2201->dev;
951 adap = i2c_get_adapter(nvsw_sn2201->main_mux_deferred_nr);
954 nvsw_sn2201->main_mux_deferred_nr);
960 sn2201_dev = nvsw_sn2201->sn2201_devs;
961 for (i = 0; i < nvsw_sn2201->sn2201_devs_num; i++, sn2201_dev++) {
968 err = nvsw_sn2201_create_static_devices(nvsw_sn2201, nvsw_sn2201->sn2201_devs,
969 nvsw_sn2201->sn2201_devs_num);
976 static int nvsw_sn2201_config_init(struct nvsw_sn2201 *nvsw_sn2201, void *regmap)
978 struct device *dev = nvsw_sn2201->dev;
981 nvsw_sn2201->io_data = &nvsw_sn2201_regs_io;
982 nvsw_sn2201->led_data = &nvsw_sn2201_led;
983 nvsw_sn2201->wd_data = &nvsw_sn2201_wd;
984 nvsw_sn2201->hotplug_data = &nvsw_sn2201_hotplug;
987 if (nvsw_sn2201->io_data) {
988 nvsw_sn2201->io_data->regmap = regmap;
989 nvsw_sn2201->io_regs =
991 nvsw_sn2201->io_data,
992 sizeof(*nvsw_sn2201->io_data));
993 if (IS_ERR(nvsw_sn2201->io_regs)) {
994 err = PTR_ERR(nvsw_sn2201->io_regs);
1000 if (nvsw_sn2201->led_data) {
1001 nvsw_sn2201->led_data->regmap = regmap;
1002 nvsw_sn2201->led =
1004 nvsw_sn2201->led_data,
1005 sizeof(*nvsw_sn2201->led_data));
1006 if (IS_ERR(nvsw_sn2201->led)) {
1007 err = PTR_ERR(nvsw_sn2201->led);
1013 if (nvsw_sn2201->wd_data) {
1014 nvsw_sn2201->wd_data->regmap = regmap;
1015 nvsw_sn2201->wd =
1017 nvsw_sn2201->wd_data,
1018 sizeof(*nvsw_sn2201->wd_data));
1019 if (IS_ERR(nvsw_sn2201->wd)) {
1020 err = PTR_ERR(nvsw_sn2201->wd);
1026 if (nvsw_sn2201->hotplug_data) {
1027 nvsw_sn2201->hotplug_data->regmap = regmap;
1028 nvsw_sn2201->pdev_hotplug =
1032 nvsw_sn2201->hotplug_data,
1033 sizeof(*nvsw_sn2201->hotplug_data));
1034 if (IS_ERR(nvsw_sn2201->pdev_hotplug)) {
1035 err = PTR_ERR(nvsw_sn2201->pdev_hotplug);
1040 return nvsw_sn2201_config_post_init(nvsw_sn2201);
1043 if (nvsw_sn2201->wd)
1044 platform_device_unregister(nvsw_sn2201->wd);
1046 if (nvsw_sn2201->led)
1047 platform_device_unregister(nvsw_sn2201->led);
1049 if (nvsw_sn2201->io_regs)
1050 platform_device_unregister(nvsw_sn2201->io_regs);
1056 static void nvsw_sn2201_config_exit(struct nvsw_sn2201 *nvsw_sn2201)
1059 if (nvsw_sn2201->pdev_hotplug)
1060 platform_device_unregister(nvsw_sn2201->pdev_hotplug);
1062 if (nvsw_sn2201->wd)
1063 platform_device_unregister(nvsw_sn2201->wd);
1065 if (nvsw_sn2201->led)
1066 platform_device_unregister(nvsw_sn2201->led);
1068 if (nvsw_sn2201->io_regs)
1069 platform_device_unregister(nvsw_sn2201->io_regs);
1082 struct nvsw_sn2201 *nvsw_sn2201 = handle;
1087 nvsw_sn2201->main_mux_devs->adapter = i2c_get_adapter(nvsw_sn2201->main_mux_devs->nr);
1088 if (!nvsw_sn2201->main_mux_devs->adapter) {
1090 dev_err(nvsw_sn2201->dev, "Failed to get adapter for bus %d\n",
1091 nvsw_sn2201->cpld_devs->nr);
1095 nvsw_sn2201->main_mux_devs_num = ARRAY_SIZE(nvsw_sn2201_main_mux_brdinfo);
1096 err = nvsw_sn2201_create_static_devices(nvsw_sn2201, nvsw_sn2201->main_mux_devs,
1097 nvsw_sn2201->main_mux_devs_num);
1099 dev_err(nvsw_sn2201->dev, "Failed to create main mux devices\n");
1103 nvsw_sn2201->cpld_devs->adapter = i2c_get_adapter(nvsw_sn2201->cpld_devs->nr);
1104 if (!nvsw_sn2201->cpld_devs->adapter) {
1106 dev_err(nvsw_sn2201->dev, "Failed to get adapter for bus %d\n",
1107 nvsw_sn2201->cpld_devs->nr);
1112 nvsw_sn2201->cpld_devs->client = i2c_new_dummy_device(nvsw_sn2201->cpld_devs->adapter,
1114 if (IS_ERR(nvsw_sn2201->cpld_devs->client)) {
1115 err = PTR_ERR(nvsw_sn2201->cpld_devs->client);
1116 dev_err(nvsw_sn2201->dev, "Failed to create %s cpld device at bus %d at addr 0x%02x\n",
1117 nvsw_sn2201->cpld_devs->brdinfo->type, nvsw_sn2201->cpld_devs->nr,
1118 nvsw_sn2201->cpld_devs->brdinfo->addr);
1122 regmap = devm_regmap_init_i2c(nvsw_sn2201->cpld_devs->client, &nvsw_sn2201_regmap_conf);
1125 dev_err(nvsw_sn2201->dev, "Failed to initialise managed register map\n");
1134 dev_err(nvsw_sn2201->dev, "Failed to set register at offset 0x%02x to default value: 0x%02x\n",
1145 dev_err(nvsw_sn2201->dev, "Failed to Sync registers with hardware\n");
1150 err = nvsw_sn2201_config_init(nvsw_sn2201, regmap);
1152 dev_err(nvsw_sn2201->dev, "Failed to configure board\n");
1159 nvsw_sn2201_config_exit(nvsw_sn2201);
1164 i2c_put_adapter(nvsw_sn2201->cpld_devs->adapter);
1165 nvsw_sn2201->cpld_devs->adapter = NULL;
1168 nvsw_sn2201_destroy_static_devices(nvsw_sn2201, nvsw_sn2201->sn2201_devs,
1169 nvsw_sn2201->sn2201_devs_num);
1171 nvsw_sn2201_destroy_static_devices(nvsw_sn2201, nvsw_sn2201->main_mux_devs,
1172 nvsw_sn2201->main_mux_devs_num);
1174 i2c_put_adapter(nvsw_sn2201->main_mux_devs->adapter);
1179 static int nvsw_sn2201_config_pre_init(struct nvsw_sn2201 *nvsw_sn2201)
1181 nvsw_sn2201->i2c_data = &nvsw_sn2201_i2c_data;
1184 nvsw_sn2201->i2c_data->handle = nvsw_sn2201;
1185 nvsw_sn2201->i2c_data->completion_notify = nvsw_sn2201_i2c_completion_notify;
1186 nvsw_sn2201->pdev_i2c = platform_device_register_resndata(nvsw_sn2201->dev, "i2c_mlxcpld",
1190 nvsw_sn2201->i2c_data,
1191 sizeof(*nvsw_sn2201->i2c_data));
1192 if (IS_ERR(nvsw_sn2201->pdev_i2c))
1193 return PTR_ERR(nvsw_sn2201->pdev_i2c);
1200 struct nvsw_sn2201 *nvsw_sn2201;
1202 nvsw_sn2201 = devm_kzalloc(&pdev->dev, sizeof(*nvsw_sn2201), GFP_KERNEL);
1203 if (!nvsw_sn2201)
1206 nvsw_sn2201->dev = &pdev->dev;
1207 platform_set_drvdata(pdev, nvsw_sn2201);
1211 nvsw_sn2201->main_mux_deferred_nr = NVSW_SN2201_MAIN_MUX_DEFER_NR;
1212 nvsw_sn2201->main_mux_devs = nvsw_sn2201_main_mux_brdinfo;
1213 nvsw_sn2201->cpld_devs = nvsw_sn2201_cpld_brdinfo;
1214 nvsw_sn2201->sn2201_devs = nvsw_sn2201_static_brdinfo;
1215 nvsw_sn2201->sn2201_devs_num = ARRAY_SIZE(nvsw_sn2201_static_brdinfo);
1217 return nvsw_sn2201_config_pre_init(nvsw_sn2201);
1222 struct nvsw_sn2201 *nvsw_sn2201 = platform_get_drvdata(pdev);
1225 nvsw_sn2201_config_exit(nvsw_sn2201);
1228 nvsw_sn2201_destroy_static_devices(nvsw_sn2201,
1229 nvsw_sn2201->sn2201_devs,
1230 nvsw_sn2201->sn2201_devs_num);
1232 i2c_put_adapter(nvsw_sn2201->cpld_devs->adapter);
1233 nvsw_sn2201->cpld_devs->adapter = NULL;
1235 nvsw_sn2201_destroy_static_devices(nvsw_sn2201,
1236 nvsw_sn2201->main_mux_devs,
1237 nvsw_sn2201->main_mux_devs_num);
1240 if (nvsw_sn2201->pdev_i2c)
1241 platform_device_unregister(nvsw_sn2201->pdev_i2c);