Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /******************************************************************************* |
| 2 | * |
| 3 | * "cs4281pm.c" -- Cirrus Logic-Crystal CS4281 linux audio driver. |
| 4 | * |
| 5 | * Copyright (C) 2000,2001 Cirrus Logic Corp. |
| 6 | * -- tom woller (twoller@crystal.cirrus.com) or |
| 7 | * (audio@crystal.cirrus.com). |
| 8 | * |
| 9 | * This program is free software; you can redistribute it and/or modify |
| 10 | * it under the terms of the GNU General Public License as published by |
| 11 | * the Free Software Foundation; either version 2 of the License, or |
| 12 | * (at your option) any later version. |
| 13 | * |
| 14 | * This program is distributed in the hope that it will be useful, |
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 17 | * GNU General Public License for more details. |
| 18 | * |
| 19 | * You should have received a copy of the GNU General Public License |
| 20 | * along with this program; if not, write to the Free Software |
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 22 | * |
| 23 | * 12/22/00 trw - new file. |
| 24 | * |
| 25 | *******************************************************************************/ |
| 26 | |
| 27 | #ifndef NOT_CS4281_PM |
| 28 | #include <linux/pm.h> |
| 29 | |
| 30 | #define cs_pm_register(a, b, c) pm_register((a), (b), (c)); |
| 31 | #define cs_pm_unregister_all(a) pm_unregister_all((a)); |
| 32 | |
| 33 | static int cs4281_suspend(struct cs4281_state *s); |
| 34 | static int cs4281_resume(struct cs4281_state *s); |
| 35 | /* |
| 36 | * for now (12/22/00) only enable the pm_register PM support. |
| 37 | * allow these table entries to be null. |
| 38 | #define CS4281_SUSPEND_TBL cs4281_suspend_tbl |
| 39 | #define CS4281_RESUME_TBL cs4281_resume_tbl |
| 40 | */ |
| 41 | #define CS4281_SUSPEND_TBL cs4281_suspend_null |
| 42 | #define CS4281_RESUME_TBL cs4281_resume_null |
| 43 | |
| 44 | static int cs4281_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) |
| 45 | { |
| 46 | struct cs4281_state *state; |
| 47 | |
| 48 | CS_DBGOUT(CS_PM, 2, printk(KERN_INFO |
| 49 | "cs4281: cs4281_pm_callback dev=%p rqst=0x%x state=%p\n", |
| 50 | dev,(unsigned)rqst,data)); |
| 51 | state = (struct cs4281_state *) dev->data; |
| 52 | if (state) { |
| 53 | switch(rqst) { |
| 54 | case PM_SUSPEND: |
| 55 | CS_DBGOUT(CS_PM, 2, printk(KERN_INFO |
| 56 | "cs4281: PM suspend request\n")); |
| 57 | if(cs4281_suspend(state)) |
| 58 | { |
| 59 | CS_DBGOUT(CS_ERROR, 2, printk(KERN_INFO |
| 60 | "cs4281: PM suspend request refused\n")); |
| 61 | return 1; |
| 62 | } |
| 63 | break; |
| 64 | case PM_RESUME: |
| 65 | CS_DBGOUT(CS_PM, 2, printk(KERN_INFO |
| 66 | "cs4281: PM resume request\n")); |
| 67 | if(cs4281_resume(state)) |
| 68 | { |
| 69 | CS_DBGOUT(CS_ERROR, 2, printk(KERN_INFO |
| 70 | "cs4281: PM resume request refused\n")); |
| 71 | return 1; |
| 72 | } |
| 73 | break; |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | return 0; |
| 78 | } |
| 79 | |
| 80 | #else /* CS4281_PM */ |
| 81 | #define CS4281_SUSPEND_TBL cs4281_suspend_null |
| 82 | #define CS4281_RESUME_TBL cs4281_resume_null |
| 83 | #endif /* CS4281_PM */ |
| 84 | |