Lines Matching defs:smu

15  *  - maybe avoid some data copies with i2c by directly using the smu cmd
47 #include <asm/smu.h>
99 static struct smu_device *smu;
115 if (list_empty(&smu->cmd_list))
119 cmd = list_entry(smu->cmd_list.next, struct smu_cmd, link);
120 smu->cmd_cur = cmd;
128 smu->cmd_buf->cmd = cmd->cmd;
129 smu->cmd_buf->length = cmd->data_len;
130 memcpy(smu->cmd_buf->data, cmd->data_buf, cmd->data_len);
133 faddr = (unsigned long)smu->cmd_buf;
134 fend = faddr + smu->cmd_buf->length + 2;
147 if (smu->broken_nap)
154 writel(smu->cmd_buf_abs, smu->db_buf);
157 pmac_do_feature_call(PMAC_FTR_WRITE_GPIO, NULL, smu->doorbell, 4);
173 spin_lock_irqsave(&smu->lock, flags);
175 gpio = pmac_do_feature_call(PMAC_FTR_READ_GPIO, NULL, smu->doorbell);
177 spin_unlock_irqrestore(&smu->lock, flags);
181 cmd = smu->cmd_cur;
182 smu->cmd_cur = NULL;
196 faddr = (unsigned long)smu->cmd_buf;
201 if (ack != smu->cmd_buf->cmd) {
203 ack, smu->cmd_buf->cmd);
206 reply_len = rc == 0 ? smu->cmd_buf->length : 0;
216 memcpy(cmd->reply_buf, smu->cmd_buf->data, reply_len);
228 if (smu->broken_nap)
233 spin_unlock_irqrestore(&smu->lock, flags);
267 if (smu == NULL)
274 spin_lock_irqsave(&smu->lock, flags);
275 list_add_tail(&cmd->link, &smu->cmd_list);
276 if (smu->cmd_cur == NULL)
278 spin_unlock_irqrestore(&smu->lock, flags);
281 if (!smu_irq_inited || !smu->db_irq)
324 if (smu == NULL)
327 gpio = pmac_do_feature_call(PMAC_FTR_READ_GPIO, NULL, smu->doorbell);
329 smu_db_intr(smu->db_irq, smu);
385 if (smu == NULL)
412 if (smu == NULL)
436 if (smu == NULL)
452 if (smu == NULL)
466 return smu != NULL;
477 np = of_find_node_by_type(NULL, "smu");
494 smu = memblock_alloc(sizeof(struct smu_device), SMP_CACHE_BYTES);
495 if (!smu)
499 spin_lock_init(&smu->lock);
500 INIT_LIST_HEAD(&smu->cmd_list);
501 INIT_LIST_HEAD(&smu->cmd_i2c_list);
502 smu->of_node = np;
503 smu->db_irq = 0;
504 smu->msg_irq = 0;
509 smu->cmd_buf_abs = (u32)smu_cmdbuf_abs;
510 smu->cmd_buf = __va(smu_cmdbuf_abs);
512 smu->db_node = of_find_node_by_name(NULL, "smu-doorbell");
513 if (smu->db_node == NULL) {
518 data = of_get_property(smu->db_node, "reg", NULL);
529 smu->doorbell = *data;
530 if (smu->doorbell < 0x50)
531 smu->doorbell += 0x50;
533 /* Now look for the smu-interrupt GPIO */
535 smu->msg_node = of_find_node_by_name(NULL, "smu-interrupt");
536 if (smu->msg_node == NULL)
538 data = of_get_property(smu->msg_node, "reg", NULL);
540 of_node_put(smu->msg_node);
541 smu->msg_node = NULL;
544 smu->msg = *data;
545 if (smu->msg < 0x50)
546 smu->msg += 0x50;
553 smu->db_buf = ioremap(0x8000860c, 0x1000);
554 if (smu->db_buf == NULL) {
561 smu->broken_nap = pmac_get_uninorth_variant() < 4;
562 if (smu->broken_nap)
569 of_node_put(smu->msg_node);
571 of_node_put(smu->db_node);
573 memblock_free(__pa(smu), sizeof(struct smu_device));
574 smu = NULL;
583 if (!smu)
586 timer_setup(&smu->i2c_timer, smu_i2c_retry, 0);
588 if (smu->db_node) {
589 smu->db_irq = irq_of_parse_and_map(smu->db_node, 0);
590 if (!smu->db_irq)
591 printk(KERN_ERR "smu: failed to map irq for node %pOF\n",
592 smu->db_node);
594 if (smu->msg_node) {
595 smu->msg_irq = irq_of_parse_and_map(smu->msg_node, 0);
596 if (!smu->msg_irq)
597 printk(KERN_ERR "smu: failed to map irq for node %pOF\n",
598 smu->msg_node);
605 if (smu->db_irq) {
606 if (request_irq(smu->db_irq, smu_db_intr,
607 IRQF_SHARED, "SMU doorbell", smu) < 0) {
610 smu->db_irq);
611 smu->db_irq = 0;
615 if (smu->msg_irq) {
616 if (request_irq(smu->msg_irq, smu_msg_intr,
617 IRQF_SHARED, "SMU message", smu) < 0) {
620 smu->msg_irq);
621 smu->msg_irq = 0;
641 for_each_child_of_node(smu->of_node, np)
642 if (of_device_is_compatible(np, "smu-sensors"))
643 of_platform_device_create(np, "smu-sensors",
644 &smu->of_dev->dev);
651 if (!smu)
653 smu->of_dev = dev;
667 .type = "smu",
675 .name = "smu",
696 if (!smu)
698 return smu->of_dev;
728 spin_lock_irqsave(&smu->lock, flags);
729 smu->cmd_i2c_cur = NULL;
734 if (!list_empty(&smu->cmd_i2c_list)) {
738 newcmd = list_entry(smu->cmd_i2c_list.next,
740 smu->cmd_i2c_cur = newcmd;
743 /* Queue with low level smu */
744 list_add_tail(&cmd->scmd.link, &smu->cmd_list);
745 if (smu->cmd_cur == NULL)
748 spin_unlock_irqrestore(&smu->lock, flags);
759 struct smu_i2c_cmd *cmd = smu->cmd_i2c_cur;
794 BUG_ON(cmd != smu->cmd_i2c_cur);
800 mod_timer(&smu->i2c_timer, jiffies + msecs_to_jiffies(5));
828 if (smu == NULL)
887 spin_lock_irqsave(&smu->lock, flags);
888 if (smu->cmd_i2c_cur == NULL) {
889 smu->cmd_i2c_cur = cmd;
890 list_add_tail(&cmd->scmd.link, &smu->cmd_list);
891 if (smu->cmd_cur == NULL)
894 list_add_tail(&cmd->link, &smu->cmd_i2c_list);
895 spin_unlock_irqrestore(&smu->lock, flags);
960 DPRINTK("SMU: Query partition infos ... (irq=%d)\n", smu->db_irq);
1003 if (of_add_property(smu->of_node, prop)) {
1024 if (!smu)
1039 part = of_get_property(smu->of_node, pname, size);
1326 MISC_DYNAMIC_MINOR, "smu", &smu_device_fops
1331 if (!smu)