Lines Matching refs:bay

32 #define MB_FCR32(bay, r)	((bay)->base + ((r) >> 2))  argument
33 #define MB_FCR8(bay, r) (((volatile u8 __iomem *)((bay)->base)) + (r)) argument
35 #define MB_IN32(bay,r) (in_le32(MB_FCR32(bay,r))) argument
36 #define MB_OUT32(bay,r,v) (out_le32(MB_FCR32(bay,r), (v))) argument
37 #define MB_BIS(bay,r,v) (MB_OUT32((bay), (r), MB_IN32((bay), r) | (v))) argument
38 #define MB_BIC(bay,r,v) (MB_OUT32((bay), (r), MB_IN32((bay), r) & ~(v))) argument
39 #define MB_IN8(bay,r) (in_8(MB_FCR8(bay,r))) argument
40 #define MB_OUT8(bay,r,v) (out_8(MB_FCR8(bay,r), (v))) argument
46 void (*init)(struct media_bay_info *bay);
47 u8 (*content)(struct media_bay_info *bay);
48 void (*power)(struct media_bay_info *bay, int on_off);
49 int (*setup_bus)(struct media_bay_info *bay, u8 device_id);
50 void (*un_reset)(struct media_bay_info *bay);
51 void (*un_reset_ide)(struct media_bay_info *bay);
134 ohare_mb_content(struct media_bay_info *bay) in ohare_mb_content() argument
136 return (MB_IN32(bay, OHARE_MBCR) >> 12) & 7; in ohare_mb_content()
140 heathrow_mb_content(struct media_bay_info *bay) in heathrow_mb_content() argument
142 return (MB_IN32(bay, HEATHROW_MBCR) >> 12) & 7; in heathrow_mb_content()
146 keylargo_mb_content(struct media_bay_info *bay) in keylargo_mb_content() argument
150 new_gpio = MB_IN8(bay, KL_GPIO_MEDIABAY_IRQ) & KEYLARGO_GPIO_INPUT_DATA; in keylargo_mb_content()
152 bay->cached_gpio = new_gpio; in keylargo_mb_content()
154 } else if (bay->cached_gpio != new_gpio) { in keylargo_mb_content()
155 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_ENABLE); in keylargo_mb_content()
156 (void)MB_IN32(bay, KEYLARGO_MBCR); in keylargo_mb_content()
158 MB_BIC(bay, KEYLARGO_MBCR, 0x0000000F); in keylargo_mb_content()
159 (void)MB_IN32(bay, KEYLARGO_MBCR); in keylargo_mb_content()
161 bay->cached_gpio = new_gpio; in keylargo_mb_content()
163 return (MB_IN32(bay, KEYLARGO_MBCR) >> 4) & 7; in keylargo_mb_content()
172 ohare_mb_power(struct media_bay_info* bay, int on_off) in ohare_mb_power() argument
176 MB_BIC(bay, OHARE_FCR, OH_BAY_RESET_N); in ohare_mb_power()
177 MB_BIC(bay, OHARE_FCR, OH_BAY_POWER_N); in ohare_mb_power()
180 MB_BIC(bay, OHARE_FCR, OH_BAY_DEV_MASK); in ohare_mb_power()
181 MB_BIC(bay, OHARE_FCR, OH_FLOPPY_ENABLE); in ohare_mb_power()
183 MB_BIS(bay, OHARE_FCR, OH_BAY_POWER_N); in ohare_mb_power()
184 MB_BIS(bay, OHARE_FCR, OH_BAY_RESET_N); in ohare_mb_power()
185 MB_BIS(bay, OHARE_FCR, OH_IDE1_RESET_N); in ohare_mb_power()
187 MB_BIC(bay, OHARE_MBCR, 0x00000F00); in ohare_mb_power()
191 heathrow_mb_power(struct media_bay_info* bay, int on_off) in heathrow_mb_power() argument
195 MB_BIC(bay, HEATHROW_FCR, HRW_BAY_RESET_N); in heathrow_mb_power()
196 MB_BIC(bay, HEATHROW_FCR, HRW_BAY_POWER_N); in heathrow_mb_power()
199 MB_BIC(bay, HEATHROW_FCR, HRW_BAY_DEV_MASK); in heathrow_mb_power()
200 MB_BIC(bay, HEATHROW_FCR, HRW_SWIM_ENABLE); in heathrow_mb_power()
202 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_POWER_N); in heathrow_mb_power()
203 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_RESET_N); in heathrow_mb_power()
204 MB_BIS(bay, HEATHROW_FCR, HRW_IDE1_RESET_N); in heathrow_mb_power()
206 MB_BIC(bay, HEATHROW_MBCR, 0x00000F00); in heathrow_mb_power()
210 keylargo_mb_power(struct media_bay_info* bay, int on_off) in keylargo_mb_power() argument
214 MB_BIC(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_RESET); in keylargo_mb_power()
215 MB_BIC(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_POWER); in keylargo_mb_power()
218 MB_BIC(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_MASK); in keylargo_mb_power()
219 MB_BIC(bay, KEYLARGO_FCR1, KL1_EIDE0_ENABLE); in keylargo_mb_power()
221 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_POWER); in keylargo_mb_power()
222 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_RESET); in keylargo_mb_power()
223 MB_BIS(bay, KEYLARGO_FCR1, KL1_EIDE0_RESET_N); in keylargo_mb_power()
225 MB_BIC(bay, KEYLARGO_MBCR, 0x0000000F); in keylargo_mb_power()
234 ohare_mb_setup_bus(struct media_bay_info* bay, u8 device_id) in ohare_mb_setup_bus() argument
239 MB_BIS(bay, OHARE_FCR, OH_BAY_FLOPPY_ENABLE); in ohare_mb_setup_bus()
240 MB_BIS(bay, OHARE_FCR, OH_FLOPPY_ENABLE); in ohare_mb_setup_bus()
243 MB_BIC(bay, OHARE_FCR, OH_IDE1_RESET_N); in ohare_mb_setup_bus()
244 MB_BIS(bay, OHARE_FCR, OH_BAY_IDE_ENABLE); in ohare_mb_setup_bus()
247 MB_BIS(bay, OHARE_FCR, OH_BAY_PCI_ENABLE); in ohare_mb_setup_bus()
254 heathrow_mb_setup_bus(struct media_bay_info* bay, u8 device_id) in heathrow_mb_setup_bus() argument
259 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_FLOPPY_ENABLE); in heathrow_mb_setup_bus()
260 MB_BIS(bay, HEATHROW_FCR, HRW_SWIM_ENABLE); in heathrow_mb_setup_bus()
263 MB_BIC(bay, HEATHROW_FCR, HRW_IDE1_RESET_N); in heathrow_mb_setup_bus()
264 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_IDE_ENABLE); in heathrow_mb_setup_bus()
267 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_PCI_ENABLE); in heathrow_mb_setup_bus()
274 keylargo_mb_setup_bus(struct media_bay_info* bay, u8 device_id) in keylargo_mb_setup_bus() argument
278 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_IDE_ENABLE); in keylargo_mb_setup_bus()
279 MB_BIC(bay, KEYLARGO_FCR1, KL1_EIDE0_RESET_N); in keylargo_mb_setup_bus()
280 MB_BIS(bay, KEYLARGO_FCR1, KL1_EIDE0_ENABLE); in keylargo_mb_setup_bus()
283 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_PCI_ENABLE); in keylargo_mb_setup_bus()
286 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_SOUND_ENABLE); in keylargo_mb_setup_bus()
297 ohare_mb_un_reset(struct media_bay_info* bay) in ohare_mb_un_reset() argument
299 MB_BIS(bay, OHARE_FCR, OH_BAY_RESET_N); in ohare_mb_un_reset()
302 static void keylargo_mb_init(struct media_bay_info *bay) in keylargo_mb_init() argument
304 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_ENABLE); in keylargo_mb_init()
307 static void heathrow_mb_un_reset(struct media_bay_info* bay) in heathrow_mb_un_reset() argument
309 MB_BIS(bay, HEATHROW_FCR, HRW_BAY_RESET_N); in heathrow_mb_un_reset()
312 static void keylargo_mb_un_reset(struct media_bay_info* bay) in keylargo_mb_un_reset() argument
314 MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_DEV_RESET); in keylargo_mb_un_reset()
317 static void ohare_mb_un_reset_ide(struct media_bay_info* bay) in ohare_mb_un_reset_ide() argument
319 MB_BIS(bay, OHARE_FCR, OH_IDE1_RESET_N); in ohare_mb_un_reset_ide()
322 static void heathrow_mb_un_reset_ide(struct media_bay_info* bay) in heathrow_mb_un_reset_ide() argument
324 MB_BIS(bay, HEATHROW_FCR, HRW_IDE1_RESET_N); in heathrow_mb_un_reset_ide()
327 static void keylargo_mb_un_reset_ide(struct media_bay_info* bay) in keylargo_mb_un_reset_ide() argument
329 MB_BIS(bay, KEYLARGO_FCR1, KL1_EIDE0_RESET_N); in keylargo_mb_un_reset_ide()
332 static inline void set_mb_power(struct media_bay_info* bay, int onoff) in set_mb_power() argument
336 bay->ops->power(bay, 1); in set_mb_power()
337 bay->state = mb_powering_up; in set_mb_power()
338 pr_debug("mediabay%d: powering up\n", bay->index); in set_mb_power()
341 bay->ops->power(bay, 0); in set_mb_power()
342 bay->state = mb_powering_down; in set_mb_power()
343 pr_debug("mediabay%d: powering down\n", bay->index); in set_mb_power()
345 bay->timer = msecs_to_jiffies(MB_POWER_DELAY); in set_mb_power()
348 static void poll_media_bay(struct media_bay_info* bay) in poll_media_bay() argument
350 int id = bay->ops->content(bay); in poll_media_bay()
361 if (id != bay->last_value) { in poll_media_bay()
362 bay->last_value = id; in poll_media_bay()
363 bay->value_count = 0; in poll_media_bay()
366 if (id == bay->content_id) in poll_media_bay()
369 bay->value_count += msecs_to_jiffies(MB_POLL_DELAY); in poll_media_bay()
370 if (bay->value_count >= msecs_to_jiffies(MB_STABLE_DELAY)) { in poll_media_bay()
375 if ((id != MB_NO) && (bay->content_id != MB_NO)) { in poll_media_bay()
377 pr_debug("mediabay%d: forcing MB_NO\n", bay->index); in poll_media_bay()
379 pr_debug("mediabay%d: switching to %d\n", bay->index, id); in poll_media_bay()
380 set_mb_power(bay, id != MB_NO); in poll_media_bay()
381 bay->content_id = id; in poll_media_bay()
383 printk(KERN_INFO "mediabay%d: Bay is now empty\n", bay->index); in poll_media_bay()
386 bay->index, mb_content_types[id]); in poll_media_bay()
392 struct media_bay_info* bay; in check_media_bay() local
403 bay = macio_get_drvdata(baydev); in check_media_bay()
404 if (bay == NULL) in check_media_bay()
406 id = bay->content_id; in check_media_bay()
407 if (bay->state != mb_up) in check_media_bay()
417 struct media_bay_info* bay; in lock_media_bay() local
421 bay = macio_get_drvdata(baydev); in lock_media_bay()
422 if (bay == NULL) in lock_media_bay()
424 mutex_lock(&bay->lock); in lock_media_bay()
425 bay->user_lock = 1; in lock_media_bay()
431 struct media_bay_info* bay; in unlock_media_bay() local
435 bay = macio_get_drvdata(baydev); in unlock_media_bay()
436 if (bay == NULL) in unlock_media_bay()
438 if (bay->user_lock) { in unlock_media_bay()
439 bay->user_lock = 0; in unlock_media_bay()
440 mutex_unlock(&bay->lock); in unlock_media_bay()
447 struct media_bay_info* bay = data; in mb_broadcast_hotplug() local
455 state = bay->state == mb_up ? bay->content_id : MB_NO; in mb_broadcast_hotplug()
467 struct media_bay_info* bay = &media_bays[i]; in media_bay_step() local
470 if (bay->state != mb_powering_down) in media_bay_step()
471 poll_media_bay(bay); in media_bay_step()
474 if (bay->timer != 0) { in media_bay_step()
475 bay->timer -= msecs_to_jiffies(MB_POLL_DELAY); in media_bay_step()
476 if (bay->timer > 0) in media_bay_step()
478 bay->timer = 0; in media_bay_step()
481 switch(bay->state) { in media_bay_step()
483 if (bay->ops->setup_bus(bay, bay->last_value) < 0) { in media_bay_step()
485 i, bay->content_id); in media_bay_step()
486 set_mb_power(bay, 0); in media_bay_step()
489 bay->timer = msecs_to_jiffies(MB_RESET_DELAY); in media_bay_step()
490 bay->state = mb_enabling_bay; in media_bay_step()
491 pr_debug("mediabay%d: enabling (kind:%d)\n", i, bay->content_id); in media_bay_step()
494 bay->ops->un_reset(bay); in media_bay_step()
495 bay->timer = msecs_to_jiffies(MB_SETUP_DELAY); in media_bay_step()
496 bay->state = mb_resetting; in media_bay_step()
498 i, bay->content_id); in media_bay_step()
501 if (bay->content_id != MB_CD) { in media_bay_step()
503 bay->content_id); in media_bay_step()
504 bay->state = mb_up; in media_bay_step()
505 device_for_each_child(&bay->mdev->ofdev.dev, in media_bay_step()
506 bay, mb_broadcast_hotplug); in media_bay_step()
510 i, bay->content_id); in media_bay_step()
511 bay->ops->un_reset_ide(bay); in media_bay_step()
512 bay->timer = msecs_to_jiffies(MB_IDE_WAIT); in media_bay_step()
513 bay->state = mb_ide_resetting; in media_bay_step()
517 pr_debug("mediabay%d: bay is up (kind:%d)\n", i, bay->content_id); in media_bay_step()
518 bay->state = mb_up; in media_bay_step()
519 device_for_each_child(&bay->mdev->ofdev.dev, in media_bay_step()
520 bay, mb_broadcast_hotplug); in media_bay_step()
524 bay->state = mb_empty; in media_bay_step()
525 device_for_each_child(&bay->mdev->ofdev.dev, in media_bay_step()
526 bay, mb_broadcast_hotplug); in media_bay_step()
558 struct media_bay_info* bay; in media_bay_attach() local
582 bay = &media_bays[i]; in media_bay_attach()
583 bay->mdev = mdev; in media_bay_attach()
584 bay->base = regbase; in media_bay_attach()
585 bay->index = i; in media_bay_attach()
586 bay->ops = match->data; in media_bay_attach()
587 bay->sleeping = 0; in media_bay_attach()
588 mutex_init(&bay->lock); in media_bay_attach()
591 if (bay->ops->init) in media_bay_attach()
592 bay->ops->init(bay); in media_bay_attach()
594 printk(KERN_INFO "mediabay%d: Registered %s media-bay\n", i, bay->ops->name); in media_bay_attach()
597 set_mb_power(bay, 0); in media_bay_attach()
599 bay->content_id = MB_NO; in media_bay_attach()
600 bay->last_value = bay->ops->content(bay); in media_bay_attach()
601 bay->value_count = msecs_to_jiffies(MB_STABLE_DELAY); in media_bay_attach()
602 bay->state = mb_empty; in media_bay_attach()
605 macio_set_drvdata(mdev, bay); in media_bay_attach()
617 struct media_bay_info *bay = macio_get_drvdata(mdev); in media_bay_suspend() local
621 mutex_lock(&bay->lock); in media_bay_suspend()
622 bay->sleeping = 1; in media_bay_suspend()
623 set_mb_power(bay, 0); in media_bay_suspend()
624 mutex_unlock(&bay->lock); in media_bay_suspend()
633 struct media_bay_info *bay = macio_get_drvdata(mdev); in media_bay_resume() local
643 mutex_lock(&bay->lock); in media_bay_resume()
644 set_mb_power(bay, 0); in media_bay_resume()
646 if (bay->ops->content(bay) != bay->content_id) { in media_bay_resume()
647 printk("mediabay%d: Content changed during sleep...\n", bay->index); in media_bay_resume()
648 mutex_unlock(&bay->lock); in media_bay_resume()
651 set_mb_power(bay, 1); in media_bay_resume()
652 bay->last_value = bay->content_id; in media_bay_resume()
653 bay->value_count = msecs_to_jiffies(MB_STABLE_DELAY); in media_bay_resume()
654 bay->timer = msecs_to_jiffies(MB_POWER_DELAY); in media_bay_resume()
657 media_bay_step(bay->index); in media_bay_resume()
658 } while((bay->state != mb_empty) && in media_bay_resume()
659 (bay->state != mb_up)); in media_bay_resume()
660 bay->sleeping = 0; in media_bay_resume()
661 mutex_unlock(&bay->lock); in media_bay_resume()