2019-03-14 01:02:48 +03:00
// SPDX-License-Identifier: GPL-2.0
2006-03-27 13:16:40 +04:00
/*
* RTC subsystem , proc interface
*
* Copyright ( C ) 2005 - 06 Tower Technologies
* Author : Alessandro Zummo < a . zummo @ towertech . it >
*
* based on arch / arm / common / rtctime . c
2019-03-14 01:02:48 +03:00
*/
2006-03-27 13:16:40 +04:00
# include <linux/module.h>
# include <linux/rtc.h>
# include <linux/proc_fs.h>
# include <linux/seq_file.h>
2007-05-08 11:33:30 +04:00
# include "rtc-core.h"
2012-10-05 04:13:45 +04:00
# define NAME_SIZE 10
# if defined(CONFIG_RTC_HCTOSYS_DEVICE)
static bool is_rtc_hctosys ( struct rtc_device * rtc )
{
int size ;
char name [ NAME_SIZE ] ;
2021-05-11 10:19:26 +03:00
size = snprintf ( name , NAME_SIZE , " rtc%d " , rtc - > id ) ;
if ( size > = NAME_SIZE )
2012-10-05 04:13:45 +04:00
return false ;
return ! strncmp ( name , CONFIG_RTC_HCTOSYS_DEVICE , NAME_SIZE ) ;
}
# else
static bool is_rtc_hctosys ( struct rtc_device * rtc )
{
return ( rtc - > id = = 0 ) ;
}
# endif
2007-05-08 11:33:30 +04:00
2006-03-27 13:16:40 +04:00
static int rtc_proc_show ( struct seq_file * seq , void * offset )
{
int err ;
2007-05-08 11:33:30 +04:00
struct rtc_device * rtc = seq - > private ;
const struct rtc_class_ops * ops = rtc - > ops ;
2006-03-27 13:16:40 +04:00
struct rtc_wkalrm alrm ;
struct rtc_time tm ;
2007-05-08 11:33:30 +04:00
err = rtc_read_time ( rtc , & tm ) ;
2006-03-27 13:16:40 +04:00
if ( err = = 0 ) {
seq_printf ( seq ,
2018-12-05 00:23:12 +03:00
" rtc_time \t : %ptRt \n "
" rtc_date \t : %ptRd \n " ,
& tm , & tm ) ;
2006-03-27 13:16:40 +04:00
}
2007-05-08 11:33:30 +04:00
err = rtc_read_alarm ( rtc , & alrm ) ;
2006-03-27 13:16:40 +04:00
if ( err = = 0 ) {
2018-12-05 00:23:12 +03:00
seq_printf ( seq , " alrm_time \t : %ptRt \n " , & alrm . time ) ;
seq_printf ( seq , " alrm_date \t : %ptRd \n " , & alrm . time ) ;
2006-12-13 11:35:08 +03:00
seq_printf ( seq , " alarm_IRQ \t : %s \n " ,
2019-03-20 14:59:09 +03:00
alrm . enabled ? " yes " : " no " ) ;
2006-03-27 13:16:40 +04:00
seq_printf ( seq , " alrm_pending \t : %s \n " ,
2019-03-20 14:59:09 +03:00
alrm . pending ? " yes " : " no " ) ;
2011-02-11 16:50:24 +03:00
seq_printf ( seq , " update IRQ enabled \t : %s \n " ,
2019-03-20 14:59:09 +03:00
( rtc - > uie_rtctimer . enabled ) ? " yes " : " no " ) ;
2011-02-11 16:50:24 +03:00
seq_printf ( seq , " periodic IRQ enabled \t : %s \n " ,
2019-03-20 14:59:09 +03:00
( rtc - > pie_enabled ) ? " yes " : " no " ) ;
2011-02-11 16:50:24 +03:00
seq_printf ( seq , " periodic IRQ frequency \t : %d \n " ,
2019-03-20 14:59:09 +03:00
rtc - > irq_freq ) ;
2011-02-11 16:50:24 +03:00
seq_printf ( seq , " max user IRQ frequency \t : %d \n " ,
2019-03-20 14:59:09 +03:00
rtc - > max_user_freq ) ;
2006-03-27 13:16:40 +04:00
}
2006-04-11 09:54:43 +04:00
seq_printf ( seq , " 24hr \t \t : yes \n " ) ;
2006-03-27 13:16:40 +04:00
if ( ops - > proc )
2007-05-08 11:33:40 +04:00
ops - > proc ( rtc - > dev . parent , seq ) ;
2006-03-27 13:16:40 +04:00
return 0 ;
}
2007-05-08 11:33:38 +04:00
void rtc_proc_add_device ( struct rtc_device * rtc )
2006-03-27 13:16:40 +04:00
{
2012-10-05 04:13:45 +04:00
if ( is_rtc_hctosys ( rtc ) )
2018-04-11 19:22:20 +03:00
proc_create_single_data ( " driver/rtc " , 0 , NULL , rtc_proc_show ,
2019-03-20 14:59:09 +03:00
rtc ) ;
2006-03-27 13:16:40 +04:00
}
2007-05-08 11:33:38 +04:00
void rtc_proc_del_device ( struct rtc_device * rtc )
2006-03-27 13:16:40 +04:00
{
2012-10-05 04:13:45 +04:00
if ( is_rtc_hctosys ( rtc ) )
2006-03-27 13:16:40 +04:00
remove_proc_entry ( " driver/rtc " , NULL ) ;
}