Lines Matching defs:pmb
7 #include <dt-bindings/soc/bcm-pmb.h>
85 struct bcm_pmb *pmb;
90 static int bcm_pmb_bpcm_read(struct bcm_pmb *pmb, int bus, u8 device,
93 void __iomem *base = pmb->base + bus * 0x20;
97 spin_lock_irqsave(&pmb->lock, flags);
99 spin_unlock_irqrestore(&pmb->lock, flags);
102 *val = pmb->little_endian ? le32_to_cpu(*val) : be32_to_cpu(*val);
107 static int bcm_pmb_bpcm_write(struct bcm_pmb *pmb, int bus, u8 device,
110 void __iomem *base = pmb->base + bus * 0x20;
114 val = pmb->little_endian ? cpu_to_le32(val) : cpu_to_be32(val);
116 spin_lock_irqsave(&pmb->lock, flags);
118 spin_unlock_irqrestore(&pmb->lock, flags);
123 static int bcm_pmb_power_off_zone(struct bcm_pmb *pmb, int bus, u8 device,
132 err = bcm_pmb_bpcm_read(pmb, bus, device, offset, &val);
139 err = bcm_pmb_bpcm_write(pmb, bus, device, offset, val);
144 static int bcm_pmb_power_on_zone(struct bcm_pmb *pmb, int bus, u8 device,
153 err = bcm_pmb_bpcm_read(pmb, bus, device, offset, &val);
164 err = bcm_pmb_bpcm_write(pmb, bus, device, offset, val);
170 static int bcm_pmb_power_off_device(struct bcm_pmb *pmb, int bus, u8 device)
179 err = bcm_pmb_bpcm_read(pmb, bus, device, offset, &val);
186 err = bcm_pmb_bpcm_write(pmb, bus, device, offset, val);
192 static int bcm_pmb_power_on_device(struct bcm_pmb *pmb, int bus, u8 device)
198 err = bcm_pmb_bpcm_read(pmb, bus, device, BPCM_CAPABILITIES, &val);
203 err = bcm_pmb_power_on_zone(pmb, bus, device, i);
211 static int bcm_pmb_power_on_sata(struct bcm_pmb *pmb, int bus, u8 device)
215 err = bcm_pmb_power_on_zone(pmb, bus, device, 0);
220 err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_MISC_CONTROL, 0);
224 err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_SR_CONTROL, 0xffffffff);
228 err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_SR_CONTROL, 0);
237 struct bcm_pmb *pmb = pd->pmb;
243 return bcm_pmb_power_on_zone(pmb, data->bus, data->device, 0);
245 return bcm_pmb_power_on_device(pmb, data->bus, data->device);
247 return bcm_pmb_power_on_sata(pmb, data->bus, data->device);
249 dev_err(pmb->dev, "unsupported device id: %d\n", data->id);
258 struct bcm_pmb *pmb = pd->pmb;
264 return bcm_pmb_power_off_zone(pmb, data->bus, data->device, 0);
266 return bcm_pmb_power_off_device(pmb, data->bus, data->device);
268 dev_err(pmb->dev, "unsupported device id: %d\n", data->id);
278 struct bcm_pmb *pmb;
282 pmb = devm_kzalloc(dev, sizeof(*pmb), GFP_KERNEL);
283 if (!pmb)
286 pmb->dev = dev;
288 pmb->base = devm_platform_ioremap_resource(pdev, 0);
289 if (IS_ERR(pmb->base))
290 return PTR_ERR(pmb->base);
292 spin_lock_init(&pmb->lock);
294 pmb->little_endian = !of_device_is_big_endian(dev->of_node);
304 pmb->genpd_onecell_data.num_domains = max_id + 1;
305 pmb->genpd_onecell_data.domains =
306 devm_kcalloc(dev, pmb->genpd_onecell_data.num_domains,
308 if (!pmb->genpd_onecell_data.domains)
317 pd->pmb = pmb;
324 pmb->genpd_onecell_data.domains[e->id] = &pd->genpd;
327 err = of_genpd_add_provider_onecell(dev->of_node, &pmb->genpd_onecell_data);
350 { .compatible = "brcm,bcm4908-pmb", .data = &bcm_pmb_bcm4908_data, },
351 { .compatible = "brcm,bcm63138-pmb", .data = &bcm_pmb_bcm63138_data, },
357 .name = "bcm-pmb",